From c2e3e9476df3bcadefd76bebd0d121136b243fe8 Mon Sep 17 00:00:00 2001 From: Hokan Date: Sun, 13 Jan 2019 11:33:21 +0100 Subject: [PATCH] szkielet aplikacji, baza i wyswietlanie danych --- .idea/hotel.iml | 11 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/workspace.xml | 291 + .../__pycache__/django-admin.cpython-35.pyc | Bin 0 -> 278 bytes env/bin/activate | 76 + env/bin/activate.csh | 37 + env/bin/activate.fish | 74 + env/bin/django-admin | 11 + env/bin/django-admin.py | 5 + env/bin/easy_install | 11 + env/bin/easy_install-3.5 | 11 + env/bin/pip | 11 + env/bin/pip3 | 11 + env/bin/pip3.5 | 11 + env/bin/python | 1 + env/bin/python3 | 1 + .../Django-2.1.5.dist-info/INSTALLER | 1 + .../Django-2.1.5.dist-info/LICENSE | 27 + .../Django-2.1.5.dist-info/METADATA | 83 + .../Django-2.1.5.dist-info/RECORD | 4169 +++++++ .../Django-2.1.5.dist-info/WHEEL | 5 + .../Django-2.1.5.dist-info/entry_points.txt | 3 + .../Django-2.1.5.dist-info/top_level.txt | 1 + .../__pycache__/easy_install.cpython-35.pyc | Bin 0 -> 286 bytes .../site-packages/django/__init__.py | 24 + .../site-packages/django/__main__.py | 9 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1017 bytes .../__pycache__/__main__.cpython-35.pyc | Bin 0 -> 372 bytes .../__pycache__/shortcuts.cpython-35.pyc | Bin 0 -> 5190 bytes .../site-packages/django/apps/__init__.py | 4 + .../apps/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 255 bytes .../apps/__pycache__/config.cpython-35.pyc | Bin 0 -> 4710 bytes .../apps/__pycache__/registry.cpython-35.pyc | Bin 0 -> 13558 bytes .../site-packages/django/apps/config.py | 203 + .../site-packages/django/apps/registry.py | 423 + .../__pycache__/django-admin.cpython-35.pyc | Bin 0 -> 263 bytes .../site-packages/django/bin/django-admin.py | 5 + .../site-packages/django/conf/__init__.py | 201 + .../conf/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 7850 bytes .../global_settings.cpython-35.pyc | Bin 0 -> 9019 bytes .../django/conf/app_template/__init__.py-tpl | 0 .../django/conf/app_template/admin.py-tpl | 3 + .../django/conf/app_template/apps.py-tpl | 5 + .../app_template/migrations/__init__.py-tpl | 0 .../django/conf/app_template/models.py-tpl | 3 + .../django/conf/app_template/tests.py-tpl | 3 + .../django/conf/app_template/views.py-tpl | 3 + .../django/conf/global_settings.py | 635 + .../django/conf/locale/__init__.py | 569 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 6912 bytes .../conf/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 19601 bytes .../conf/locale/af/LC_MESSAGES/django.po | 1231 ++ .../conf/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 30712 bytes .../conf/locale/ar/LC_MESSAGES/django.po | 1314 ++ .../django/conf/locale/ar/__init__.py | 0 .../ar/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ar/__pycache__/formats.cpython-35.pyc | Bin 0 -> 369 bytes .../django/conf/locale/ar/formats.py | 21 + .../conf/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 16665 bytes .../conf/locale/ast/LC_MESSAGES/django.po | 1212 ++ .../conf/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 26630 bytes .../conf/locale/az/LC_MESSAGES/django.po | 1260 ++ .../django/conf/locale/az/__init__.py | 0 .../az/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../az/__pycache__/formats.cpython-35.pyc | Bin 0 -> 738 bytes .../django/conf/locale/az/formats.py | 32 + .../conf/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 34765 bytes .../conf/locale/be/LC_MESSAGES/django.po | 1301 ++ .../conf/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 29687 bytes .../conf/locale/bg/LC_MESSAGES/django.po | 1253 ++ .../django/conf/locale/bg/__init__.py | 0 .../bg/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../bg/__pycache__/formats.cpython-35.pyc | Bin 0 -> 325 bytes .../django/conf/locale/bg/formats.py | 21 + .../conf/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 17250 bytes .../conf/locale/bn/LC_MESSAGES/django.po | 1191 ++ .../django/conf/locale/bn/__init__.py | 0 .../bn/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../bn/__pycache__/formats.cpython-35.pyc | Bin 0 -> 603 bytes .../django/conf/locale/bn/formats.py | 32 + .../conf/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 15435 bytes .../conf/locale/br/LC_MESSAGES/django.po | 1259 ++ .../conf/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 11073 bytes .../conf/locale/bs/LC_MESSAGES/django.po | 1211 ++ .../django/conf/locale/bs/__init__.py | 0 .../bs/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../bs/__pycache__/formats.cpython-35.pyc | Bin 0 -> 398 bytes .../django/conf/locale/bs/formats.py | 21 + .../conf/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 23602 bytes .../conf/locale/ca/LC_MESSAGES/django.po | 1253 ++ .../django/conf/locale/ca/__init__.py | 0 .../ca/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ca/__pycache__/formats.cpython-35.pyc | Bin 0 -> 763 bytes .../django/conf/locale/ca/formats.py | 30 + .../conf/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 28203 bytes .../conf/locale/cs/LC_MESSAGES/django.po | 1304 ++ .../django/conf/locale/cs/__init__.py | 0 .../cs/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../cs/__pycache__/formats.cpython-35.pyc | Bin 0 -> 906 bytes .../django/conf/locale/cs/formats.py | 42 + .../conf/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 22280 bytes .../conf/locale/cy/LC_MESSAGES/django.po | 1274 ++ .../django/conf/locale/cy/__init__.py | 0 .../cy/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../cy/__pycache__/formats.cpython-35.pyc | Bin 0 -> 813 bytes .../django/conf/locale/cy/formats.py | 35 + .../conf/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 25950 bytes .../conf/locale/da/LC_MESSAGES/django.po | 1261 ++ .../django/conf/locale/da/__init__.py | 0 .../da/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../da/__pycache__/formats.cpython-35.pyc | Bin 0 -> 639 bytes .../django/conf/locale/da/formats.py | 26 + .../conf/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 27406 bytes .../conf/locale/de/LC_MESSAGES/django.po | 1283 ++ .../django/conf/locale/de/__init__.py | 0 .../de/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../de/__pycache__/formats.cpython-35.pyc | Bin 0 -> 657 bytes .../django/conf/locale/de/formats.py | 28 + .../django/conf/locale/de_CH/__init__.py | 0 .../de_CH/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../de_CH/__pycache__/formats.cpython-35.pyc | Bin 0 -> 664 bytes .../django/conf/locale/de_CH/formats.py | 34 + .../conf/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 28658 bytes .../conf/locale/dsb/LC_MESSAGES/django.po | 1313 ++ .../conf/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 34317 bytes .../conf/locale/el/LC_MESSAGES/django.po | 1293 ++ .../django/conf/locale/el/__init__.py | 0 .../el/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../el/__pycache__/formats.cpython-35.pyc | Bin 0 -> 799 bytes .../django/conf/locale/el/formats.py | 35 + .../conf/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../conf/locale/en/LC_MESSAGES/django.po | 1519 +++ .../django/conf/locale/en/__init__.py | 0 .../en/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../en/__pycache__/formats.cpython-35.pyc | Bin 0 -> 818 bytes .../django/conf/locale/en/formats.py | 40 + .../conf/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 16288 bytes .../conf/locale/en_AU/LC_MESSAGES/django.po | 1205 ++ .../django/conf/locale/en_AU/__init__.py | 0 .../en_AU/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../en_AU/__pycache__/formats.cpython-35.pyc | Bin 0 -> 816 bytes .../django/conf/locale/en_AU/formats.py | 39 + .../conf/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 13133 bytes .../conf/locale/en_GB/LC_MESSAGES/django.po | 1195 ++ .../django/conf/locale/en_GB/__init__.py | 0 .../en_GB/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../en_GB/__pycache__/formats.cpython-35.pyc | Bin 0 -> 816 bytes .../django/conf/locale/en_GB/formats.py | 39 + .../conf/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 25987 bytes .../conf/locale/eo/LC_MESSAGES/django.po | 1269 ++ .../django/conf/locale/eo/__init__.py | 0 .../eo/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../eo/__pycache__/formats.cpython-35.pyc | Bin 0 -> 995 bytes .../django/conf/locale/eo/formats.py | 49 + .../conf/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 26351 bytes .../conf/locale/es/LC_MESSAGES/django.po | 1278 ++ .../django/conf/locale/es/__init__.py | 0 .../es/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../es/__pycache__/formats.cpython-35.pyc | Bin 0 -> 761 bytes .../django/conf/locale/es/formats.py | 30 + .../conf/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 27102 bytes .../conf/locale/es_AR/LC_MESSAGES/django.po | 1279 ++ .../django/conf/locale/es_AR/__init__.py | 0 .../es_AR/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../es_AR/__pycache__/formats.cpython-35.pyc | Bin 0 -> 731 bytes .../django/conf/locale/es_AR/formats.py | 30 + .../conf/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 22791 bytes .../conf/locale/es_CO/LC_MESSAGES/django.po | 1241 ++ .../django/conf/locale/es_CO/__init__.py | 0 .../es_CO/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../es_CO/__pycache__/formats.cpython-35.pyc | Bin 0 -> 777 bytes .../django/conf/locale/es_CO/formats.py | 26 + .../conf/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 15095 bytes .../conf/locale/es_MX/LC_MESSAGES/django.po | 1204 ++ .../django/conf/locale/es_MX/__init__.py | 0 .../es_MX/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../es_MX/__pycache__/formats.cpython-35.pyc | Bin 0 -> 777 bytes .../django/conf/locale/es_MX/formats.py | 25 + .../django/conf/locale/es_NI/__init__.py | 0 .../es_NI/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../es_NI/__pycache__/formats.cpython-35.pyc | Bin 0 -> 777 bytes .../django/conf/locale/es_NI/formats.py | 26 + .../django/conf/locale/es_PR/__init__.py | 0 .../es_PR/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../es_PR/__pycache__/formats.cpython-35.pyc | Bin 0 -> 764 bytes .../django/conf/locale/es_PR/formats.py | 27 + .../conf/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 23797 bytes .../conf/locale/es_VE/LC_MESSAGES/django.po | 1245 ++ .../conf/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 23987 bytes .../conf/locale/et/LC_MESSAGES/django.po | 1247 ++ .../django/conf/locale/et/__init__.py | 0 .../et/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../et/__pycache__/formats.cpython-35.pyc | Bin 0 -> 327 bytes .../django/conf/locale/et/formats.py | 21 + .../conf/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 26242 bytes .../conf/locale/eu/LC_MESSAGES/django.po | 1271 ++ .../django/conf/locale/eu/__init__.py | 0 .../eu/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../eu/__pycache__/formats.cpython-35.pyc | Bin 0 -> 518 bytes .../django/conf/locale/eu/formats.py | 21 + .../conf/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 28049 bytes .../conf/locale/fa/LC_MESSAGES/django.po | 1250 ++ .../django/conf/locale/fa/__init__.py | 0 .../fa/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../fa/__pycache__/formats.cpython-35.pyc | Bin 0 -> 485 bytes .../django/conf/locale/fa/formats.py | 21 + .../conf/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 25600 bytes .../conf/locale/fi/LC_MESSAGES/django.po | 1258 ++ .../django/conf/locale/fi/__init__.py | 0 .../fi/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../fi/__pycache__/formats.cpython-35.pyc | Bin 0 -> 822 bytes .../django/conf/locale/fi/formats.py | 39 + .../conf/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 27558 bytes .../conf/locale/fr/LC_MESSAGES/django.po | 1293 ++ .../django/conf/locale/fr/__init__.py | 0 .../fr/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../fr/__pycache__/formats.cpython-35.pyc | Bin 0 -> 763 bytes .../django/conf/locale/fr/formats.py | 33 + .../conf/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 2525 bytes .../conf/locale/fy/LC_MESSAGES/django.po | 1191 ++ .../django/conf/locale/fy/__init__.py | 0 .../fy/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../fy/__pycache__/formats.cpython-35.pyc | Bin 0 -> 146 bytes .../django/conf/locale/fy/formats.py | 21 + .../conf/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 15097 bytes .../conf/locale/ga/LC_MESSAGES/django.po | 1252 ++ .../django/conf/locale/ga/__init__.py | 0 .../ga/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ga/__pycache__/formats.cpython-35.pyc | Bin 0 -> 321 bytes .../django/conf/locale/ga/formats.py | 21 + .../conf/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 29716 bytes .../conf/locale/gd/LC_MESSAGES/django.po | 1343 ++ .../django/conf/locale/gd/__init__.py | 0 .../gd/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../gd/__pycache__/formats.cpython-35.pyc | Bin 0 -> 434 bytes .../django/conf/locale/gd/formats.py | 21 + .../conf/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 15342 bytes .../conf/locale/gl/LC_MESSAGES/django.po | 1208 ++ .../django/conf/locale/gl/__init__.py | 0 .../gl/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../gl/__pycache__/formats.cpython-35.pyc | Bin 0 -> 503 bytes .../django/conf/locale/gl/formats.py | 21 + .../conf/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 28516 bytes .../conf/locale/he/LC_MESSAGES/django.po | 1226 ++ .../django/conf/locale/he/__init__.py | 0 .../he/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../he/__pycache__/formats.cpython-35.pyc | Bin 0 -> 446 bytes .../django/conf/locale/he/formats.py | 21 + .../conf/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 19270 bytes .../conf/locale/hi/LC_MESSAGES/django.po | 1193 ++ .../django/conf/locale/hi/__init__.py | 0 .../hi/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../hi/__pycache__/formats.cpython-35.pyc | Bin 0 -> 323 bytes .../django/conf/locale/hi/formats.py | 21 + .../conf/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 24409 bytes .../conf/locale/hr/LC_MESSAGES/django.po | 1277 ++ .../django/conf/locale/hr/__init__.py | 0 .../hr/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../hr/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1045 bytes .../django/conf/locale/hr/formats.py | 47 + .../conf/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 28410 bytes .../conf/locale/hsb/LC_MESSAGES/django.po | 1306 ++ .../conf/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 27289 bytes .../conf/locale/hu/LC_MESSAGES/django.po | 1285 ++ .../django/conf/locale/hu/__init__.py | 0 .../hu/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../hu/__pycache__/formats.cpython-35.pyc | Bin 0 -> 710 bytes .../django/conf/locale/hu/formats.py | 31 + .../conf/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 23125 bytes .../conf/locale/ia/LC_MESSAGES/django.po | 1245 ++ .../conf/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 25821 bytes .../conf/locale/id/LC_MESSAGES/django.po | 1256 ++ .../django/conf/locale/id/__init__.py | 0 .../id/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../id/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1017 bytes .../django/conf/locale/id/formats.py | 49 + .../conf/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 14965 bytes .../conf/locale/io/LC_MESSAGES/django.po | 1206 ++ .../conf/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 24432 bytes .../conf/locale/is/LC_MESSAGES/django.po | 1260 ++ .../django/conf/locale/is/__init__.py | 0 .../is/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../is/__pycache__/formats.cpython-35.pyc | Bin 0 -> 385 bytes .../django/conf/locale/is/formats.py | 21 + .../conf/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 26508 bytes .../conf/locale/it/LC_MESSAGES/django.po | 1281 ++ .../django/conf/locale/it/__init__.py | 0 .../it/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../it/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1020 bytes .../django/conf/locale/it/formats.py | 45 + .../conf/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 28999 bytes .../conf/locale/ja/LC_MESSAGES/django.po | 1242 ++ .../django/conf/locale/ja/__init__.py | 0 .../ja/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ja/__pycache__/formats.cpython-35.pyc | Bin 0 -> 466 bytes .../django/conf/locale/ja/formats.py | 21 + .../conf/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 24781 bytes .../conf/locale/ka/LC_MESSAGES/django.po | 1202 ++ .../django/conf/locale/ka/__init__.py | 0 .../ka/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ka/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1005 bytes .../django/conf/locale/ka/formats.py | 47 + .../conf/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 7200 bytes .../conf/locale/kab/LC_MESSAGES/django.po | 1182 ++ .../conf/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 13954 bytes .../conf/locale/kk/LC_MESSAGES/django.po | 1181 ++ .../conf/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 7284 bytes .../conf/locale/km/LC_MESSAGES/django.po | 1167 ++ .../django/conf/locale/km/__init__.py | 0 .../km/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../km/__pycache__/formats.cpython-35.pyc | Bin 0 -> 453 bytes .../django/conf/locale/km/formats.py | 21 + .../conf/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 18655 bytes .../conf/locale/kn/LC_MESSAGES/django.po | 1192 ++ .../django/conf/locale/kn/__init__.py | 0 .../kn/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../kn/__pycache__/formats.cpython-35.pyc | Bin 0 -> 262 bytes .../django/conf/locale/kn/formats.py | 21 + .../conf/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 27371 bytes .../conf/locale/ko/LC_MESSAGES/django.po | 1244 ++ .../django/conf/locale/ko/__init__.py | 0 .../ko/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ko/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1066 bytes .../django/conf/locale/ko/formats.py | 52 + .../conf/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 8069 bytes .../conf/locale/lb/LC_MESSAGES/django.po | 1184 ++ .../conf/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 28474 bytes .../conf/locale/lt/LC_MESSAGES/django.po | 1318 ++ .../django/conf/locale/lt/__init__.py | 0 .../lt/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../lt/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1029 bytes .../django/conf/locale/lt/formats.py | 45 + .../conf/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 27341 bytes .../conf/locale/lv/LC_MESSAGES/django.po | 1288 ++ .../django/conf/locale/lv/__init__.py | 0 .../lv/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../lv/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1037 bytes .../django/conf/locale/lv/formats.py | 46 + .../conf/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 29431 bytes .../conf/locale/mk/LC_MESSAGES/django.po | 1254 ++ .../django/conf/locale/mk/__init__.py | 0 .../mk/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../mk/__pycache__/formats.cpython-35.pyc | Bin 0 -> 931 bytes .../django/conf/locale/mk/formats.py | 42 + .../conf/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 26733 bytes .../conf/locale/ml/LC_MESSAGES/django.po | 1207 ++ .../django/conf/locale/ml/__init__.py | 0 .../ml/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ml/__pycache__/formats.cpython-35.pyc | Bin 0 -> 818 bytes .../django/conf/locale/ml/formats.py | 40 + .../conf/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 29053 bytes .../conf/locale/mn/LC_MESSAGES/django.po | 1259 ++ .../django/conf/locale/mn/__init__.py | 0 .../mn/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../mn/__pycache__/formats.cpython-35.pyc | Bin 0 -> 231 bytes .../django/conf/locale/mn/formats.py | 21 + .../conf/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 1652 bytes .../conf/locale/mr/LC_MESSAGES/django.po | 1183 ++ .../conf/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 2650 bytes .../conf/locale/my/LC_MESSAGES/django.po | 1168 ++ .../conf/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 25864 bytes .../conf/locale/nb/LC_MESSAGES/django.po | 1265 ++ .../django/conf/locale/nb/__init__.py | 0 .../nb/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../nb/__pycache__/formats.cpython-35.pyc | Bin 0 -> 828 bytes .../django/conf/locale/nb/formats.py | 39 + .../conf/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 29696 bytes .../conf/locale/ne/LC_MESSAGES/django.po | 1216 ++ .../conf/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 23480 bytes .../conf/locale/nl/LC_MESSAGES/django.po | 1256 ++ .../django/conf/locale/nl/__init__.py | 0 .../nl/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../nl/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1447 bytes .../django/conf/locale/nl/formats.py | 70 + .../conf/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 14256 bytes .../conf/locale/nn/LC_MESSAGES/django.po | 1198 ++ .../django/conf/locale/nn/__init__.py | 0 .../nn/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../nn/__pycache__/formats.cpython-35.pyc | Bin 0 -> 833 bytes .../django/conf/locale/nn/formats.py | 40 + .../conf/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 19250 bytes .../conf/locale/os/LC_MESSAGES/django.po | 1210 ++ .../conf/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 11501 bytes .../conf/locale/pa/LC_MESSAGES/django.po | 1184 ++ .../conf/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 28744 bytes .../conf/locale/pl/LC_MESSAGES/django.po | 1339 ++ .../django/conf/locale/pl/__init__.py | 0 .../pl/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../pl/__pycache__/formats.cpython-35.pyc | Bin 0 -> 674 bytes .../django/conf/locale/pl/formats.py | 29 + .../conf/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 26222 bytes .../conf/locale/pt/LC_MESSAGES/django.po | 1260 ++ .../django/conf/locale/pt/__init__.py | 0 .../pt/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../pt/__pycache__/formats.cpython-35.pyc | Bin 0 -> 859 bytes .../django/conf/locale/pt/formats.py | 38 + .../conf/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 26672 bytes .../conf/locale/pt_BR/LC_MESSAGES/django.po | 1287 ++ .../django/conf/locale/pt_BR/__init__.py | 0 .../pt_BR/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../pt_BR/__pycache__/formats.cpython-35.pyc | Bin 0 -> 772 bytes .../django/conf/locale/pt_BR/formats.py | 33 + .../conf/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 27406 bytes .../conf/locale/ro/LC_MESSAGES/django.po | 1301 ++ .../django/conf/locale/ro/__init__.py | 0 .../ro/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ro/__pycache__/formats.cpython-35.pyc | Bin 0 -> 780 bytes .../django/conf/locale/ro/formats.py | 35 + .../conf/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 36731 bytes .../conf/locale/ru/LC_MESSAGES/django.po | 1343 ++ .../django/conf/locale/ru/__init__.py | 0 .../ru/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ru/__pycache__/formats.cpython-35.pyc | Bin 0 -> 758 bytes .../django/conf/locale/ru/formats.py | 32 + .../conf/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 27960 bytes .../conf/locale/sk/LC_MESSAGES/django.po | 1310 ++ .../django/conf/locale/sk/__init__.py | 0 .../sk/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../sk/__pycache__/formats.cpython-35.pyc | Bin 0 -> 676 bytes .../django/conf/locale/sk/formats.py | 29 + .../conf/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 27630 bytes .../conf/locale/sl/LC_MESSAGES/django.po | 1309 ++ .../django/conf/locale/sl/__init__.py | 0 .../sl/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../sl/__pycache__/formats.cpython-35.pyc | Bin 0 -> 1028 bytes .../django/conf/locale/sl/formats.py | 47 + .../conf/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 26846 bytes .../conf/locale/sq/LC_MESSAGES/django.po | 1272 ++ .../django/conf/locale/sq/__init__.py | 0 .../sq/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../sq/__pycache__/formats.cpython-35.pyc | Bin 0 -> 355 bytes .../django/conf/locale/sq/formats.py | 21 + .../conf/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 32959 bytes .../conf/locale/sr/LC_MESSAGES/django.po | 1283 ++ .../django/conf/locale/sr/__init__.py | 0 .../sr/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../sr/__pycache__/formats.cpython-35.pyc | Bin 0 -> 953 bytes .../django/conf/locale/sr/formats.py | 43 + .../conf/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 13331 bytes .../conf/locale/sr_Latn/LC_MESSAGES/django.po | 1212 ++ .../django/conf/locale/sr_Latn/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 152 bytes .../__pycache__/formats.cpython-35.pyc | Bin 0 -> 958 bytes .../django/conf/locale/sr_Latn/formats.py | 43 + .../conf/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 22952 bytes .../conf/locale/sv/LC_MESSAGES/django.po | 1252 ++ .../django/conf/locale/sv/__init__.py | 0 .../sv/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../sv/__pycache__/formats.cpython-35.pyc | Bin 0 -> 829 bytes .../django/conf/locale/sv/formats.py | 38 + .../conf/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 14903 bytes .../conf/locale/sw/LC_MESSAGES/django.po | 1194 ++ .../conf/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 7155 bytes .../conf/locale/ta/LC_MESSAGES/django.po | 1184 ++ .../django/conf/locale/ta/__init__.py | 0 .../ta/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../ta/__pycache__/formats.cpython-35.pyc | Bin 0 -> 264 bytes .../django/conf/locale/ta/formats.py | 21 + .../conf/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 13321 bytes .../conf/locale/te/LC_MESSAGES/django.po | 1187 ++ .../django/conf/locale/te/__init__.py | 0 .../te/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../te/__pycache__/formats.cpython-35.pyc | Bin 0 -> 262 bytes .../django/conf/locale/te/formats.py | 21 + .../conf/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 20155 bytes .../conf/locale/th/LC_MESSAGES/django.po | 1192 ++ .../django/conf/locale/th/__init__.py | 0 .../th/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../th/__pycache__/formats.cpython-35.pyc | Bin 0 -> 739 bytes .../django/conf/locale/th/formats.py | 33 + .../conf/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 27001 bytes .../conf/locale/tr/LC_MESSAGES/django.po | 1280 ++ .../django/conf/locale/tr/__init__.py | 0 .../tr/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../tr/__pycache__/formats.cpython-35.pyc | Bin 0 -> 669 bytes .../django/conf/locale/tr/formats.py | 29 + .../conf/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 15352 bytes .../conf/locale/tt/LC_MESSAGES/django.po | 1184 ++ .../conf/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 13564 bytes .../conf/locale/udm/LC_MESSAGES/django.po | 1171 ++ .../conf/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 35509 bytes .../conf/locale/uk/LC_MESSAGES/django.po | 1331 ++ .../django/conf/locale/uk/__init__.py | 0 .../uk/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../uk/__pycache__/formats.cpython-35.pyc | Bin 0 -> 822 bytes .../django/conf/locale/uk/formats.py | 37 + .../conf/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 12566 bytes .../conf/locale/ur/LC_MESSAGES/django.po | 1193 ++ .../conf/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 19452 bytes .../conf/locale/vi/LC_MESSAGES/django.po | 1194 ++ .../django/conf/locale/vi/__init__.py | 0 .../vi/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../vi/__pycache__/formats.cpython-35.pyc | Bin 0 -> 491 bytes .../django/conf/locale/vi/formats.py | 21 + .../conf/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 25270 bytes .../conf/locale/zh_Hans/LC_MESSAGES/django.po | 1234 ++ .../django/conf/locale/zh_Hans/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 152 bytes .../__pycache__/formats.cpython-35.pyc | Bin 0 -> 943 bytes .../django/conf/locale/zh_Hans/formats.py | 42 + .../conf/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 24865 bytes .../conf/locale/zh_Hant/LC_MESSAGES/django.po | 1207 ++ .../django/conf/locale/zh_Hant/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 152 bytes .../__pycache__/formats.cpython-35.pyc | Bin 0 -> 943 bytes .../django/conf/locale/zh_Hant/formats.py | 42 + .../conf/project_template/manage.py-tpl | 15 + .../project_name/__init__.py-tpl | 0 .../project_name/settings.py-tpl | 120 + .../project_template/project_name/urls.py-tpl | 21 + .../project_template/project_name/wsgi.py-tpl | 16 + .../django/conf/urls/__init__.py | 13 + .../urls/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 617 bytes .../conf/urls/__pycache__/i18n.cpython-35.pyc | Bin 0 -> 1337 bytes .../urls/__pycache__/static.cpython-35.pyc | Bin 0 -> 997 bytes .../site-packages/django/conf/urls/i18n.py | 39 + .../site-packages/django/conf/urls/static.py | 27 + .../site-packages/django/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 140 bytes .../django/contrib/admin/__init__.py | 29 + .../admin/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1337 bytes .../admin/__pycache__/actions.cpython-35.pyc | Bin 0 -> 2486 bytes .../admin/__pycache__/apps.cpython-35.pyc | Bin 0 -> 1403 bytes .../admin/__pycache__/checks.cpython-35.pyc | Bin 0 -> 36522 bytes .../__pycache__/decorators.cpython-35.pyc | Bin 0 -> 1187 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 715 bytes .../admin/__pycache__/filters.cpython-35.pyc | Bin 0 -> 15570 bytes .../admin/__pycache__/forms.cpython-35.pyc | Bin 0 -> 1381 bytes .../admin/__pycache__/helpers.cpython-35.pyc | Bin 0 -> 15088 bytes .../admin/__pycache__/models.cpython-35.pyc | Bin 0 -> 5444 bytes .../admin/__pycache__/options.cpython-35.pyc | Bin 0 -> 67947 bytes .../admin/__pycache__/sites.cpython-35.pyc | Bin 0 -> 16836 bytes .../admin/__pycache__/tests.cpython-35.pyc | Bin 0 -> 8002 bytes .../admin/__pycache__/utils.cpython-35.pyc | Bin 0 -> 16081 bytes .../admin/__pycache__/widgets.cpython-35.pyc | Bin 0 -> 20496 bytes .../django/contrib/admin/actions.py | 79 + .../django/contrib/admin/apps.py | 24 + .../django/contrib/admin/checks.py | 1054 ++ .../django/contrib/admin/decorators.py | 30 + .../django/contrib/admin/exceptions.py | 11 + .../django/contrib/admin/filters.py | 418 + .../django/contrib/admin/forms.py | 30 + .../django/contrib/admin/helpers.py | 405 + .../admin/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 9372 bytes .../admin/locale/af/LC_MESSAGES/django.po | 651 + .../admin/locale/af/LC_MESSAGES/djangojs.mo | Bin 0 -> 1158 bytes .../admin/locale/af/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/am/LC_MESSAGES/django.mo | Bin 0 -> 8309 bytes .../admin/locale/am/LC_MESSAGES/django.po | 636 + .../admin/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 17849 bytes .../admin/locale/ar/LC_MESSAGES/django.po | 687 + .../admin/locale/ar/LC_MESSAGES/djangojs.mo | Bin 0 -> 4959 bytes .../admin/locale/ar/LC_MESSAGES/djangojs.po | 227 + .../admin/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 2476 bytes .../admin/locale/ast/LC_MESSAGES/django.po | 636 + .../admin/locale/ast/LC_MESSAGES/djangojs.mo | Bin 0 -> 2137 bytes .../admin/locale/ast/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 16875 bytes .../admin/locale/az/LC_MESSAGES/django.po | 716 ++ .../admin/locale/az/LC_MESSAGES/djangojs.mo | Bin 0 -> 4621 bytes .../admin/locale/az/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 20007 bytes .../admin/locale/be/LC_MESSAGES/django.po | 685 + .../admin/locale/be/LC_MESSAGES/djangojs.mo | Bin 0 -> 5942 bytes .../admin/locale/be/LC_MESSAGES/djangojs.po | 224 + .../admin/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 20070 bytes .../admin/locale/bg/LC_MESSAGES/django.po | 689 + .../admin/locale/bg/LC_MESSAGES/djangojs.mo | Bin 0 -> 5565 bytes .../admin/locale/bg/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 15247 bytes .../admin/locale/bn/LC_MESSAGES/django.po | 652 + .../admin/locale/bn/LC_MESSAGES/djangojs.mo | Bin 0 -> 2313 bytes .../admin/locale/bn/LC_MESSAGES/djangojs.po | 207 + .../admin/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 4253 bytes .../admin/locale/br/LC_MESSAGES/django.po | 631 + .../admin/locale/br/LC_MESSAGES/djangojs.mo | Bin 0 -> 1366 bytes .../admin/locale/br/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 8845 bytes .../admin/locale/bs/LC_MESSAGES/django.po | 657 + .../admin/locale/bs/LC_MESSAGES/djangojs.mo | Bin 0 -> 1183 bytes .../admin/locale/bs/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 16475 bytes .../admin/locale/ca/LC_MESSAGES/django.po | 723 ++ .../admin/locale/ca/LC_MESSAGES/djangojs.mo | Bin 0 -> 4560 bytes .../admin/locale/ca/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 17272 bytes .../admin/locale/cs/LC_MESSAGES/django.po | 727 ++ .../admin/locale/cs/LC_MESSAGES/djangojs.mo | Bin 0 -> 5053 bytes .../admin/locale/cs/LC_MESSAGES/djangojs.po | 226 + .../admin/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 12521 bytes .../admin/locale/cy/LC_MESSAGES/django.po | 675 + .../admin/locale/cy/LC_MESSAGES/djangojs.mo | Bin 0 -> 3801 bytes .../admin/locale/cy/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 16428 bytes .../admin/locale/da/LC_MESSAGES/django.po | 716 ++ .../admin/locale/da/LC_MESSAGES/djangojs.mo | Bin 0 -> 4518 bytes .../admin/locale/da/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 16793 bytes .../admin/locale/de/LC_MESSAGES/django.po | 696 ++ .../admin/locale/de/LC_MESSAGES/djangojs.mo | Bin 0 -> 4602 bytes .../admin/locale/de/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 17347 bytes .../admin/locale/dsb/LC_MESSAGES/django.po | 719 ++ .../admin/locale/dsb/LC_MESSAGES/djangojs.mo | Bin 0 -> 5016 bytes .../admin/locale/dsb/LC_MESSAGES/djangojs.po | 225 + .../admin/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 23165 bytes .../admin/locale/el/LC_MESSAGES/django.po | 742 ++ .../admin/locale/el/LC_MESSAGES/djangojs.mo | Bin 0 -> 5888 bytes .../admin/locale/el/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../admin/locale/en/LC_MESSAGES/django.po | 900 ++ .../admin/locale/en/LC_MESSAGES/djangojs.mo | Bin 0 -> 356 bytes .../admin/locale/en/LC_MESSAGES/djangojs.po | 263 + .../admin/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 2894 bytes .../admin/locale/en_AU/LC_MESSAGES/django.po | 636 + .../locale/en_AU/LC_MESSAGES/djangojs.mo | Bin 0 -> 1714 bytes .../locale/en_AU/LC_MESSAGES/djangojs.po | 209 + .../admin/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 10744 bytes .../admin/locale/en_GB/LC_MESSAGES/django.po | 662 + .../locale/en_GB/LC_MESSAGES/djangojs.mo | Bin 0 -> 3147 bytes .../locale/en_GB/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 16318 bytes .../admin/locale/eo/LC_MESSAGES/django.po | 721 ++ .../admin/locale/eo/LC_MESSAGES/djangojs.mo | Bin 0 -> 4452 bytes .../admin/locale/eo/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 16810 bytes .../admin/locale/es/LC_MESSAGES/django.po | 710 ++ .../admin/locale/es/LC_MESSAGES/djangojs.mo | Bin 0 -> 4627 bytes .../admin/locale/es/LC_MESSAGES/djangojs.po | 224 + .../admin/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 17445 bytes .../admin/locale/es_AR/LC_MESSAGES/django.po | 725 ++ .../locale/es_AR/LC_MESSAGES/djangojs.mo | Bin 0 -> 4892 bytes .../locale/es_AR/LC_MESSAGES/djangojs.po | 228 + .../admin/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 15156 bytes .../admin/locale/es_CO/LC_MESSAGES/django.po | 697 ++ .../locale/es_CO/LC_MESSAGES/djangojs.mo | Bin 0 -> 3895 bytes .../locale/es_CO/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 14127 bytes .../admin/locale/es_MX/LC_MESSAGES/django.po | 683 + .../locale/es_MX/LC_MESSAGES/djangojs.mo | Bin 0 -> 3380 bytes .../locale/es_MX/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 16837 bytes .../admin/locale/es_VE/LC_MESSAGES/django.po | 698 ++ .../locale/es_VE/LC_MESSAGES/djangojs.mo | Bin 0 -> 4635 bytes .../locale/es_VE/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 15696 bytes .../admin/locale/et/LC_MESSAGES/django.po | 683 + .../admin/locale/et/LC_MESSAGES/djangojs.mo | Bin 0 -> 4394 bytes .../admin/locale/et/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 16399 bytes .../admin/locale/eu/LC_MESSAGES/django.po | 717 ++ .../admin/locale/eu/LC_MESSAGES/djangojs.mo | Bin 0 -> 4522 bytes .../admin/locale/eu/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 19583 bytes .../admin/locale/fa/LC_MESSAGES/django.po | 722 ++ .../admin/locale/fa/LC_MESSAGES/djangojs.mo | Bin 0 -> 5267 bytes .../admin/locale/fa/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 15923 bytes .../admin/locale/fi/LC_MESSAGES/django.po | 681 + .../admin/locale/fi/LC_MESSAGES/djangojs.mo | Bin 0 -> 4561 bytes .../admin/locale/fi/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 18028 bytes .../admin/locale/fr/LC_MESSAGES/django.po | 732 ++ .../admin/locale/fr/LC_MESSAGES/djangojs.mo | Bin 0 -> 4735 bytes .../admin/locale/fr/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../admin/locale/fy/LC_MESSAGES/django.po | 609 + .../admin/locale/fy/LC_MESSAGES/djangojs.mo | Bin 0 -> 476 bytes .../admin/locale/fy/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 13697 bytes .../admin/locale/ga/LC_MESSAGES/django.po | 684 + .../admin/locale/ga/LC_MESSAGES/djangojs.mo | Bin 0 -> 4379 bytes .../admin/locale/ga/LC_MESSAGES/djangojs.po | 233 + .../admin/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 18685 bytes .../admin/locale/gd/LC_MESSAGES/django.po | 743 ++ .../admin/locale/gd/LC_MESSAGES/djangojs.mo | Bin 0 -> 5304 bytes .../admin/locale/gd/LC_MESSAGES/djangojs.po | 237 + .../admin/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 13246 bytes .../admin/locale/gl/LC_MESSAGES/django.po | 679 + .../admin/locale/gl/LC_MESSAGES/djangojs.mo | Bin 0 -> 3279 bytes .../admin/locale/gl/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 17370 bytes .../admin/locale/he/LC_MESSAGES/django.po | 670 + .../admin/locale/he/LC_MESSAGES/djangojs.mo | Bin 0 -> 4775 bytes .../admin/locale/he/LC_MESSAGES/djangojs.po | 216 + .../admin/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 18457 bytes .../admin/locale/hi/LC_MESSAGES/django.po | 666 + .../admin/locale/hi/LC_MESSAGES/djangojs.mo | Bin 0 -> 4893 bytes .../admin/locale/hi/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 14774 bytes .../admin/locale/hr/LC_MESSAGES/django.po | 688 + .../admin/locale/hr/LC_MESSAGES/djangojs.mo | Bin 0 -> 3360 bytes .../admin/locale/hr/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 17091 bytes .../admin/locale/hsb/LC_MESSAGES/django.po | 714 ++ .../admin/locale/hsb/LC_MESSAGES/djangojs.mo | Bin 0 -> 5087 bytes .../admin/locale/hsb/LC_MESSAGES/djangojs.po | 226 + .../admin/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 17022 bytes .../admin/locale/hu/LC_MESSAGES/django.po | 719 ++ .../admin/locale/hu/LC_MESSAGES/djangojs.mo | Bin 0 -> 4524 bytes .../admin/locale/hu/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 11278 bytes .../admin/locale/ia/LC_MESSAGES/django.po | 664 + .../admin/locale/ia/LC_MESSAGES/djangojs.mo | Bin 0 -> 3177 bytes .../admin/locale/ia/LC_MESSAGES/djangojs.po | 216 + .../admin/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 16194 bytes .../admin/locale/id/LC_MESSAGES/django.po | 719 ++ .../admin/locale/id/LC_MESSAGES/djangojs.mo | Bin 0 -> 4407 bytes .../admin/locale/id/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 12624 bytes .../admin/locale/io/LC_MESSAGES/django.po | 668 + .../admin/locale/io/LC_MESSAGES/djangojs.mo | Bin 0 -> 464 bytes .../admin/locale/io/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 16612 bytes .../admin/locale/is/LC_MESSAGES/django.po | 714 ++ .../admin/locale/is/LC_MESSAGES/djangojs.mo | Bin 0 -> 4559 bytes .../admin/locale/is/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 16958 bytes .../admin/locale/it/LC_MESSAGES/django.po | 731 ++ .../admin/locale/it/LC_MESSAGES/djangojs.mo | Bin 0 -> 4537 bytes .../admin/locale/it/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 18084 bytes .../admin/locale/ja/LC_MESSAGES/django.po | 707 ++ .../admin/locale/ja/LC_MESSAGES/djangojs.mo | Bin 0 -> 4688 bytes .../admin/locale/ja/LC_MESSAGES/djangojs.po | 213 + .../admin/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 20248 bytes .../admin/locale/ka/LC_MESSAGES/django.po | 670 + .../admin/locale/ka/LC_MESSAGES/djangojs.mo | Bin 0 -> 5199 bytes .../admin/locale/ka/LC_MESSAGES/djangojs.po | 215 + .../admin/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 3531 bytes .../admin/locale/kab/LC_MESSAGES/django.po | 631 + .../admin/locale/kab/LC_MESSAGES/djangojs.mo | Bin 0 -> 1844 bytes .../admin/locale/kab/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 12966 bytes .../admin/locale/kk/LC_MESSAGES/django.po | 662 + .../admin/locale/kk/LC_MESSAGES/djangojs.mo | Bin 0 -> 2380 bytes .../admin/locale/kk/LC_MESSAGES/djangojs.po | 207 + .../admin/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 10403 bytes .../admin/locale/km/LC_MESSAGES/django.po | 636 + .../admin/locale/km/LC_MESSAGES/djangojs.mo | Bin 0 -> 1334 bytes .../admin/locale/km/LC_MESSAGES/djangojs.po | 201 + .../admin/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 9203 bytes .../admin/locale/kn/LC_MESSAGES/django.po | 639 + .../admin/locale/kn/LC_MESSAGES/djangojs.mo | Bin 0 -> 1872 bytes .../admin/locale/kn/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 17320 bytes .../admin/locale/ko/LC_MESSAGES/django.po | 719 ++ .../admin/locale/ko/LC_MESSAGES/djangojs.mo | Bin 0 -> 4493 bytes .../admin/locale/ko/LC_MESSAGES/djangojs.po | 216 + .../admin/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 913 bytes .../admin/locale/lb/LC_MESSAGES/django.po | 632 + .../admin/locale/lb/LC_MESSAGES/djangojs.mo | Bin 0 -> 474 bytes .../admin/locale/lb/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 17095 bytes .../admin/locale/lt/LC_MESSAGES/django.po | 724 ++ .../admin/locale/lt/LC_MESSAGES/djangojs.mo | Bin 0 -> 5183 bytes .../admin/locale/lt/LC_MESSAGES/djangojs.po | 236 + .../admin/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 16733 bytes .../admin/locale/lv/LC_MESSAGES/django.po | 719 ++ .../admin/locale/lv/LC_MESSAGES/djangojs.mo | Bin 0 -> 4903 bytes .../admin/locale/lv/LC_MESSAGES/djangojs.po | 224 + .../admin/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 20661 bytes .../admin/locale/mk/LC_MESSAGES/django.po | 692 ++ .../admin/locale/mk/LC_MESSAGES/djangojs.mo | Bin 0 -> 5633 bytes .../admin/locale/mk/LC_MESSAGES/djangojs.po | 219 + .../admin/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 21581 bytes .../admin/locale/ml/LC_MESSAGES/django.po | 671 + .../admin/locale/ml/LC_MESSAGES/djangojs.mo | Bin 0 -> 6362 bytes .../admin/locale/ml/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 20634 bytes .../admin/locale/mn/LC_MESSAGES/django.po | 716 ++ .../admin/locale/mn/LC_MESSAGES/djangojs.mo | Bin 0 -> 5193 bytes .../admin/locale/mn/LC_MESSAGES/djangojs.po | 218 + .../admin/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../admin/locale/mr/LC_MESSAGES/django.po | 609 + .../admin/locale/mr/LC_MESSAGES/djangojs.mo | Bin 0 -> 468 bytes .../admin/locale/mr/LC_MESSAGES/djangojs.po | 145 + .../admin/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 3677 bytes .../admin/locale/my/LC_MESSAGES/django.po | 629 + .../admin/locale/my/LC_MESSAGES/djangojs.mo | Bin 0 -> 3268 bytes .../admin/locale/my/LC_MESSAGES/djangojs.po | 206 + .../admin/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 16081 bytes .../admin/locale/nb/LC_MESSAGES/django.po | 715 ++ .../admin/locale/nb/LC_MESSAGES/djangojs.mo | Bin 0 -> 4375 bytes .../admin/locale/nb/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 15710 bytes .../admin/locale/ne/LC_MESSAGES/django.po | 645 + .../admin/locale/ne/LC_MESSAGES/djangojs.mo | Bin 0 -> 5362 bytes .../admin/locale/ne/LC_MESSAGES/djangojs.po | 213 + .../admin/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 16306 bytes .../admin/locale/nl/LC_MESSAGES/django.po | 698 ++ .../admin/locale/nl/LC_MESSAGES/djangojs.mo | Bin 0 -> 4691 bytes .../admin/locale/nl/LC_MESSAGES/djangojs.po | 225 + .../admin/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 10943 bytes .../admin/locale/nn/LC_MESSAGES/django.po | 664 + .../admin/locale/nn/LC_MESSAGES/djangojs.mo | Bin 0 -> 3120 bytes .../admin/locale/nn/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 14978 bytes .../admin/locale/os/LC_MESSAGES/django.po | 665 + .../admin/locale/os/LC_MESSAGES/djangojs.mo | Bin 0 -> 3806 bytes .../admin/locale/os/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 10185 bytes .../admin/locale/pa/LC_MESSAGES/django.po | 668 + .../admin/locale/pa/LC_MESSAGES/djangojs.mo | Bin 0 -> 1207 bytes .../admin/locale/pa/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 17253 bytes .../admin/locale/pl/LC_MESSAGES/django.po | 737 ++ .../admin/locale/pl/LC_MESSAGES/djangojs.mo | Bin 0 -> 5124 bytes .../admin/locale/pl/LC_MESSAGES/djangojs.po | 244 + .../admin/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 16612 bytes .../admin/locale/pt/LC_MESSAGES/django.po | 698 ++ .../admin/locale/pt/LC_MESSAGES/djangojs.mo | Bin 0 -> 4579 bytes .../admin/locale/pt/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 16911 bytes .../admin/locale/pt_BR/LC_MESSAGES/django.po | 736 ++ .../locale/pt_BR/LC_MESSAGES/djangojs.mo | Bin 0 -> 4619 bytes .../locale/pt_BR/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 17007 bytes .../admin/locale/ro/LC_MESSAGES/django.po | 728 ++ .../admin/locale/ro/LC_MESSAGES/djangojs.mo | Bin 0 -> 4686 bytes .../admin/locale/ro/LC_MESSAGES/djangojs.po | 228 + .../admin/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 21855 bytes .../admin/locale/ru/LC_MESSAGES/django.po | 732 ++ .../admin/locale/ru/LC_MESSAGES/djangojs.mo | Bin 0 -> 6560 bytes .../admin/locale/ru/LC_MESSAGES/djangojs.po | 236 + .../admin/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 16405 bytes .../admin/locale/sk/LC_MESSAGES/django.po | 693 ++ .../admin/locale/sk/LC_MESSAGES/djangojs.mo | Bin 0 -> 4551 bytes .../admin/locale/sk/LC_MESSAGES/djangojs.po | 222 + .../admin/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 16136 bytes .../admin/locale/sl/LC_MESSAGES/django.po | 690 + .../admin/locale/sl/LC_MESSAGES/djangojs.mo | Bin 0 -> 4724 bytes .../admin/locale/sl/LC_MESSAGES/djangojs.po | 225 + .../admin/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 16968 bytes .../admin/locale/sq/LC_MESSAGES/django.po | 719 ++ .../admin/locale/sq/LC_MESSAGES/djangojs.mo | Bin 0 -> 4590 bytes .../admin/locale/sq/LC_MESSAGES/djangojs.po | 220 + .../admin/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 21023 bytes .../admin/locale/sr/LC_MESSAGES/django.po | 718 ++ .../admin/locale/sr/LC_MESSAGES/djangojs.mo | Bin 0 -> 5221 bytes .../admin/locale/sr/LC_MESSAGES/djangojs.po | 216 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 11339 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 665 + .../locale/sr_Latn/LC_MESSAGES/djangojs.mo | Bin 0 -> 2978 bytes .../locale/sr_Latn/LC_MESSAGES/djangojs.po | 215 + .../admin/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 15933 bytes .../admin/locale/sv/LC_MESSAGES/django.po | 691 ++ .../admin/locale/sv/LC_MESSAGES/djangojs.mo | Bin 0 -> 4541 bytes .../admin/locale/sv/LC_MESSAGES/djangojs.po | 223 + .../admin/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 14353 bytes .../admin/locale/sw/LC_MESSAGES/django.po | 676 + .../admin/locale/sw/LC_MESSAGES/djangojs.mo | Bin 0 -> 3647 bytes .../admin/locale/sw/LC_MESSAGES/djangojs.po | 217 + .../admin/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 10179 bytes .../admin/locale/ta/LC_MESSAGES/django.po | 643 + .../admin/locale/ta/LC_MESSAGES/djangojs.mo | Bin 0 -> 1379 bytes .../admin/locale/ta/LC_MESSAGES/djangojs.po | 204 + .../admin/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 10590 bytes .../admin/locale/te/LC_MESSAGES/django.po | 640 + .../admin/locale/te/LC_MESSAGES/djangojs.mo | Bin 0 -> 1362 bytes .../admin/locale/te/LC_MESSAGES/djangojs.po | 205 + .../admin/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 18986 bytes .../admin/locale/th/LC_MESSAGES/django.po | 684 + .../admin/locale/th/LC_MESSAGES/djangojs.mo | Bin 0 -> 6250 bytes .../admin/locale/th/LC_MESSAGES/djangojs.po | 213 + .../admin/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 17033 bytes .../admin/locale/tr/LC_MESSAGES/django.po | 725 ++ .../admin/locale/tr/LC_MESSAGES/djangojs.mo | Bin 0 -> 4547 bytes .../admin/locale/tr/LC_MESSAGES/djangojs.po | 221 + .../admin/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 12952 bytes .../admin/locale/tt/LC_MESSAGES/django.po | 655 + .../admin/locale/tt/LC_MESSAGES/djangojs.mo | Bin 0 -> 2607 bytes .../admin/locale/tt/LC_MESSAGES/djangojs.po | 208 + .../admin/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 622 bytes .../admin/locale/udm/LC_MESSAGES/django.po | 606 + .../admin/locale/udm/LC_MESSAGES/djangojs.mo | Bin 0 -> 462 bytes .../admin/locale/udm/LC_MESSAGES/djangojs.po | 142 + .../admin/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 21079 bytes .../admin/locale/uk/LC_MESSAGES/django.po | 733 ++ .../admin/locale/uk/LC_MESSAGES/djangojs.mo | Bin 0 -> 5574 bytes .../admin/locale/uk/LC_MESSAGES/djangojs.po | 225 + .../admin/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 13106 bytes .../admin/locale/ur/LC_MESSAGES/django.po | 661 + .../admin/locale/ur/LC_MESSAGES/djangojs.mo | Bin 0 -> 2678 bytes .../admin/locale/ur/LC_MESSAGES/djangojs.po | 211 + .../admin/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 14951 bytes .../admin/locale/vi/LC_MESSAGES/django.po | 676 + .../admin/locale/vi/LC_MESSAGES/djangojs.mo | Bin 0 -> 3733 bytes .../admin/locale/vi/LC_MESSAGES/djangojs.po | 220 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 15606 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 701 ++ .../locale/zh_Hans/LC_MESSAGES/djangojs.mo | Bin 0 -> 4245 bytes .../locale/zh_Hans/LC_MESSAGES/djangojs.po | 220 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 15152 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 660 + .../locale/zh_Hant/LC_MESSAGES/djangojs.mo | Bin 0 -> 4230 bytes .../locale/zh_Hant/LC_MESSAGES/djangojs.po | 213 + .../contrib/admin/migrations/0001_initial.py | 47 + .../0002_logentry_remove_auto_add.py | 22 + .../0003_logentry_add_action_flag_choices.py | 20 + .../contrib/admin/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1697 bytes ...02_logentry_remove_auto_add.cpython-35.pyc | Bin 0 -> 745 bytes ...try_add_action_flag_choices.cpython-35.pyc | Bin 0 -> 789 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 157 bytes .../django/contrib/admin/models.py | 150 + .../django/contrib/admin/options.py | 2178 ++++ .../django/contrib/admin/sites.py | 534 + .../admin/static/admin/css/autocomplete.css | 260 + .../contrib/admin/static/admin/css/base.css | 983 ++ .../admin/static/admin/css/changelists.css | 344 + .../admin/static/admin/css/dashboard.css | 27 + .../contrib/admin/static/admin/css/fonts.css | 20 + .../contrib/admin/static/admin/css/forms.css | 532 + .../contrib/admin/static/admin/css/login.css | 78 + .../admin/static/admin/css/responsive.css | 994 ++ .../admin/static/admin/css/responsive_rtl.css | 80 + .../contrib/admin/static/admin/css/rtl.css | 264 + .../css/vendor/select2/LICENSE-SELECT2.md | 21 + .../admin/css/vendor/select2/select2.css | 484 + .../admin/css/vendor/select2/select2.min.css | 1 + .../admin/static/admin/css/widgets.css | 565 + .../admin/static/admin/fonts/LICENSE.txt | 202 + .../admin/static/admin/fonts/README.txt | 2 + .../admin/fonts/Roboto-Bold-webfont.woff | Bin 0 -> 82564 bytes .../admin/fonts/Roboto-Light-webfont.woff | Bin 0 -> 81348 bytes .../admin/fonts/Roboto-Regular-webfont.woff | Bin 0 -> 80304 bytes .../contrib/admin/static/admin/img/LICENSE | 20 + .../contrib/admin/static/admin/img/README.txt | 7 + .../admin/static/admin/img/calendar-icons.svg | 14 + .../static/admin/img/gis/move_vertex_off.svg | 1 + .../static/admin/img/gis/move_vertex_on.svg | 1 + .../admin/static/admin/img/icon-addlink.svg | 3 + .../admin/static/admin/img/icon-alert.svg | 3 + .../admin/static/admin/img/icon-calendar.svg | 9 + .../static/admin/img/icon-changelink.svg | 3 + .../admin/static/admin/img/icon-clock.svg | 9 + .../static/admin/img/icon-deletelink.svg | 3 + .../admin/static/admin/img/icon-no.svg | 3 + .../static/admin/img/icon-unknown-alt.svg | 3 + .../admin/static/admin/img/icon-unknown.svg | 3 + .../admin/static/admin/img/icon-viewlink.svg | 3 + .../admin/static/admin/img/icon-yes.svg | 3 + .../admin/static/admin/img/inline-delete.svg | 3 + .../contrib/admin/static/admin/img/search.svg | 3 + .../admin/static/admin/img/selector-icons.svg | 34 + .../admin/static/admin/img/sorting-icons.svg | 19 + .../admin/static/admin/img/tooltag-add.svg | 3 + .../static/admin/img/tooltag-arrowright.svg | 3 + .../admin/static/admin/js/SelectBox.js | 144 + .../admin/static/admin/js/SelectFilter2.js | 252 + .../contrib/admin/static/admin/js/actions.js | 153 + .../admin/static/admin/js/actions.min.js | 7 + .../admin/js/admin/DateTimeShortcuts.js | 426 + .../admin/js/admin/RelatedObjectLookups.js | 181 + .../admin/static/admin/js/autocomplete.js | 37 + .../contrib/admin/static/admin/js/calendar.js | 208 + .../contrib/admin/static/admin/js/cancel.js | 13 + .../admin/static/admin/js/change_form.js | 20 + .../contrib/admin/static/admin/js/collapse.js | 26 + .../admin/static/admin/js/collapse.min.js | 5 + .../contrib/admin/static/admin/js/core.js | 212 + .../contrib/admin/static/admin/js/inlines.js | 298 + .../admin/static/admin/js/inlines.min.js | 13 + .../admin/static/admin/js/jquery.init.js | 8 + .../admin/static/admin/js/popup_response.js | 16 + .../admin/static/admin/js/prepopulate.js | 42 + .../admin/static/admin/js/prepopulate.min.js | 1 + .../admin/static/admin/js/prepopulate_init.js | 10 + .../admin/static/admin/js/timeparse.js | 106 + .../contrib/admin/static/admin/js/urlify.js | 195 + .../static/admin/js/vendor/jquery/LICENSE.txt | 26 + .../static/admin/js/vendor/jquery/jquery.js | 10364 ++++++++++++++++ .../admin/js/vendor/jquery/jquery.min.js | 2 + .../static/admin/js/vendor/select2/LICENSE.md | 21 + .../static/admin/js/vendor/select2/i18n/ar.js | 3 + .../static/admin/js/vendor/select2/i18n/az.js | 3 + .../static/admin/js/vendor/select2/i18n/bg.js | 3 + .../static/admin/js/vendor/select2/i18n/ca.js | 3 + .../static/admin/js/vendor/select2/i18n/cs.js | 3 + .../static/admin/js/vendor/select2/i18n/da.js | 3 + .../static/admin/js/vendor/select2/i18n/de.js | 3 + .../static/admin/js/vendor/select2/i18n/el.js | 3 + .../static/admin/js/vendor/select2/i18n/en.js | 3 + .../static/admin/js/vendor/select2/i18n/es.js | 3 + .../static/admin/js/vendor/select2/i18n/et.js | 3 + .../static/admin/js/vendor/select2/i18n/eu.js | 3 + .../static/admin/js/vendor/select2/i18n/fa.js | 3 + .../static/admin/js/vendor/select2/i18n/fi.js | 3 + .../static/admin/js/vendor/select2/i18n/fr.js | 3 + .../static/admin/js/vendor/select2/i18n/gl.js | 3 + .../static/admin/js/vendor/select2/i18n/he.js | 3 + .../static/admin/js/vendor/select2/i18n/hi.js | 3 + .../static/admin/js/vendor/select2/i18n/hr.js | 3 + .../static/admin/js/vendor/select2/i18n/hu.js | 3 + .../static/admin/js/vendor/select2/i18n/id.js | 3 + .../static/admin/js/vendor/select2/i18n/is.js | 3 + .../static/admin/js/vendor/select2/i18n/it.js | 3 + .../static/admin/js/vendor/select2/i18n/ja.js | 3 + .../static/admin/js/vendor/select2/i18n/km.js | 3 + .../static/admin/js/vendor/select2/i18n/ko.js | 3 + .../static/admin/js/vendor/select2/i18n/lt.js | 3 + .../static/admin/js/vendor/select2/i18n/lv.js | 3 + .../static/admin/js/vendor/select2/i18n/mk.js | 3 + .../static/admin/js/vendor/select2/i18n/ms.js | 3 + .../static/admin/js/vendor/select2/i18n/nb.js | 3 + .../static/admin/js/vendor/select2/i18n/nl.js | 3 + .../static/admin/js/vendor/select2/i18n/pl.js | 3 + .../admin/js/vendor/select2/i18n/pt-BR.js | 3 + .../static/admin/js/vendor/select2/i18n/pt.js | 3 + .../static/admin/js/vendor/select2/i18n/ro.js | 3 + .../static/admin/js/vendor/select2/i18n/ru.js | 3 + .../static/admin/js/vendor/select2/i18n/sk.js | 3 + .../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 + .../static/admin/js/vendor/select2/i18n/sr.js | 3 + .../static/admin/js/vendor/select2/i18n/sv.js | 3 + .../static/admin/js/vendor/select2/i18n/th.js | 3 + .../static/admin/js/vendor/select2/i18n/tr.js | 3 + .../static/admin/js/vendor/select2/i18n/uk.js | 3 + .../static/admin/js/vendor/select2/i18n/vi.js | 3 + .../admin/js/vendor/select2/i18n/zh-CN.js | 3 + .../admin/js/vendor/select2/i18n/zh-TW.js | 3 + .../admin/js/vendor/select2/select2.full.js | 6436 ++++++++++ .../js/vendor/select2/select2.full.min.js | 3 + .../admin/js/vendor/xregexp/LICENSE.txt | 21 + .../static/admin/js/vendor/xregexp/xregexp.js | 2308 ++++ .../admin/js/vendor/xregexp/xregexp.min.js | 18 + .../contrib/admin/templates/admin/404.html | 12 + .../contrib/admin/templates/admin/500.html | 17 + .../admin/templates/admin/actions.html | 23 + .../admin/templates/admin/app_index.html | 18 + .../templates/admin/auth/user/add_form.html | 10 + .../admin/auth/user/change_password.html | 60 + .../contrib/admin/templates/admin/base.html | 93 + .../admin/templates/admin/base_site.html | 9 + .../admin/templates/admin/change_form.html | 81 + .../admin/change_form_object_tools.html | 8 + .../admin/templates/admin/change_list.html | 82 + .../admin/change_list_object_tools.html | 12 + .../templates/admin/change_list_results.html | 38 + .../admin/templates/admin/date_hierarchy.html | 16 + .../templates/admin/delete_confirmation.html | 52 + .../admin/delete_selected_confirmation.html | 55 + .../templates/admin/edit_inline/stacked.html | 25 + .../templates/admin/edit_inline/tabular.html | 75 + .../contrib/admin/templates/admin/filter.html | 8 + .../templates/admin/includes/fieldset.html | 29 + .../admin/includes/object_delete_summary.html | 7 + .../contrib/admin/templates/admin/index.html | 86 + .../admin/templates/admin/invalid_setup.html | 13 + .../contrib/admin/templates/admin/login.html | 66 + .../admin/templates/admin/object_history.html | 42 + .../admin/templates/admin/pagination.html | 12 + .../admin/templates/admin/popup_response.html | 11 + .../admin/prepopulated_fields_js.html | 6 + .../admin/related_widget_wrapper.html | 35 + .../admin/templates/admin/search_form.html | 16 + .../admin/templates/admin/submit_line.html | 14 + .../admin/widgets/clearable_file_input.html | 6 + .../admin/widgets/foreign_key_raw_id.html | 1 + .../admin/widgets/many_to_many_raw_id.html | 1 + .../admin/templates/admin/widgets/radio.html | 1 + .../admin/widgets/related_widget_wrapper.html | 29 + .../admin/widgets/split_datetime.html | 4 + .../admin/templates/admin/widgets/url.html | 1 + .../templates/registration/logged_out.html | 12 + .../registration/password_change_done.html | 15 + .../registration/password_change_form.html | 60 + .../registration/password_reset_complete.html | 20 + .../registration/password_reset_confirm.html | 42 + .../registration/password_reset_done.html | 19 + .../registration/password_reset_email.html | 14 + .../registration/password_reset_form.html | 29 + .../contrib/admin/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 159 bytes .../__pycache__/admin_list.cpython-35.pyc | Bin 0 -> 13225 bytes .../__pycache__/admin_modify.cpython-35.pyc | Bin 0 -> 3749 bytes .../__pycache__/admin_static.cpython-35.pyc | Bin 0 -> 639 bytes .../__pycache__/admin_urls.cpython-35.pyc | Bin 0 -> 1888 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 1520 bytes .../__pycache__/log.cpython-35.pyc | Bin 0 -> 2453 bytes .../contrib/admin/templatetags/admin_list.py | 485 + .../admin/templatetags/admin_modify.py | 111 + .../admin/templatetags/admin_static.py | 16 + .../contrib/admin/templatetags/admin_urls.py | 56 + .../django/contrib/admin/templatetags/base.py | 33 + .../django/contrib/admin/templatetags/log.py | 59 + .../django/contrib/admin/tests.py | 184 + .../django/contrib/admin/utils.py | 539 + .../django/contrib/admin/views/__init__.py | 0 .../views/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 152 bytes .../__pycache__/autocomplete.cpython-35.pyc | Bin 0 -> 2429 bytes .../__pycache__/decorators.cpython-35.pyc | Bin 0 -> 852 bytes .../views/__pycache__/main.cpython-35.pyc | Bin 0 -> 11183 bytes .../contrib/admin/views/autocomplete.py | 52 + .../django/contrib/admin/views/decorators.py | 18 + .../django/contrib/admin/views/main.py | 431 + .../django/contrib/admin/widgets.py | 467 + .../django/contrib/admindocs/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 220 bytes .../admindocs/__pycache__/apps.cpython-35.pyc | Bin 0 -> 534 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 1573 bytes .../admindocs/__pycache__/urls.cpython-35.pyc | Bin 0 -> 1236 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 6672 bytes .../__pycache__/views.cpython-35.pyc | Bin 0 -> 13544 bytes .../django/contrib/admindocs/apps.py | 7 + .../admindocs/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 705 bytes .../admindocs/locale/af/LC_MESSAGES/django.po | 264 + .../admindocs/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 7286 bytes .../admindocs/locale/ar/LC_MESSAGES/django.po | 276 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 715 bytes .../locale/ast/LC_MESSAGES/django.po | 258 + .../admindocs/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1687 bytes .../admindocs/locale/az/LC_MESSAGES/django.po | 258 + .../admindocs/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 8185 bytes .../admindocs/locale/be/LC_MESSAGES/django.po | 284 + .../admindocs/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 7837 bytes .../admindocs/locale/bg/LC_MESSAGES/django.po | 286 + .../admindocs/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 3794 bytes .../admindocs/locale/bn/LC_MESSAGES/django.po | 261 + .../admindocs/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../admindocs/locale/br/LC_MESSAGES/django.po | 257 + .../admindocs/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1730 bytes .../admindocs/locale/bs/LC_MESSAGES/django.po | 261 + .../admindocs/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 6681 bytes .../admindocs/locale/ca/LC_MESSAGES/django.po | 287 + .../admindocs/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 6588 bytes .../admindocs/locale/cs/LC_MESSAGES/django.po | 283 + .../admindocs/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 5401 bytes .../admindocs/locale/cy/LC_MESSAGES/django.po | 279 + .../admindocs/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 6458 bytes .../admindocs/locale/da/LC_MESSAGES/django.po | 284 + .../admindocs/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 6585 bytes .../admindocs/locale/de/LC_MESSAGES/django.po | 286 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 6836 bytes .../locale/dsb/LC_MESSAGES/django.po | 285 + .../admindocs/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 8598 bytes .../admindocs/locale/el/LC_MESSAGES/django.po | 289 + .../admindocs/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../admindocs/locale/en/LC_MESSAGES/django.po | 359 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 275 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1821 bytes .../locale/en_GB/LC_MESSAGES/django.po | 260 + .../admindocs/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 6391 bytes .../admindocs/locale/eo/LC_MESSAGES/django.po | 280 + .../admindocs/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 6673 bytes .../admindocs/locale/es/LC_MESSAGES/django.po | 292 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 6691 bytes .../locale/es_AR/LC_MESSAGES/django.po | 286 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 6476 bytes .../locale/es_CO/LC_MESSAGES/django.po | 281 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1853 bytes .../locale/es_MX/LC_MESSAGES/django.po | 260 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 6663 bytes .../locale/es_VE/LC_MESSAGES/django.po | 286 + .../admindocs/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 6402 bytes .../admindocs/locale/et/LC_MESSAGES/django.po | 284 + .../admindocs/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 6479 bytes .../admindocs/locale/eu/LC_MESSAGES/django.po | 283 + .../admindocs/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 7527 bytes .../admindocs/locale/fa/LC_MESSAGES/django.po | 284 + .../admindocs/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 6413 bytes .../admindocs/locale/fi/LC_MESSAGES/django.po | 278 + .../admindocs/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 6790 bytes .../admindocs/locale/fr/LC_MESSAGES/django.po | 285 + .../admindocs/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../admindocs/locale/fy/LC_MESSAGES/django.po | 275 + .../admindocs/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1938 bytes .../admindocs/locale/ga/LC_MESSAGES/django.po | 261 + .../admindocs/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 6995 bytes .../admindocs/locale/gd/LC_MESSAGES/django.po | 288 + .../admindocs/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 2265 bytes .../admindocs/locale/gl/LC_MESSAGES/django.po | 260 + .../admindocs/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 6912 bytes .../admindocs/locale/he/LC_MESSAGES/django.po | 273 + .../admindocs/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 2297 bytes .../admindocs/locale/hi/LC_MESSAGES/django.po | 258 + .../admindocs/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 2550 bytes .../admindocs/locale/hr/LC_MESSAGES/django.po | 264 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 6797 bytes .../locale/hsb/LC_MESSAGES/django.po | 286 + .../admindocs/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 6660 bytes .../admindocs/locale/hu/LC_MESSAGES/django.po | 286 + .../admindocs/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1860 bytes .../admindocs/locale/ia/LC_MESSAGES/django.po | 260 + .../admindocs/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 6367 bytes .../admindocs/locale/id/LC_MESSAGES/django.po | 286 + .../admindocs/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../admindocs/locale/io/LC_MESSAGES/django.po | 275 + .../admindocs/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1828 bytes .../admindocs/locale/is/LC_MESSAGES/django.po | 261 + .../admindocs/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 6480 bytes .../admindocs/locale/it/LC_MESSAGES/django.po | 289 + .../admindocs/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 7377 bytes .../admindocs/locale/ja/LC_MESSAGES/django.po | 282 + .../admindocs/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 4441 bytes .../admindocs/locale/ka/LC_MESSAGES/django.po | 263 + .../locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 1289 bytes .../locale/kab/LC_MESSAGES/django.po | 258 + .../admindocs/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1623 bytes .../admindocs/locale/kk/LC_MESSAGES/django.po | 258 + .../admindocs/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1476 bytes .../admindocs/locale/km/LC_MESSAGES/django.po | 259 + .../admindocs/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1656 bytes .../admindocs/locale/kn/LC_MESSAGES/django.po | 259 + .../admindocs/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 6609 bytes .../admindocs/locale/ko/LC_MESSAGES/django.po | 278 + .../admindocs/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../admindocs/locale/lb/LC_MESSAGES/django.po | 275 + .../admindocs/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 6673 bytes .../admindocs/locale/lt/LC_MESSAGES/django.po | 289 + .../admindocs/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 6487 bytes .../admindocs/locale/lv/LC_MESSAGES/django.po | 283 + .../admindocs/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 8290 bytes .../admindocs/locale/mk/LC_MESSAGES/django.po | 286 + .../admindocs/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 2704 bytes .../admindocs/locale/ml/LC_MESSAGES/django.po | 260 + .../admindocs/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 7607 bytes .../admindocs/locale/mn/LC_MESSAGES/django.po | 284 + .../admindocs/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../admindocs/locale/mr/LC_MESSAGES/django.po | 275 + .../admindocs/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1721 bytes .../admindocs/locale/my/LC_MESSAGES/django.po | 258 + .../admindocs/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 6346 bytes .../admindocs/locale/nb/LC_MESSAGES/django.po | 283 + .../admindocs/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1505 bytes .../admindocs/locale/ne/LC_MESSAGES/django.po | 257 + .../admindocs/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 6349 bytes .../admindocs/locale/nl/LC_MESSAGES/django.po | 282 + .../admindocs/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1662 bytes .../admindocs/locale/nn/LC_MESSAGES/django.po | 261 + .../admindocs/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 2044 bytes .../admindocs/locale/os/LC_MESSAGES/django.po | 258 + .../admindocs/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1275 bytes .../admindocs/locale/pa/LC_MESSAGES/django.po | 258 + .../admindocs/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 6652 bytes .../admindocs/locale/pl/LC_MESSAGES/django.po | 293 + .../admindocs/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 6566 bytes .../admindocs/locale/pt/LC_MESSAGES/django.po | 286 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 6601 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 290 + .../admindocs/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 6755 bytes .../admindocs/locale/ro/LC_MESSAGES/django.po | 287 + .../admindocs/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 8569 bytes .../admindocs/locale/ru/LC_MESSAGES/django.po | 290 + .../admindocs/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 6637 bytes .../admindocs/locale/sk/LC_MESSAGES/django.po | 284 + .../admindocs/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 6508 bytes .../admindocs/locale/sl/LC_MESSAGES/django.po | 285 + .../admindocs/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 6565 bytes .../admindocs/locale/sq/LC_MESSAGES/django.po | 282 + .../admindocs/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 3626 bytes .../admindocs/locale/sr/LC_MESSAGES/django.po | 263 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1932 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 262 + .../admindocs/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 5661 bytes .../admindocs/locale/sv/LC_MESSAGES/django.po | 282 + .../admindocs/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1808 bytes .../admindocs/locale/sw/LC_MESSAGES/django.po | 259 + .../admindocs/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1675 bytes .../admindocs/locale/ta/LC_MESSAGES/django.po | 258 + .../admindocs/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 1684 bytes .../admindocs/locale/te/LC_MESSAGES/django.po | 258 + .../admindocs/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 2167 bytes .../admindocs/locale/th/LC_MESSAGES/django.po | 258 + .../admindocs/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 6625 bytes .../admindocs/locale/tr/LC_MESSAGES/django.po | 287 + .../admindocs/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1869 bytes .../admindocs/locale/tt/LC_MESSAGES/django.po | 259 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 618 bytes .../locale/udm/LC_MESSAGES/django.po | 275 + .../admindocs/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 8342 bytes .../admindocs/locale/uk/LC_MESSAGES/django.po | 291 + .../admindocs/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1836 bytes .../admindocs/locale/ur/LC_MESSAGES/django.po | 259 + .../admindocs/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1306 bytes .../admindocs/locale/vi/LC_MESSAGES/django.po | 259 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6110 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 274 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 4747 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 267 + .../django/contrib/admindocs/middleware.py | 30 + .../templates/admin_doc/bookmarklets.html | 26 + .../admindocs/templates/admin_doc/index.html | 34 + .../templates/admin_doc/missing_docutils.html | 22 + .../templates/admin_doc/model_detail.html | 78 + .../templates/admin_doc/model_index.html | 52 + .../templates/admin_doc/template_detail.html | 27 + .../admin_doc/template_filter_index.html | 54 + .../admin_doc/template_tag_index.html | 54 + .../templates/admin_doc/view_detail.html | 33 + .../templates/admin_doc/view_index.html | 59 + .../django/contrib/admindocs/urls.py | 50 + .../django/contrib/admindocs/utils.py | 242 + .../django/contrib/admindocs/views.py | 417 + .../django/contrib/auth/__init__.py | 225 + .../auth/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 6618 bytes .../auth/__pycache__/admin.cpython-35.pyc | Bin 0 -> 7186 bytes .../auth/__pycache__/apps.cpython-35.pyc | Bin 0 -> 1436 bytes .../auth/__pycache__/backends.cpython-35.pyc | Bin 0 -> 7249 bytes .../auth/__pycache__/base_user.cpython-35.pyc | Bin 0 -> 5898 bytes .../auth/__pycache__/checks.cpython-35.pyc | Bin 0 -> 4040 bytes .../context_processors.cpython-35.pyc | Bin 0 -> 2533 bytes .../__pycache__/decorators.cpython-35.pyc | Bin 0 -> 2865 bytes .../auth/__pycache__/forms.cpython-35.pyc | Bin 0 -> 15163 bytes .../auth/__pycache__/hashers.cpython-35.pyc | Bin 0 -> 24094 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 4704 bytes .../auth/__pycache__/mixins.cpython-35.pyc | Bin 0 -> 4798 bytes .../auth/__pycache__/models.cpython-35.pyc | Bin 0 -> 17266 bytes .../password_validation.cpython-35.pyc | Bin 0 -> 8821 bytes .../auth/__pycache__/signals.cpython-35.pyc | Bin 0 -> 359 bytes .../auth/__pycache__/tokens.cpython-35.pyc | Bin 0 -> 3376 bytes .../auth/__pycache__/urls.cpython-35.pyc | Bin 0 -> 941 bytes .../__pycache__/validators.cpython-35.pyc | Bin 0 -> 1080 bytes .../auth/__pycache__/views.cpython-35.pyc | Bin 0 -> 12880 bytes .../django/contrib/auth/admin.py | 204 + .../site-packages/django/contrib/auth/apps.py | 28 + .../django/contrib/auth/backends.py | 174 + .../django/contrib/auth/base_user.py | 139 + .../django/contrib/auth/checks.py | 166 + .../contrib/auth/common-passwords.txt.gz | Bin 0 -> 81355 bytes .../django/contrib/auth/context_processors.py | 63 + .../django/contrib/auth/decorators.py | 73 + .../django/contrib/auth/forms.py | 424 + .../django/contrib/auth/handlers/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 154 bytes .../__pycache__/modwsgi.cpython-35.pyc | Bin 0 -> 1406 bytes .../django/contrib/auth/handlers/modwsgi.py | 44 + .../django/contrib/auth/hashers.py | 637 + .../auth/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 649 bytes .../auth/locale/af/LC_MESSAGES/django.po | 283 + .../auth/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 8705 bytes .../auth/locale/ar/LC_MESSAGES/django.po | 310 + .../auth/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 2250 bytes .../auth/locale/ast/LC_MESSAGES/django.po | 284 + .../auth/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 7450 bytes .../auth/locale/az/LC_MESSAGES/django.po | 300 + .../auth/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 10008 bytes .../auth/locale/be/LC_MESSAGES/django.po | 310 + .../auth/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 8751 bytes .../auth/locale/bg/LC_MESSAGES/django.po | 304 + .../auth/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 5455 bytes .../auth/locale/bn/LC_MESSAGES/django.po | 286 + .../auth/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 1144 bytes .../auth/locale/br/LC_MESSAGES/django.po | 283 + .../auth/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 2963 bytes .../auth/locale/bs/LC_MESSAGES/django.po | 292 + .../auth/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 7313 bytes .../auth/locale/ca/LC_MESSAGES/django.po | 305 + .../auth/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 7621 bytes .../auth/locale/cs/LC_MESSAGES/django.po | 303 + .../auth/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 4338 bytes .../auth/locale/cy/LC_MESSAGES/django.po | 294 + .../auth/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 7443 bytes .../auth/locale/da/LC_MESSAGES/django.po | 305 + .../auth/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 7514 bytes .../auth/locale/de/LC_MESSAGES/django.po | 313 + .../auth/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 8096 bytes .../auth/locale/dsb/LC_MESSAGES/django.po | 315 + .../auth/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 10150 bytes .../auth/locale/el/LC_MESSAGES/django.po | 316 + .../auth/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../auth/locale/en/LC_MESSAGES/django.po | 369 + .../auth/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 3650 bytes .../auth/locale/en_AU/LC_MESSAGES/django.po | 290 + .../auth/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 3179 bytes .../auth/locale/en_GB/LC_MESSAGES/django.po | 289 + .../auth/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 7353 bytes .../auth/locale/eo/LC_MESSAGES/django.po | 305 + .../auth/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 7766 bytes .../auth/locale/es/LC_MESSAGES/django.po | 316 + .../auth/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 7920 bytes .../auth/locale/es_AR/LC_MESSAGES/django.po | 311 + .../auth/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 6529 bytes .../auth/locale/es_CO/LC_MESSAGES/django.po | 304 + .../auth/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 7860 bytes .../auth/locale/es_MX/LC_MESSAGES/django.po | 311 + .../auth/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 7415 bytes .../auth/locale/es_VE/LC_MESSAGES/django.po | 304 + .../auth/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 7432 bytes .../auth/locale/et/LC_MESSAGES/django.po | 307 + .../auth/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 7396 bytes .../auth/locale/eu/LC_MESSAGES/django.po | 310 + .../auth/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 8963 bytes .../auth/locale/fa/LC_MESSAGES/django.po | 308 + .../auth/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 7514 bytes .../auth/locale/fi/LC_MESSAGES/django.po | 306 + .../auth/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 8116 bytes .../auth/locale/fr/LC_MESSAGES/django.po | 315 + .../auth/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../auth/locale/fy/LC_MESSAGES/django.po | 226 + .../auth/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 3572 bytes .../auth/locale/ga/LC_MESSAGES/django.po | 298 + .../auth/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 8720 bytes .../auth/locale/gd/LC_MESSAGES/django.po | 333 + .../auth/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 3891 bytes .../auth/locale/gl/LC_MESSAGES/django.po | 292 + .../auth/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 8170 bytes .../auth/locale/he/LC_MESSAGES/django.po | 297 + .../auth/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 5364 bytes .../auth/locale/hi/LC_MESSAGES/django.po | 290 + .../auth/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 5894 bytes .../auth/locale/hr/LC_MESSAGES/django.po | 306 + .../auth/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 7925 bytes .../auth/locale/hsb/LC_MESSAGES/django.po | 312 + .../auth/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 7691 bytes .../auth/locale/hu/LC_MESSAGES/django.po | 308 + .../auth/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 3314 bytes .../auth/locale/ia/LC_MESSAGES/django.po | 288 + .../auth/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 7215 bytes .../auth/locale/id/LC_MESSAGES/django.po | 302 + .../auth/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../auth/locale/io/LC_MESSAGES/django.po | 226 + .../auth/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 7540 bytes .../auth/locale/is/LC_MESSAGES/django.po | 307 + .../auth/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 7583 bytes .../auth/locale/it/LC_MESSAGES/django.po | 313 + .../auth/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 8061 bytes .../auth/locale/ja/LC_MESSAGES/django.po | 297 + .../auth/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 10297 bytes .../auth/locale/ka/LC_MESSAGES/django.po | 296 + .../auth/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 2982 bytes .../auth/locale/kab/LC_MESSAGES/django.po | 287 + .../auth/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 3578 bytes .../auth/locale/kk/LC_MESSAGES/django.po | 283 + .../auth/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 2609 bytes .../auth/locale/km/LC_MESSAGES/django.po | 281 + .../auth/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 4024 bytes .../auth/locale/kn/LC_MESSAGES/django.po | 285 + .../auth/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 7612 bytes .../auth/locale/ko/LC_MESSAGES/django.po | 303 + .../auth/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../auth/locale/lb/LC_MESSAGES/django.po | 226 + .../auth/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 7929 bytes .../auth/locale/lt/LC_MESSAGES/django.po | 315 + .../auth/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 7599 bytes .../auth/locale/lv/LC_MESSAGES/django.po | 306 + .../auth/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 9235 bytes .../auth/locale/mk/LC_MESSAGES/django.po | 308 + .../auth/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 12518 bytes .../auth/locale/ml/LC_MESSAGES/django.po | 300 + .../auth/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 9403 bytes .../auth/locale/mn/LC_MESSAGES/django.po | 310 + .../auth/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../auth/locale/mr/LC_MESSAGES/django.po | 226 + .../auth/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1026 bytes .../auth/locale/my/LC_MESSAGES/django.po | 282 + .../auth/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 7222 bytes .../auth/locale/nb/LC_MESSAGES/django.po | 301 + .../auth/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 8553 bytes .../auth/locale/ne/LC_MESSAGES/django.po | 286 + .../auth/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 7149 bytes .../auth/locale/nl/LC_MESSAGES/django.po | 312 + .../auth/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 2801 bytes .../auth/locale/nn/LC_MESSAGES/django.po | 285 + .../auth/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 4434 bytes .../auth/locale/os/LC_MESSAGES/django.po | 288 + .../auth/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 3666 bytes .../auth/locale/pa/LC_MESSAGES/django.po | 285 + .../auth/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 7920 bytes .../auth/locale/pl/LC_MESSAGES/django.po | 322 + .../auth/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 7756 bytes .../auth/locale/pt/LC_MESSAGES/django.po | 313 + .../auth/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 7564 bytes .../auth/locale/pt_BR/LC_MESSAGES/django.po | 319 + .../auth/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 7961 bytes .../auth/locale/ro/LC_MESSAGES/django.po | 320 + .../auth/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 10482 bytes .../auth/locale/ru/LC_MESSAGES/django.po | 320 + .../auth/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 7838 bytes .../auth/locale/sk/LC_MESSAGES/django.po | 309 + .../auth/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 7552 bytes .../auth/locale/sl/LC_MESSAGES/django.po | 308 + .../auth/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 7846 bytes .../auth/locale/sq/LC_MESSAGES/django.po | 308 + .../auth/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 9754 bytes .../auth/locale/sr/LC_MESSAGES/django.po | 309 + .../auth/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 3293 bytes .../auth/locale/sr_Latn/LC_MESSAGES/django.po | 293 + .../auth/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 7114 bytes .../auth/locale/sv/LC_MESSAGES/django.po | 308 + .../auth/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 5029 bytes .../auth/locale/sw/LC_MESSAGES/django.po | 287 + .../auth/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 2679 bytes .../auth/locale/ta/LC_MESSAGES/django.po | 283 + .../auth/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 2955 bytes .../auth/locale/te/LC_MESSAGES/django.po | 285 + .../auth/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 6013 bytes .../auth/locale/th/LC_MESSAGES/django.po | 282 + .../auth/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 7480 bytes .../auth/locale/tr/LC_MESSAGES/django.po | 310 + .../auth/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1371 bytes .../auth/locale/tt/LC_MESSAGES/django.po | 281 + .../auth/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../auth/locale/udm/LC_MESSAGES/django.po | 226 + .../auth/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 9698 bytes .../auth/locale/uk/LC_MESSAGES/django.po | 314 + .../auth/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 698 bytes .../auth/locale/ur/LC_MESSAGES/django.po | 282 + .../auth/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 4703 bytes .../auth/locale/vi/LC_MESSAGES/django.po | 292 + .../auth/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 6782 bytes .../auth/locale/zh_Hans/LC_MESSAGES/django.po | 293 + .../auth/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 6759 bytes .../auth/locale/zh_Hant/LC_MESSAGES/django.po | 291 + .../contrib/auth/management/__init__.py | 141 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 3811 bytes .../__pycache__/changepassword.cpython-35.pyc | Bin 0 -> 2624 bytes .../createsuperuser.cpython-35.pyc | Bin 0 -> 5726 bytes .../management/commands/changepassword.py | 75 + .../management/commands/createsuperuser.py | 202 + .../django/contrib/auth/middleware.py | 123 + .../contrib/auth/migrations/0001_initial.py | 104 + .../0002_alter_permission_name_max_length.py | 16 + .../0003_alter_user_email_max_length.py | 16 + .../0004_alter_user_username_opts.py | 23 + .../0005_alter_user_last_login_null.py | 16 + .../0006_require_contenttypes_0002.py | 14 + ...007_alter_validators_add_error_messages.py | 24 + .../0008_alter_user_username_max_length.py | 24 + .../0009_alter_user_last_name_max_length.py | 16 + .../contrib/auth/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 3210 bytes ..._permission_name_max_length.cpython-35.pyc | Bin 0 -> 647 bytes ...alter_user_email_max_length.cpython-35.pyc | Bin 0 -> 698 bytes ...04_alter_user_username_opts.cpython-35.pyc | Bin 0 -> 954 bytes ..._alter_user_last_login_null.cpython-35.pyc | Bin 0 -> 683 bytes ...6_require_contenttypes_0002.cpython-35.pyc | Bin 0 -> 550 bytes ...lidators_add_error_messages.cpython-35.pyc | Bin 0 -> 967 bytes ...er_user_username_max_length.cpython-35.pyc | Bin 0 -> 973 bytes ...r_user_last_name_max_length.cpython-35.pyc | Bin 0 -> 699 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 156 bytes .../django/contrib/auth/mixins.py | 109 + .../django/contrib/auth/models.py | 430 + .../contrib/auth/password_validation.py | 205 + .../django/contrib/auth/signals.py | 5 + .../auth/widgets/read_only_password_hash.html | 5 + .../registration/password_reset_subject.txt | 3 + .../django/contrib/auth/tokens.py | 93 + .../site-packages/django/contrib/auth/urls.py | 20 + .../django/contrib/auth/validators.py | 25 + .../django/contrib/auth/views.py | 359 + .../django/contrib/contenttypes/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 229 bytes .../__pycache__/admin.cpython-35.pyc | Bin 0 -> 4130 bytes .../__pycache__/apps.cpython-35.pyc | Bin 0 -> 1181 bytes .../__pycache__/checks.cpython-35.pyc | Bin 0 -> 1653 bytes .../__pycache__/fields.cpython-35.pyc | Bin 0 -> 23261 bytes .../__pycache__/forms.cpython-35.pyc | Bin 0 -> 3268 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 6277 bytes .../__pycache__/views.cpython-35.pyc | Bin 0 -> 2212 bytes .../django/contrib/contenttypes/admin.py | 129 + .../django/contrib/contenttypes/apps.py | 22 + .../django/contrib/contenttypes/checks.py | 41 + .../django/contrib/contenttypes/fields.py | 679 + .../django/contrib/contenttypes/forms.py | 82 + .../locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../locale/af/LC_MESSAGES/django.po | 41 + .../locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 1259 bytes .../locale/ar/LC_MESSAGES/django.po | 44 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 643 bytes .../locale/ast/LC_MESSAGES/django.po | 42 + .../locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1101 bytes .../locale/az/LC_MESSAGES/django.po | 43 + .../locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1394 bytes .../locale/be/LC_MESSAGES/django.po | 44 + .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 1267 bytes .../locale/bg/LC_MESSAGES/django.po | 45 + .../locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1201 bytes .../locale/bn/LC_MESSAGES/django.po | 43 + .../locale/br/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../locale/br/LC_MESSAGES/django.po | 41 + .../locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 700 bytes .../locale/bs/LC_MESSAGES/django.po | 43 + .../locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 1134 bytes .../locale/ca/LC_MESSAGES/django.po | 43 + .../locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1089 bytes .../locale/cs/LC_MESSAGES/django.po | 42 + .../locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1159 bytes .../locale/cy/LC_MESSAGES/django.po | 43 + .../locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1081 bytes .../locale/da/LC_MESSAGES/django.po | 43 + .../locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1092 bytes .../locale/de/LC_MESSAGES/django.po | 42 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 1169 bytes .../locale/dsb/LC_MESSAGES/django.po | 43 + .../locale/el/LC_MESSAGES/django.mo | Bin 0 -> 1323 bytes .../locale/el/LC_MESSAGES/django.po | 45 + .../locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../locale/en/LC_MESSAGES/django.po | 45 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 41 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1053 bytes .../locale/en_GB/LC_MESSAGES/django.po | 43 + .../locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1087 bytes .../locale/eo/LC_MESSAGES/django.po | 42 + .../locale/es/LC_MESSAGES/django.mo | Bin 0 -> 1142 bytes .../locale/es/LC_MESSAGES/django.po | 45 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 1121 bytes .../locale/es_AR/LC_MESSAGES/django.po | 43 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1158 bytes .../locale/es_CO/LC_MESSAGES/django.po | 43 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1109 bytes .../locale/es_MX/LC_MESSAGES/django.po | 43 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 1152 bytes .../locale/es_VE/LC_MESSAGES/django.po | 44 + .../locale/et/LC_MESSAGES/django.mo | Bin 0 -> 1066 bytes .../locale/et/LC_MESSAGES/django.po | 44 + .../locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1077 bytes .../locale/eu/LC_MESSAGES/django.po | 43 + .../locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 1165 bytes .../locale/fa/LC_MESSAGES/django.po | 44 + .../locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1073 bytes .../locale/fi/LC_MESSAGES/django.po | 44 + .../locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 1112 bytes .../locale/fr/LC_MESSAGES/django.po | 43 + .../locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../locale/fy/LC_MESSAGES/django.po | 41 + .../locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1083 bytes .../locale/ga/LC_MESSAGES/django.po | 43 + .../locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 1191 bytes .../locale/gd/LC_MESSAGES/django.po | 44 + .../locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1072 bytes .../locale/gl/LC_MESSAGES/django.po | 44 + .../locale/he/LC_MESSAGES/django.mo | Bin 0 -> 1162 bytes .../locale/he/LC_MESSAGES/django.po | 42 + .../locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1321 bytes .../locale/hi/LC_MESSAGES/django.po | 42 + .../locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1167 bytes .../locale/hr/LC_MESSAGES/django.po | 45 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 1143 bytes .../locale/hsb/LC_MESSAGES/django.po | 43 + .../locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1103 bytes .../locale/hu/LC_MESSAGES/django.po | 44 + .../locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1079 bytes .../locale/ia/LC_MESSAGES/django.po | 42 + .../locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1066 bytes .../locale/id/LC_MESSAGES/django.po | 45 + .../locale/io/LC_MESSAGES/django.mo | Bin 0 -> 1051 bytes .../locale/io/LC_MESSAGES/django.po | 41 + .../locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1086 bytes .../locale/is/LC_MESSAGES/django.po | 44 + .../locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1098 bytes .../locale/it/LC_MESSAGES/django.po | 45 + .../locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 1239 bytes .../locale/ja/LC_MESSAGES/django.po | 46 + .../locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1429 bytes .../locale/ka/LC_MESSAGES/django.po | 43 + .../locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 663 bytes .../locale/kk/LC_MESSAGES/django.po | 41 + .../locale/km/LC_MESSAGES/django.mo | Bin 0 -> 678 bytes .../locale/km/LC_MESSAGES/django.po | 41 + .../locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 714 bytes .../locale/kn/LC_MESSAGES/django.po | 42 + .../locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1127 bytes .../locale/ko/LC_MESSAGES/django.po | 42 + .../locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../locale/lb/LC_MESSAGES/django.po | 41 + .../locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../locale/lt/LC_MESSAGES/django.po | 45 + .../locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 1090 bytes .../locale/lv/LC_MESSAGES/django.po | 44 + .../locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 1258 bytes .../locale/mk/LC_MESSAGES/django.po | 44 + .../locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1378 bytes .../locale/ml/LC_MESSAGES/django.po | 43 + .../locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1225 bytes .../locale/mn/LC_MESSAGES/django.po | 46 + .../locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../locale/mr/LC_MESSAGES/django.po | 41 + .../locale/my/LC_MESSAGES/django.mo | Bin 0 -> 1554 bytes .../locale/my/LC_MESSAGES/django.po | 42 + .../locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1081 bytes .../locale/nb/LC_MESSAGES/django.po | 45 + .../locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1344 bytes .../locale/ne/LC_MESSAGES/django.po | 41 + .../locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1095 bytes .../locale/nl/LC_MESSAGES/django.po | 43 + .../locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1054 bytes .../locale/nn/LC_MESSAGES/django.po | 43 + .../locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1116 bytes .../locale/os/LC_MESSAGES/django.po | 42 + .../locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 697 bytes .../locale/pa/LC_MESSAGES/django.po | 42 + .../locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 1251 bytes .../locale/pl/LC_MESSAGES/django.po | 46 + .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 1125 bytes .../locale/pt/LC_MESSAGES/django.po | 44 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1137 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 45 + .../locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 1142 bytes .../locale/ro/LC_MESSAGES/django.po | 45 + .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1426 bytes .../locale/ru/LC_MESSAGES/django.po | 48 + .../locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 1097 bytes .../locale/sk/LC_MESSAGES/django.po | 43 + .../locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../locale/sl/LC_MESSAGES/django.po | 45 + .../locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1103 bytes .../locale/sq/LC_MESSAGES/django.po | 42 + .../locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 1265 bytes .../locale/sr/LC_MESSAGES/django.po | 45 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1113 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 44 + .../locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1067 bytes .../locale/sv/LC_MESSAGES/django.po | 44 + .../locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 563 bytes .../locale/sw/LC_MESSAGES/django.po | 41 + .../locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 678 bytes .../locale/ta/LC_MESSAGES/django.po | 41 + .../locale/te/LC_MESSAGES/django.mo | Bin 0 -> 690 bytes .../locale/te/LC_MESSAGES/django.po | 41 + .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1186 bytes .../locale/th/LC_MESSAGES/django.po | 42 + .../locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 1121 bytes .../locale/tr/LC_MESSAGES/django.po | 44 + .../locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 659 bytes .../locale/tt/LC_MESSAGES/django.po | 41 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../locale/udm/LC_MESSAGES/django.po | 41 + .../locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1275 bytes .../locale/uk/LC_MESSAGES/django.po | 46 + .../locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 671 bytes .../locale/ur/LC_MESSAGES/django.po | 41 + .../locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1155 bytes .../locale/vi/LC_MESSAGES/django.po | 45 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1062 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 45 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1083 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 44 + .../contenttypes/management/__init__.py | 134 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4293 bytes .../remove_stale_contenttypes.cpython-35.pyc | Bin 0 -> 3337 bytes .../commands/remove_stale_contenttypes.py | 80 + .../contenttypes/migrations/0001_initial.py | 34 + .../0002_remove_content_type_name.py | 39 + .../contenttypes/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1200 bytes ...02_remove_content_type_name.cpython-35.pyc | Bin 0 -> 1273 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 164 bytes .../django/contrib/contenttypes/models.py | 178 + .../django/contrib/contenttypes/views.py | 95 + .../django/contrib/flatpages/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 220 bytes .../__pycache__/admin.cpython-35.pyc | Bin 0 -> 963 bytes .../flatpages/__pycache__/apps.cpython-35.pyc | Bin 0 -> 516 bytes .../__pycache__/forms.cpython-35.pyc | Bin 0 -> 2271 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 908 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 1977 bytes .../__pycache__/sitemaps.cpython-35.pyc | Bin 0 -> 931 bytes .../flatpages/__pycache__/urls.cpython-35.pyc | Bin 0 -> 359 bytes .../__pycache__/views.cpython-35.pyc | Bin 0 -> 2066 bytes .../django/contrib/flatpages/admin.py | 19 + .../django/contrib/flatpages/apps.py | 7 + .../django/contrib/flatpages/forms.py | 58 + .../flatpages/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 498 bytes .../flatpages/locale/af/LC_MESSAGES/django.po | 77 + .../flatpages/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 2475 bytes .../flatpages/locale/ar/LC_MESSAGES/django.po | 87 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 924 bytes .../locale/ast/LC_MESSAGES/django.po | 80 + .../flatpages/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 2235 bytes .../flatpages/locale/az/LC_MESSAGES/django.po | 89 + .../flatpages/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 2801 bytes .../flatpages/locale/be/LC_MESSAGES/django.po | 88 + .../flatpages/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 2569 bytes .../flatpages/locale/bg/LC_MESSAGES/django.po | 87 + .../flatpages/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 2988 bytes .../flatpages/locale/bn/LC_MESSAGES/django.po | 83 + .../flatpages/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 552 bytes .../flatpages/locale/br/LC_MESSAGES/django.po | 77 + .../flatpages/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1782 bytes .../flatpages/locale/bs/LC_MESSAGES/django.po | 88 + .../flatpages/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2109 bytes .../flatpages/locale/ca/LC_MESSAGES/django.po | 87 + .../flatpages/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 2165 bytes .../flatpages/locale/cs/LC_MESSAGES/django.po | 84 + .../flatpages/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 2163 bytes .../flatpages/locale/cy/LC_MESSAGES/django.po | 88 + .../flatpages/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 2126 bytes .../flatpages/locale/da/LC_MESSAGES/django.po | 88 + .../flatpages/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 2216 bytes .../flatpages/locale/de/LC_MESSAGES/django.po | 86 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 2238 bytes .../locale/dsb/LC_MESSAGES/django.po | 86 + .../flatpages/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 2672 bytes .../flatpages/locale/el/LC_MESSAGES/django.po | 88 + .../flatpages/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../flatpages/locale/en/LC_MESSAGES/django.po | 92 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 74 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1989 bytes .../locale/en_GB/LC_MESSAGES/django.po | 85 + .../flatpages/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 2159 bytes .../flatpages/locale/eo/LC_MESSAGES/django.po | 85 + .../flatpages/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 2131 bytes .../flatpages/locale/es/LC_MESSAGES/django.po | 88 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 2128 bytes .../locale/es_AR/LC_MESSAGES/django.po | 85 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 2140 bytes .../locale/es_CO/LC_MESSAGES/django.po | 86 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 2062 bytes .../locale/es_MX/LC_MESSAGES/django.po | 84 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 2187 bytes .../locale/es_VE/LC_MESSAGES/django.po | 85 + .../flatpages/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 2095 bytes .../flatpages/locale/et/LC_MESSAGES/django.po | 85 + .../flatpages/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 2099 bytes .../flatpages/locale/eu/LC_MESSAGES/django.po | 87 + .../flatpages/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 2459 bytes .../flatpages/locale/fa/LC_MESSAGES/django.po | 87 + .../flatpages/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 2127 bytes .../flatpages/locale/fi/LC_MESSAGES/django.po | 88 + .../flatpages/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 2265 bytes .../flatpages/locale/fr/LC_MESSAGES/django.po | 88 + .../flatpages/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../flatpages/locale/fy/LC_MESSAGES/django.po | 74 + .../flatpages/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 2191 bytes .../flatpages/locale/ga/LC_MESSAGES/django.po | 87 + .../flatpages/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 2295 bytes .../flatpages/locale/gd/LC_MESSAGES/django.po | 89 + .../flatpages/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 2039 bytes .../flatpages/locale/gl/LC_MESSAGES/django.po | 86 + .../flatpages/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 2275 bytes .../flatpages/locale/he/LC_MESSAGES/django.po | 84 + .../flatpages/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 2770 bytes .../flatpages/locale/hi/LC_MESSAGES/django.po | 81 + .../flatpages/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 2188 bytes .../flatpages/locale/hr/LC_MESSAGES/django.po | 88 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 2230 bytes .../locale/hsb/LC_MESSAGES/django.po | 86 + .../flatpages/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 2147 bytes .../flatpages/locale/hu/LC_MESSAGES/django.po | 86 + .../flatpages/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 500 bytes .../flatpages/locale/ia/LC_MESSAGES/django.po | 77 + .../flatpages/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 2085 bytes .../flatpages/locale/id/LC_MESSAGES/django.po | 88 + .../flatpages/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../flatpages/locale/io/LC_MESSAGES/django.po | 74 + .../flatpages/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 2113 bytes .../flatpages/locale/is/LC_MESSAGES/django.po | 84 + .../flatpages/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 2099 bytes .../flatpages/locale/it/LC_MESSAGES/django.po | 88 + .../flatpages/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 2303 bytes .../flatpages/locale/ja/LC_MESSAGES/django.po | 85 + .../flatpages/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 3022 bytes .../flatpages/locale/ka/LC_MESSAGES/django.po | 88 + .../flatpages/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 2494 bytes .../flatpages/locale/kk/LC_MESSAGES/django.po | 85 + .../flatpages/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1942 bytes .../flatpages/locale/km/LC_MESSAGES/django.po | 80 + .../flatpages/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1902 bytes .../flatpages/locale/kn/LC_MESSAGES/django.po | 82 + .../flatpages/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 2183 bytes .../flatpages/locale/ko/LC_MESSAGES/django.po | 85 + .../flatpages/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 502 bytes .../flatpages/locale/lb/LC_MESSAGES/django.po | 77 + .../flatpages/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 2272 bytes .../flatpages/locale/lt/LC_MESSAGES/django.po | 88 + .../flatpages/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 2190 bytes .../flatpages/locale/lv/LC_MESSAGES/django.po | 87 + .../flatpages/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 2699 bytes .../flatpages/locale/mk/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 3228 bytes .../flatpages/locale/ml/LC_MESSAGES/django.po | 84 + .../flatpages/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 2600 bytes .../flatpages/locale/mn/LC_MESSAGES/django.po | 87 + .../flatpages/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../flatpages/locale/mr/LC_MESSAGES/django.po | 74 + .../flatpages/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 507 bytes .../flatpages/locale/my/LC_MESSAGES/django.po | 77 + .../flatpages/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 2092 bytes .../flatpages/locale/nb/LC_MESSAGES/django.po | 87 + .../flatpages/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1500 bytes .../flatpages/locale/ne/LC_MESSAGES/django.po | 77 + .../flatpages/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 2115 bytes .../flatpages/locale/nl/LC_MESSAGES/django.po | 88 + .../flatpages/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1693 bytes .../flatpages/locale/nn/LC_MESSAGES/django.po | 84 + .../flatpages/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 2329 bytes .../flatpages/locale/os/LC_MESSAGES/django.po | 86 + .../flatpages/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 903 bytes .../flatpages/locale/pa/LC_MESSAGES/django.po | 78 + .../flatpages/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 2302 bytes .../flatpages/locale/pl/LC_MESSAGES/django.po | 91 + .../flatpages/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2115 bytes .../flatpages/locale/pt/LC_MESSAGES/django.po | 87 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2130 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 91 + .../flatpages/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 2197 bytes .../flatpages/locale/ro/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2741 bytes .../flatpages/locale/ru/LC_MESSAGES/django.po | 89 + .../flatpages/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 2155 bytes .../flatpages/locale/sk/LC_MESSAGES/django.po | 86 + .../flatpages/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 2173 bytes .../flatpages/locale/sl/LC_MESSAGES/django.po | 88 + .../flatpages/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 2181 bytes .../flatpages/locale/sq/LC_MESSAGES/django.po | 86 + .../flatpages/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 2632 bytes .../flatpages/locale/sr/LC_MESSAGES/django.po | 88 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 2125 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 88 + .../flatpages/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 2132 bytes .../flatpages/locale/sv/LC_MESSAGES/django.po | 86 + .../flatpages/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1537 bytes .../flatpages/locale/sw/LC_MESSAGES/django.po | 83 + .../flatpages/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1945 bytes .../flatpages/locale/ta/LC_MESSAGES/django.po | 80 + .../flatpages/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 1238 bytes .../flatpages/locale/te/LC_MESSAGES/django.po | 79 + .../flatpages/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 2698 bytes .../flatpages/locale/th/LC_MESSAGES/django.po | 80 + .../flatpages/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 2136 bytes .../flatpages/locale/tr/LC_MESSAGES/django.po | 90 + .../flatpages/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 2007 bytes .../flatpages/locale/tt/LC_MESSAGES/django.po | 84 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 490 bytes .../locale/udm/LC_MESSAGES/django.po | 77 + .../flatpages/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 2624 bytes .../flatpages/locale/uk/LC_MESSAGES/django.po | 90 + .../flatpages/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1976 bytes .../flatpages/locale/ur/LC_MESSAGES/django.po | 84 + .../flatpages/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1035 bytes .../flatpages/locale/vi/LC_MESSAGES/django.po | 82 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1994 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 84 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2053 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 84 + .../django/contrib/flatpages/middleware.py | 20 + .../flatpages/migrations/0001_initial.py | 39 + .../contrib/flatpages/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1512 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 161 bytes .../django/contrib/flatpages/models.py | 40 + .../django/contrib/flatpages/sitemaps.py | 12 + .../flatpages/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 163 bytes .../__pycache__/flatpages.cpython-35.pyc | Bin 0 -> 3077 bytes .../flatpages/templatetags/flatpages.py | 99 + .../django/contrib/flatpages/urls.py | 6 + .../django/contrib/flatpages/views.py | 70 + .../django/contrib/gis/__init__.py | 1 + .../gis/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 202 bytes .../gis/__pycache__/apps.cpython-35.pyc | Bin 0 -> 760 bytes .../gis/__pycache__/feeds.cpython-35.pyc | Bin 0 -> 6020 bytes .../gis/__pycache__/geometry.cpython-35.pyc | Bin 0 -> 496 bytes .../gis/__pycache__/measure.cpython-35.pyc | Bin 0 -> 9964 bytes .../gis/__pycache__/ptr.cpython-35.pyc | Bin 0 -> 1340 bytes .../gis/__pycache__/shortcuts.cpython-35.pyc | Bin 0 -> 1368 bytes .../gis/__pycache__/views.cpython-35.pyc | Bin 0 -> 849 bytes .../django/contrib/gis/admin/__init__.py | 12 + .../admin/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 682 bytes .../admin/__pycache__/options.cpython-35.pyc | Bin 0 -> 4723 bytes .../admin/__pycache__/widgets.cpython-35.pyc | Bin 0 -> 3116 bytes .../django/contrib/gis/admin/options.py | 133 + .../django/contrib/gis/admin/widgets.py | 117 + .../site-packages/django/contrib/gis/apps.py | 11 + .../django/contrib/gis/db/__init__.py | 0 .../db/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 147 bytes .../contrib/gis/db/backends/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 156 bytes .../backends/__pycache__/utils.cpython-35.pyc | Bin 0 -> 1220 bytes .../contrib/gis/db/backends/base/__init__.py | 0 .../base/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 161 bytes .../base/__pycache__/adapter.cpython-35.pyc | Bin 0 -> 1050 bytes .../base/__pycache__/features.cpython-35.pyc | Bin 0 -> 3618 bytes .../base/__pycache__/models.cpython-35.pyc | Bin 0 -> 4581 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 6599 bytes .../contrib/gis/db/backends/base/adapter.py | 19 + .../contrib/gis/db/backends/base/features.py | 98 + .../contrib/gis/db/backends/base/models.py | 136 + .../gis/db/backends/base/operations.py | 162 + .../contrib/gis/db/backends/mysql/__init__.py | 0 .../mysql/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 162 bytes .../mysql/__pycache__/base.cpython-35.pyc | Bin 0 -> 750 bytes .../mysql/__pycache__/features.cpython-35.pyc | Bin 0 -> 1134 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 1432 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 4051 bytes .../mysql/__pycache__/schema.cpython-35.pyc | Bin 0 -> 3230 bytes .../contrib/gis/db/backends/mysql/base.py | 16 + .../contrib/gis/db/backends/mysql/features.py | 21 + .../gis/db/backends/mysql/introspection.py | 37 + .../gis/db/backends/mysql/operations.py | 98 + .../contrib/gis/db/backends/mysql/schema.py | 77 + .../gis/db/backends/oracle/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 163 bytes .../oracle/__pycache__/adapter.cpython-35.pyc | Bin 0 -> 2353 bytes .../oracle/__pycache__/base.cpython-35.pyc | Bin 0 -> 756 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 676 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 1290 bytes .../oracle/__pycache__/models.cpython-35.pyc | Bin 0 -> 2845 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 8475 bytes .../oracle/__pycache__/schema.cpython-35.pyc | Bin 0 -> 4056 bytes .../contrib/gis/db/backends/oracle/adapter.py | 57 + .../contrib/gis/db/backends/oracle/base.py | 16 + .../gis/db/backends/oracle/features.py | 11 + .../gis/db/backends/oracle/introspection.py | 42 + .../contrib/gis/db/backends/oracle/models.py | 64 + .../gis/db/backends/oracle/operations.py | 216 + .../contrib/gis/db/backends/oracle/schema.py | 94 + .../gis/db/backends/postgis/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 164 bytes .../__pycache__/adapter.cpython-35.pyc | Bin 0 -> 2488 bytes .../postgis/__pycache__/base.cpython-35.pyc | Bin 0 -> 1325 bytes .../postgis/__pycache__/const.cpython-35.pyc | Bin 0 -> 663 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 677 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 3021 bytes .../postgis/__pycache__/models.cpython-35.pyc | Bin 0 -> 2780 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 14149 bytes .../__pycache__/pgraster.cpython-35.pyc | Bin 0 -> 2707 bytes .../postgis/__pycache__/schema.cpython-35.pyc | Bin 0 -> 2470 bytes .../gis/db/backends/postgis/adapter.py | 65 + .../contrib/gis/db/backends/postgis/base.py | 26 + .../contrib/gis/db/backends/postgis/const.py | 43 + .../gis/db/backends/postgis/features.py | 12 + .../gis/db/backends/postgis/introspection.py | 100 + .../contrib/gis/db/backends/postgis/models.py | 66 + .../gis/db/backends/postgis/operations.py | 396 + .../gis/db/backends/postgis/pgraster.py | 141 + .../contrib/gis/db/backends/postgis/schema.py | 65 + .../gis/db/backends/spatialite/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 167 bytes .../__pycache__/adapter.cpython-35.pyc | Bin 0 -> 737 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 2373 bytes .../__pycache__/client.cpython-35.pyc | Bin 0 -> 447 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 835 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 2428 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 2740 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 8631 bytes .../__pycache__/schema.cpython-35.pyc | Bin 0 -> 5056 bytes .../gis/db/backends/spatialite/adapter.py | 9 + .../gis/db/backends/spatialite/base.py | 64 + .../gis/db/backends/spatialite/client.py | 5 + .../gis/db/backends/spatialite/features.py | 13 + .../db/backends/spatialite/introspection.py | 73 + .../gis/db/backends/spatialite/models.py | 64 + .../gis/db/backends/spatialite/operations.py | 217 + .../gis/db/backends/spatialite/schema.py | 165 + .../django/contrib/gis/db/backends/utils.py | 27 + .../django/contrib/gis/db/models/__init__.py | 18 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 842 bytes .../__pycache__/aggregates.cpython-35.pyc | Bin 0 -> 3572 bytes .../models/__pycache__/fields.cpython-35.pyc | Bin 0 -> 13586 bytes .../__pycache__/functions.cpython-35.pyc | Bin 0 -> 19756 bytes .../models/__pycache__/lookups.cpython-35.pyc | Bin 0 -> 12978 bytes .../models/__pycache__/proxy.cpython-35.pyc | Bin 0 -> 2539 bytes .../contrib/gis/db/models/aggregates.py | 76 + .../django/contrib/gis/db/models/fields.py | 377 + .../django/contrib/gis/db/models/functions.py | 467 + .../django/contrib/gis/db/models/lookups.py | 346 + .../django/contrib/gis/db/models/proxy.py | 80 + .../contrib/gis/db/models/sql/__init__.py | 7 + .../sql/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 298 bytes .../sql/__pycache__/conversion.cpython-35.pyc | Bin 0 -> 3053 bytes .../contrib/gis/db/models/sql/conversion.py | 69 + .../site-packages/django/contrib/gis/feeds.py | 140 + .../django/contrib/gis/forms/__init__.py | 8 + .../forms/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 542 bytes .../forms/__pycache__/fields.cpython-35.pyc | Bin 0 -> 4379 bytes .../forms/__pycache__/widgets.cpython-35.pyc | Bin 0 -> 4314 bytes .../django/contrib/gis/forms/fields.py | 128 + .../django/contrib/gis/forms/widgets.py | 117 + .../django/contrib/gis/gdal/LICENSE | 28 + .../django/contrib/gis/gdal/__init__.py | 47 + .../gdal/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2132 bytes .../gis/gdal/__pycache__/base.cpython-35.pyc | Bin 0 -> 479 bytes .../__pycache__/datasource.cpython-35.pyc | Bin 0 -> 4312 bytes .../gdal/__pycache__/driver.cpython-35.pyc | Bin 0 -> 2720 bytes .../gdal/__pycache__/envelope.cpython-35.pyc | Bin 0 -> 6323 bytes .../gis/gdal/__pycache__/error.cpython-35.pyc | Bin 0 -> 1638 bytes .../gdal/__pycache__/feature.cpython-35.pyc | Bin 0 -> 4892 bytes .../gis/gdal/__pycache__/field.cpython-35.pyc | Bin 0 -> 8411 bytes .../__pycache__/geometries.cpython-35.pyc | Bin 0 -> 27242 bytes .../gdal/__pycache__/geomtype.cpython-35.pyc | Bin 0 -> 3200 bytes .../gis/gdal/__pycache__/layer.cpython-35.pyc | Bin 0 -> 9867 bytes .../gdal/__pycache__/libgdal.cpython-35.pyc | Bin 0 -> 3366 bytes .../gis/gdal/__pycache__/srs.cpython-35.pyc | Bin 0 -> 13379 bytes .../django/contrib/gis/gdal/base.py | 6 + .../django/contrib/gis/gdal/datasource.py | 120 + .../django/contrib/gis/gdal/driver.py | 97 + .../django/contrib/gis/gdal/envelope.py | 178 + .../django/contrib/gis/gdal/error.py | 61 + .../django/contrib/gis/gdal/feature.py | 115 + .../django/contrib/gis/gdal/field.py | 234 + .../django/contrib/gis/gdal/geometries.py | 714 ++ .../django/contrib/gis/gdal/geomtype.py | 94 + .../django/contrib/gis/gdal/layer.py | 214 + .../django/contrib/gis/gdal/libgdal.py | 124 + .../contrib/gis/gdal/prototypes/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 160 bytes .../prototypes/__pycache__/ds.cpython-35.pyc | Bin 0 -> 3934 bytes .../__pycache__/errcheck.cpython-35.pyc | Bin 0 -> 4101 bytes .../__pycache__/generation.cpython-35.pyc | Bin 0 -> 4669 bytes .../__pycache__/geom.cpython-35.pyc | Bin 0 -> 4487 bytes .../__pycache__/raster.cpython-35.pyc | Bin 0 -> 4287 bytes .../prototypes/__pycache__/srs.cpython-35.pyc | Bin 0 -> 2980 bytes .../django/contrib/gis/gdal/prototypes/ds.py | 81 + .../contrib/gis/gdal/prototypes/errcheck.py | 139 + .../contrib/gis/gdal/prototypes/generation.py | 158 + .../contrib/gis/gdal/prototypes/geom.py | 109 + .../contrib/gis/gdal/prototypes/raster.py | 111 + .../django/contrib/gis/gdal/prototypes/srs.py | 80 + .../contrib/gis/gdal/raster/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 156 bytes .../raster/__pycache__/band.cpython-35.pyc | Bin 0 -> 8370 bytes .../raster/__pycache__/base.cpython-35.pyc | Bin 0 -> 2037 bytes .../raster/__pycache__/const.cpython-35.pyc | Bin 0 -> 1525 bytes .../raster/__pycache__/source.cpython-35.pyc | Bin 0 -> 13930 bytes .../django/contrib/gis/gdal/raster/band.py | 252 + .../django/contrib/gis/gdal/raster/base.py | 78 + .../django/contrib/gis/gdal/raster/const.py | 76 + .../django/contrib/gis/gdal/raster/source.py | 467 + .../django/contrib/gis/gdal/srs.py | 335 + .../django/contrib/gis/geoip2/__init__.py | 23 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 988 bytes .../geoip2/__pycache__/base.cpython-35.pyc | Bin 0 -> 7915 bytes .../__pycache__/resources.cpython-35.pyc | Bin 0 -> 813 bytes .../django/contrib/gis/geoip2/base.py | 229 + .../django/contrib/gis/geoip2/resources.py | 21 + .../django/contrib/gis/geometry.py | 13 + .../django/contrib/gis/geos/LICENSE | 27 + .../django/contrib/gis/geos/__init__.py | 15 + .../geos/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 964 bytes .../gis/geos/__pycache__/base.cpython-35.pyc | Bin 0 -> 479 bytes .../__pycache__/collections.cpython-35.pyc | Bin 0 -> 5088 bytes .../geos/__pycache__/coordseq.cpython-35.pyc | Bin 0 -> 8835 bytes .../gis/geos/__pycache__/error.cpython-35.pyc | Bin 0 -> 395 bytes .../geos/__pycache__/factory.cpython-35.pyc | Bin 0 -> 976 bytes .../geos/__pycache__/geometry.cpython-35.pyc | Bin 0 -> 28686 bytes .../gis/geos/__pycache__/io.cpython-35.pyc | Bin 0 -> 1304 bytes .../geos/__pycache__/libgeos.cpython-35.pyc | Bin 0 -> 4533 bytes .../__pycache__/linestring.cpython-35.pyc | Bin 0 -> 5768 bytes .../__pycache__/mutable_list.cpython-35.pyc | Bin 0 -> 11504 bytes .../gis/geos/__pycache__/point.cpython-35.pyc | Bin 0 -> 5154 bytes .../geos/__pycache__/polygon.cpython-35.pyc | Bin 0 -> 6937 bytes .../geos/__pycache__/prepared.cpython-35.pyc | Bin 0 -> 2575 bytes .../django/contrib/gis/geos/base.py | 6 + .../django/contrib/gis/geos/collections.py | 115 + .../django/contrib/gis/geos/coordseq.py | 196 + .../django/contrib/gis/geos/error.py | 3 + .../django/contrib/gis/geos/factory.py | 33 + .../django/contrib/gis/geos/geometry.py | 732 ++ .../django/contrib/gis/geos/io.py | 24 + .../django/contrib/gis/geos/libgeos.py | 175 + .../django/contrib/gis/geos/linestring.py | 175 + .../django/contrib/gis/geos/mutable_list.py | 320 + .../django/contrib/gis/geos/point.py | 151 + .../django/contrib/gis/geos/polygon.py | 179 + .../django/contrib/gis/geos/prepared.py | 49 + .../contrib/gis/geos/prototypes/__init__.py | 25 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1858 bytes .../__pycache__/coordseq.cpython-35.pyc | Bin 0 -> 2994 bytes .../__pycache__/errcheck.cpython-35.pyc | Bin 0 -> 2611 bytes .../__pycache__/geom.cpython-35.pyc | Bin 0 -> 3317 bytes .../prototypes/__pycache__/io.cpython-35.pyc | Bin 0 -> 11257 bytes .../__pycache__/misc.cpython-35.pyc | Bin 0 -> 1333 bytes .../__pycache__/predicates.cpython-35.pyc | Bin 0 -> 1850 bytes .../__pycache__/prepared.cpython-35.pyc | Bin 0 -> 1315 bytes .../__pycache__/threadsafe.cpython-35.pyc | Bin 0 -> 2796 bytes .../__pycache__/topology.cpython-35.pyc | Bin 0 -> 2175 bytes .../contrib/gis/geos/prototypes/coordseq.py | 91 + .../contrib/gis/geos/prototypes/errcheck.py | 83 + .../contrib/gis/geos/prototypes/geom.py | 96 + .../django/contrib/gis/geos/prototypes/io.py | 339 + .../contrib/gis/geos/prototypes/misc.py | 31 + .../contrib/gis/geos/prototypes/predicates.py | 43 + .../contrib/gis/geos/prototypes/prepared.py | 28 + .../contrib/gis/geos/prototypes/threadsafe.py | 77 + .../contrib/gis/geos/prototypes/topology.py | 53 + .../gis/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../gis/locale/af/LC_MESSAGES/django.po | 80 + .../gis/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 2428 bytes .../gis/locale/ar/LC_MESSAGES/django.po | 90 + .../gis/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 850 bytes .../gis/locale/ast/LC_MESSAGES/django.po | 85 + .../gis/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 2013 bytes .../gis/locale/az/LC_MESSAGES/django.po | 88 + .../gis/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 2488 bytes .../gis/locale/be/LC_MESSAGES/django.po | 90 + .../gis/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 2452 bytes .../gis/locale/bg/LC_MESSAGES/django.po | 90 + .../gis/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1070 bytes .../gis/locale/bn/LC_MESSAGES/django.po | 86 + .../gis/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../gis/locale/br/LC_MESSAGES/django.po | 81 + .../gis/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1308 bytes .../gis/locale/bs/LC_MESSAGES/django.po | 88 + .../gis/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 2043 bytes .../gis/locale/ca/LC_MESSAGES/django.po | 93 + .../gis/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 2058 bytes .../gis/locale/cs/LC_MESSAGES/django.po | 90 + .../gis/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1430 bytes .../gis/locale/cy/LC_MESSAGES/django.po | 86 + .../gis/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1934 bytes .../gis/locale/da/LC_MESSAGES/django.po | 89 + .../gis/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1999 bytes .../gis/locale/de/LC_MESSAGES/django.po | 88 + .../gis/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 2109 bytes .../gis/locale/dsb/LC_MESSAGES/django.po | 89 + .../gis/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 2519 bytes .../gis/locale/el/LC_MESSAGES/django.po | 93 + .../gis/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../gis/locale/en/LC_MESSAGES/django.po | 103 + .../gis/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../gis/locale/en_AU/LC_MESSAGES/django.po | 80 + .../gis/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1369 bytes .../gis/locale/en_GB/LC_MESSAGES/django.po | 88 + .../gis/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1960 bytes .../gis/locale/eo/LC_MESSAGES/django.po | 88 + .../gis/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 2056 bytes .../gis/locale/es/LC_MESSAGES/django.po | 93 + .../gis/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 2069 bytes .../gis/locale/es_AR/LC_MESSAGES/django.po | 90 + .../gis/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1865 bytes .../gis/locale/es_CO/LC_MESSAGES/django.po | 92 + .../gis/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1441 bytes .../gis/locale/es_MX/LC_MESSAGES/django.po | 87 + .../gis/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../gis/locale/es_VE/LC_MESSAGES/django.po | 80 + .../gis/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 1961 bytes .../gis/locale/et/LC_MESSAGES/django.po | 90 + .../gis/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1973 bytes .../gis/locale/eu/LC_MESSAGES/django.po | 88 + .../gis/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 2275 bytes .../gis/locale/fa/LC_MESSAGES/django.po | 90 + .../gis/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1946 bytes .../gis/locale/fi/LC_MESSAGES/django.po | 87 + .../gis/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 2082 bytes .../gis/locale/fr/LC_MESSAGES/django.po | 90 + .../gis/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../gis/locale/fy/LC_MESSAGES/django.po | 80 + .../gis/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1420 bytes .../gis/locale/ga/LC_MESSAGES/django.po | 88 + .../gis/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 2142 bytes .../gis/locale/gd/LC_MESSAGES/django.po | 91 + .../gis/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1421 bytes .../gis/locale/gl/LC_MESSAGES/django.po | 89 + .../gis/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 2142 bytes .../gis/locale/he/LC_MESSAGES/django.po | 85 + .../gis/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1818 bytes .../gis/locale/hi/LC_MESSAGES/django.po | 86 + .../gis/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1549 bytes .../gis/locale/hr/LC_MESSAGES/django.po | 91 + .../gis/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 2083 bytes .../gis/locale/hsb/LC_MESSAGES/django.po | 90 + .../gis/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1941 bytes .../gis/locale/hu/LC_MESSAGES/django.po | 90 + .../gis/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1899 bytes .../gis/locale/ia/LC_MESSAGES/django.po | 89 + .../gis/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1983 bytes .../gis/locale/id/LC_MESSAGES/django.po | 92 + .../gis/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../gis/locale/io/LC_MESSAGES/django.po | 80 + .../gis/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1317 bytes .../gis/locale/is/LC_MESSAGES/django.po | 86 + .../gis/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 2009 bytes .../gis/locale/it/LC_MESSAGES/django.po | 93 + .../gis/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 2124 bytes .../gis/locale/ja/LC_MESSAGES/django.po | 88 + .../gis/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1991 bytes .../gis/locale/ka/LC_MESSAGES/django.po | 87 + .../gis/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1349 bytes .../gis/locale/kk/LC_MESSAGES/django.po | 85 + .../gis/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 459 bytes .../gis/locale/km/LC_MESSAGES/django.po | 80 + .../gis/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../gis/locale/kn/LC_MESSAGES/django.po | 80 + .../gis/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1975 bytes .../gis/locale/ko/LC_MESSAGES/django.po | 90 + .../gis/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../gis/locale/lb/LC_MESSAGES/django.po | 80 + .../gis/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 2045 bytes .../gis/locale/lt/LC_MESSAGES/django.po | 90 + .../gis/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 2057 bytes .../gis/locale/lv/LC_MESSAGES/django.po | 88 + .../gis/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 2620 bytes .../gis/locale/mk/LC_MESSAGES/django.po | 93 + .../gis/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 2049 bytes .../gis/locale/ml/LC_MESSAGES/django.po | 88 + .../gis/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 2433 bytes .../gis/locale/mn/LC_MESSAGES/django.po | 93 + .../gis/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../gis/locale/mr/LC_MESSAGES/django.po | 80 + .../gis/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 525 bytes .../gis/locale/my/LC_MESSAGES/django.po | 85 + .../gis/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1930 bytes .../gis/locale/nb/LC_MESSAGES/django.po | 90 + .../gis/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 982 bytes .../gis/locale/ne/LC_MESSAGES/django.po | 84 + .../gis/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1992 bytes .../gis/locale/nl/LC_MESSAGES/django.po | 93 + .../gis/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1202 bytes .../gis/locale/nn/LC_MESSAGES/django.po | 87 + .../gis/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1594 bytes .../gis/locale/os/LC_MESSAGES/django.po | 87 + .../gis/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1265 bytes .../gis/locale/pa/LC_MESSAGES/django.po | 86 + .../gis/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 2138 bytes .../gis/locale/pl/LC_MESSAGES/django.po | 95 + .../gis/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 2036 bytes .../gis/locale/pt/LC_MESSAGES/django.po | 95 + .../gis/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 2011 bytes .../gis/locale/pt_BR/LC_MESSAGES/django.po | 94 + .../gis/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 2047 bytes .../gis/locale/ro/LC_MESSAGES/django.po | 92 + .../gis/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 2583 bytes .../gis/locale/ru/LC_MESSAGES/django.po | 93 + .../gis/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 2010 bytes .../gis/locale/sk/LC_MESSAGES/django.po | 88 + .../gis/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 2067 bytes .../gis/locale/sl/LC_MESSAGES/django.po | 92 + .../gis/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1918 bytes .../gis/locale/sq/LC_MESSAGES/django.po | 89 + .../gis/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 2442 bytes .../gis/locale/sr/LC_MESSAGES/django.po | 89 + .../gis/locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1470 bytes .../gis/locale/sr_Latn/LC_MESSAGES/django.po | 87 + .../gis/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1733 bytes .../gis/locale/sv/LC_MESSAGES/django.po | 89 + .../gis/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1426 bytes .../gis/locale/sw/LC_MESSAGES/django.po | 87 + .../gis/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../gis/locale/ta/LC_MESSAGES/django.po | 80 + .../gis/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 824 bytes .../gis/locale/te/LC_MESSAGES/django.po | 84 + .../gis/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1835 bytes .../gis/locale/th/LC_MESSAGES/django.po | 86 + .../gis/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 2024 bytes .../gis/locale/tr/LC_MESSAGES/django.po | 91 + .../gis/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1470 bytes .../gis/locale/tt/LC_MESSAGES/django.po | 85 + .../gis/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../gis/locale/udm/LC_MESSAGES/django.po | 80 + .../gis/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 2455 bytes .../gis/locale/uk/LC_MESSAGES/django.po | 92 + .../gis/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1410 bytes .../gis/locale/ur/LC_MESSAGES/django.po | 86 + .../gis/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1384 bytes .../gis/locale/vi/LC_MESSAGES/django.po | 87 + .../gis/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1879 bytes .../gis/locale/zh_Hans/LC_MESSAGES/django.po | 91 + .../gis/locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2012 bytes .../gis/locale/zh_Hant/LC_MESSAGES/django.po | 89 + .../__pycache__/inspectdb.cpython-35.pyc | Bin 0 -> 873 bytes .../__pycache__/ogrinspect.cpython-35.pyc | Bin 0 -> 5476 bytes .../gis/management/commands/inspectdb.py | 17 + .../gis/management/commands/ogrinspect.py | 133 + .../django/contrib/gis/measure.py | 333 + .../site-packages/django/contrib/gis/ptr.py | 38 + .../contrib/gis/serializers/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 156 bytes .../__pycache__/geojson.cpython-35.pyc | Bin 0 -> 2990 bytes .../django/contrib/gis/serializers/geojson.py | 67 + .../django/contrib/gis/shortcuts.py | 40 + .../django/contrib/gis/sitemaps/__init__.py | 4 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 279 bytes .../sitemaps/__pycache__/kml.cpython-35.pyc | Bin 0 -> 2723 bytes .../sitemaps/__pycache__/views.cpython-35.pyc | Bin 0 -> 2053 bytes .../django/contrib/gis/sitemaps/kml.py | 70 + .../django/contrib/gis/sitemaps/views.py | 61 + .../django/contrib/gis/static/gis/css/ol3.css | 31 + .../gis/static/gis/img/draw_line_off.svg | 1 + .../gis/static/gis/img/draw_line_on.svg | 1 + .../gis/static/gis/img/draw_point_off.svg | 1 + .../gis/static/gis/img/draw_point_on.svg | 1 + .../gis/static/gis/img/draw_polygon_off.svg | 1 + .../gis/static/gis/img/draw_polygon_on.svg | 1 + .../contrib/gis/static/gis/js/OLMapWidget.js | 231 + .../gis/templates/gis/admin/openlayers.html | 40 + .../gis/templates/gis/admin/openlayers.js | 176 + .../contrib/gis/templates/gis/admin/osm.html | 2 + .../contrib/gis/templates/gis/admin/osm.js | 2 + .../contrib/gis/templates/gis/kml/base.kml | 6 + .../gis/templates/gis/kml/placemarks.kml | 8 + .../gis/templates/gis/openlayers-osm.html | 12 + .../contrib/gis/templates/gis/openlayers.html | 40 + .../django/contrib/gis/utils/__init__.py | 14 + .../utils/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 662 bytes .../__pycache__/layermapping.cpython-35.pyc | Bin 0 -> 16779 bytes .../utils/__pycache__/ogrinfo.cpython-35.pyc | Bin 0 -> 1786 bytes .../__pycache__/ogrinspect.cpython-35.pyc | Bin 0 -> 7695 bytes .../gis/utils/__pycache__/srs.cpython-35.pyc | Bin 0 -> 2547 bytes .../django/contrib/gis/utils/layermapping.py | 627 + .../django/contrib/gis/utils/ogrinfo.py | 51 + .../django/contrib/gis/utils/ogrinspect.py | 237 + .../django/contrib/gis/utils/srs.py | 76 + .../site-packages/django/contrib/gis/views.py | 20 + .../django/contrib/humanize/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 217 bytes .../humanize/__pycache__/apps.cpython-35.pyc | Bin 0 -> 511 bytes .../django/contrib/humanize/apps.py | 7 + .../humanize/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../humanize/locale/af/LC_MESSAGES/django.po | 261 + .../humanize/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 7691 bytes .../humanize/locale/ar/LC_MESSAGES/django.po | 377 + .../humanize/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 3468 bytes .../humanize/locale/ast/LC_MESSAGES/django.po | 262 + .../humanize/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 5216 bytes .../humanize/locale/az/LC_MESSAGES/django.po | 398 + .../humanize/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 6681 bytes .../humanize/locale/be/LC_MESSAGES/django.po | 320 + .../humanize/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 4645 bytes .../humanize/locale/bg/LC_MESSAGES/django.po | 265 + .../humanize/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 4026 bytes .../humanize/locale/bn/LC_MESSAGES/django.po | 263 + .../humanize/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 5850 bytes .../humanize/locale/br/LC_MESSAGES/django.po | 518 + .../humanize/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1416 bytes .../humanize/locale/bs/LC_MESSAGES/django.po | 292 + .../humanize/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3849 bytes .../humanize/locale/ca/LC_MESSAGES/django.po | 398 + .../humanize/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 6846 bytes .../humanize/locale/cs/LC_MESSAGES/django.po | 477 + .../humanize/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 5241 bytes .../humanize/locale/cy/LC_MESSAGES/django.po | 318 + .../humanize/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 5339 bytes .../humanize/locale/da/LC_MESSAGES/django.po | 397 + .../humanize/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 5418 bytes .../humanize/locale/de/LC_MESSAGES/django.po | 396 + .../humanize/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 7036 bytes .../humanize/locale/dsb/LC_MESSAGES/django.po | 476 + .../humanize/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 6740 bytes .../humanize/locale/el/LC_MESSAGES/django.po | 399 + .../humanize/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../humanize/locale/en/LC_MESSAGES/django.po | 458 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 261 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 3461 bytes .../locale/en_GB/LC_MESSAGES/django.po | 263 + .../humanize/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 5386 bytes .../humanize/locale/eo/LC_MESSAGES/django.po | 395 + .../humanize/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 4183 bytes .../humanize/locale/es/LC_MESSAGES/django.po | 267 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 5502 bytes .../locale/es_AR/LC_MESSAGES/django.po | 399 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 4203 bytes .../locale/es_CO/LC_MESSAGES/django.po | 267 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 3939 bytes .../locale/es_MX/LC_MESSAGES/django.po | 264 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 942 bytes .../locale/es_VE/LC_MESSAGES/django.po | 262 + .../humanize/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 4197 bytes .../humanize/locale/et/LC_MESSAGES/django.po | 265 + .../humanize/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 5287 bytes .../humanize/locale/eu/LC_MESSAGES/django.po | 398 + .../humanize/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 5808 bytes .../humanize/locale/fa/LC_MESSAGES/django.po | 401 + .../humanize/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 4177 bytes .../humanize/locale/fi/LC_MESSAGES/django.po | 265 + .../humanize/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 5510 bytes .../humanize/locale/fr/LC_MESSAGES/django.po | 397 + .../humanize/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../humanize/locale/fy/LC_MESSAGES/django.po | 261 + .../humanize/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 4929 bytes .../humanize/locale/ga/LC_MESSAGES/django.po | 347 + .../humanize/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 7232 bytes .../humanize/locale/gd/LC_MESSAGES/django.po | 477 + .../humanize/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 3474 bytes .../humanize/locale/gl/LC_MESSAGES/django.po | 265 + .../humanize/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 4525 bytes .../humanize/locale/he/LC_MESSAGES/django.po | 263 + .../humanize/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 4131 bytes .../humanize/locale/hi/LC_MESSAGES/django.po | 263 + .../humanize/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1274 bytes .../humanize/locale/hr/LC_MESSAGES/django.po | 291 + .../humanize/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 7146 bytes .../humanize/locale/hsb/LC_MESSAGES/django.po | 476 + .../humanize/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 5348 bytes .../humanize/locale/hu/LC_MESSAGES/django.po | 398 + .../humanize/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 1058 bytes .../humanize/locale/hy/LC_MESSAGES/django.po | 262 + .../humanize/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 4167 bytes .../humanize/locale/ia/LC_MESSAGES/django.po | 262 + .../humanize/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 4665 bytes .../humanize/locale/id/LC_MESSAGES/django.po | 359 + .../humanize/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 464 bytes .../humanize/locale/io/LC_MESSAGES/django.po | 261 + .../humanize/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 3805 bytes .../humanize/locale/is/LC_MESSAGES/django.po | 399 + .../humanize/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 5981 bytes .../humanize/locale/it/LC_MESSAGES/django.po | 404 + .../humanize/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 4840 bytes .../humanize/locale/ja/LC_MESSAGES/django.po | 357 + .../humanize/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 4139 bytes .../humanize/locale/ka/LC_MESSAGES/django.po | 235 + .../humanize/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 2106 bytes .../humanize/locale/kk/LC_MESSAGES/django.po | 234 + .../humanize/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 459 bytes .../humanize/locale/km/LC_MESSAGES/django.po | 233 + .../humanize/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 461 bytes .../humanize/locale/kn/LC_MESSAGES/django.po | 233 + .../humanize/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 3781 bytes .../humanize/locale/ko/LC_MESSAGES/django.po | 358 + .../humanize/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../humanize/locale/lb/LC_MESSAGES/django.po | 261 + .../humanize/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 7374 bytes .../humanize/locale/lt/LC_MESSAGES/django.po | 478 + .../humanize/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 6252 bytes .../humanize/locale/lv/LC_MESSAGES/django.po | 440 + .../humanize/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 4761 bytes .../humanize/locale/mk/LC_MESSAGES/django.po | 262 + .../humanize/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 5077 bytes .../humanize/locale/ml/LC_MESSAGES/django.po | 263 + .../humanize/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 4613 bytes .../humanize/locale/mn/LC_MESSAGES/django.po | 265 + .../humanize/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../humanize/locale/mr/LC_MESSAGES/django.po | 261 + .../humanize/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 3479 bytes .../humanize/locale/my/LC_MESSAGES/django.po | 234 + .../humanize/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 5358 bytes .../humanize/locale/nb/LC_MESSAGES/django.po | 398 + .../humanize/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 2285 bytes .../humanize/locale/ne/LC_MESSAGES/django.po | 261 + .../humanize/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 4092 bytes .../humanize/locale/nl/LC_MESSAGES/django.po | 265 + .../humanize/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 3482 bytes .../humanize/locale/nn/LC_MESSAGES/django.po | 263 + .../humanize/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 3902 bytes .../humanize/locale/os/LC_MESSAGES/django.po | 262 + .../humanize/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 1569 bytes .../humanize/locale/pa/LC_MESSAGES/django.po | 263 + .../humanize/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 7018 bytes .../humanize/locale/pl/LC_MESSAGES/django.po | 483 + .../humanize/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 4154 bytes .../humanize/locale/pt/LC_MESSAGES/django.po | 265 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 5425 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 401 + .../humanize/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 6229 bytes .../humanize/locale/ro/LC_MESSAGES/django.po | 441 + .../humanize/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 7859 bytes .../humanize/locale/ru/LC_MESSAGES/django.po | 484 + .../humanize/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 6930 bytes .../humanize/locale/sk/LC_MESSAGES/django.po | 478 + .../humanize/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 5430 bytes .../humanize/locale/sl/LC_MESSAGES/django.po | 323 + .../humanize/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 4912 bytes .../humanize/locale/sq/LC_MESSAGES/django.po | 396 + .../humanize/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 7246 bytes .../humanize/locale/sr/LC_MESSAGES/django.po | 436 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 562 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 290 + .../humanize/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 4097 bytes .../humanize/locale/sv/LC_MESSAGES/django.po | 265 + .../humanize/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 4146 bytes .../humanize/locale/sw/LC_MESSAGES/django.po | 262 + .../humanize/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 466 bytes .../humanize/locale/ta/LC_MESSAGES/django.po | 261 + .../humanize/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 1327 bytes .../humanize/locale/te/LC_MESSAGES/django.po | 262 + .../humanize/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 3922 bytes .../humanize/locale/th/LC_MESSAGES/django.po | 237 + .../humanize/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 5304 bytes .../humanize/locale/tr/LC_MESSAGES/django.po | 400 + .../humanize/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 3243 bytes .../humanize/locale/tt/LC_MESSAGES/django.po | 233 + .../humanize/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../humanize/locale/udm/LC_MESSAGES/django.po | 233 + .../humanize/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 8854 bytes .../humanize/locale/uk/LC_MESSAGES/django.po | 483 + .../humanize/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1347 bytes .../humanize/locale/ur/LC_MESSAGES/django.po | 261 + .../humanize/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 3646 bytes .../humanize/locale/vi/LC_MESSAGES/django.po | 235 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 3573 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 239 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 3314 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 238 + .../contrib/humanize/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 162 bytes .../__pycache__/humanize.cpython-35.pyc | Bin 0 -> 8123 bytes .../contrib/humanize/templatetags/humanize.py | 292 + .../django/contrib/messages/__init__.py | 4 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 315 bytes .../messages/__pycache__/api.cpython-35.pyc | Bin 0 -> 3254 bytes .../messages/__pycache__/apps.cpython-35.pyc | Bin 0 -> 511 bytes .../__pycache__/constants.cpython-35.pyc | Bin 0 -> 433 bytes .../context_processors.cpython-35.pyc | Bin 0 -> 561 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 1256 bytes .../messages/__pycache__/utils.cpython-35.pyc | Bin 0 -> 472 bytes .../messages/__pycache__/views.cpython-35.pyc | Bin 0 -> 931 bytes .../django/contrib/messages/api.py | 96 + .../django/contrib/messages/apps.py | 7 + .../django/contrib/messages/constants.py | 21 + .../contrib/messages/context_processors.py | 13 + .../django/contrib/messages/middleware.py | 26 + .../contrib/messages/storage/__init__.py | 12 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 632 bytes .../storage/__pycache__/base.cpython-35.pyc | Bin 0 -> 6709 bytes .../storage/__pycache__/cookie.cpython-35.pyc | Bin 0 -> 6369 bytes .../__pycache__/fallback.cpython-35.pyc | Bin 0 -> 2107 bytes .../__pycache__/session.cpython-35.pyc | Bin 0 -> 2308 bytes .../django/contrib/messages/storage/base.py | 170 + .../django/contrib/messages/storage/cookie.py | 166 + .../contrib/messages/storage/fallback.py | 54 + .../contrib/messages/storage/session.py | 48 + .../django/contrib/messages/utils.py | 12 + .../django/contrib/messages/views.py | 18 + .../django/contrib/postgres/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 217 bytes .../postgres/__pycache__/apps.cpython-35.pyc | Bin 0 -> 1714 bytes .../__pycache__/functions.cpython-35.pyc | Bin 0 -> 676 bytes .../__pycache__/indexes.cpython-35.pyc | Bin 0 -> 3980 bytes .../__pycache__/lookups.cpython-35.pyc | Bin 0 -> 3554 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 3709 bytes .../__pycache__/search.cpython-35.pyc | Bin 0 -> 9401 bytes .../__pycache__/signals.cpython-35.pyc | Bin 0 -> 1903 bytes .../postgres/__pycache__/utils.cpython-35.pyc | Bin 0 -> 1243 bytes .../__pycache__/validators.cpython-35.pyc | Bin 0 -> 3382 bytes .../contrib/postgres/aggregates/__init__.py | 2 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 210 bytes .../__pycache__/general.cpython-35.pyc | Bin 0 -> 2798 bytes .../__pycache__/statistics.cpython-35.pyc | Bin 0 -> 3318 bytes .../contrib/postgres/aggregates/general.py | 63 + .../contrib/postgres/aggregates/statistics.py | 69 + .../django/contrib/postgres/apps.py | 35 + .../contrib/postgres/fields/__init__.py | 5 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 259 bytes .../fields/__pycache__/array.cpython-35.pyc | Bin 0 -> 12246 bytes .../fields/__pycache__/citext.cpython-35.pyc | Bin 0 -> 1195 bytes .../fields/__pycache__/hstore.cpython-35.pyc | Bin 0 -> 4564 bytes .../fields/__pycache__/jsonb.cpython-35.pyc | Bin 0 -> 7481 bytes .../fields/__pycache__/mixins.cpython-35.pyc | Bin 0 -> 1181 bytes .../fields/__pycache__/ranges.cpython-35.pyc | Bin 0 -> 9245 bytes .../fields/__pycache__/utils.cpython-35.pyc | Bin 0 -> 475 bytes .../django/contrib/postgres/fields/array.py | 303 + .../django/contrib/postgres/fields/citext.py | 24 + .../django/contrib/postgres/fields/hstore.py | 112 + .../django/contrib/postgres/fields/jsonb.py | 188 + .../django/contrib/postgres/fields/mixins.py | 29 + .../django/contrib/postgres/fields/ranges.py | 252 + .../django/contrib/postgres/fields/utils.py | 3 + .../django/contrib/postgres/forms/__init__.py | 4 + .../forms/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 238 bytes .../forms/__pycache__/array.cpython-35.pyc | Bin 0 -> 8084 bytes .../forms/__pycache__/hstore.cpython-35.pyc | Bin 0 -> 1754 bytes .../forms/__pycache__/jsonb.cpython-35.pyc | Bin 0 -> 2103 bytes .../forms/__pycache__/ranges.cpython-35.pyc | Bin 0 -> 3552 bytes .../django/contrib/postgres/forms/array.py | 214 + .../django/contrib/postgres/forms/hstore.py | 58 + .../django/contrib/postgres/forms/jsonb.py | 62 + .../django/contrib/postgres/forms/ranges.py | 95 + .../django/contrib/postgres/functions.py | 11 + .../django/contrib/postgres/indexes.py | 100 + .../jinja2/postgres/widgets/split_array.html | 1 + .../postgres/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 4416 bytes .../postgres/locale/ar/LC_MESSAGES/django.po | 140 + .../postgres/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 3132 bytes .../postgres/locale/az/LC_MESSAGES/django.po | 112 + .../postgres/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 4490 bytes .../postgres/locale/be/LC_MESSAGES/django.po | 132 + .../postgres/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 3439 bytes .../postgres/locale/bg/LC_MESSAGES/django.po | 119 + .../postgres/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 3167 bytes .../postgres/locale/ca/LC_MESSAGES/django.po | 120 + .../postgres/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 3686 bytes .../postgres/locale/cs/LC_MESSAGES/django.po | 129 + .../postgres/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 3167 bytes .../postgres/locale/da/LC_MESSAGES/django.po | 120 + .../postgres/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 3282 bytes .../postgres/locale/de/LC_MESSAGES/django.po | 117 + .../postgres/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 3853 bytes .../postgres/locale/dsb/LC_MESSAGES/django.po | 131 + .../postgres/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 3917 bytes .../postgres/locale/el/LC_MESSAGES/django.po | 120 + .../postgres/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../postgres/locale/en/LC_MESSAGES/django.po | 128 + .../postgres/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 3149 bytes .../postgres/locale/eo/LC_MESSAGES/django.po | 119 + .../postgres/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 3177 bytes .../postgres/locale/es/LC_MESSAGES/django.po | 122 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 3178 bytes .../locale/es_AR/LC_MESSAGES/django.po | 118 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 2903 bytes .../locale/es_CO/LC_MESSAGES/django.po | 122 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 882 bytes .../locale/es_MX/LC_MESSAGES/django.po | 108 + .../postgres/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 3081 bytes .../postgres/locale/et/LC_MESSAGES/django.po | 120 + .../postgres/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 3133 bytes .../postgres/locale/eu/LC_MESSAGES/django.po | 118 + .../postgres/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 3614 bytes .../postgres/locale/fa/LC_MESSAGES/django.po | 117 + .../postgres/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 3212 bytes .../postgres/locale/fi/LC_MESSAGES/django.po | 120 + .../postgres/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 3393 bytes .../postgres/locale/fr/LC_MESSAGES/django.po | 119 + .../postgres/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 3828 bytes .../postgres/locale/gd/LC_MESSAGES/django.po | 135 + .../postgres/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 722 bytes .../postgres/locale/gl/LC_MESSAGES/django.po | 108 + .../postgres/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 3496 bytes .../postgres/locale/he/LC_MESSAGES/django.po | 111 + .../postgres/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1217 bytes .../postgres/locale/hr/LC_MESSAGES/django.po | 112 + .../postgres/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 3767 bytes .../postgres/locale/hsb/LC_MESSAGES/django.po | 129 + .../postgres/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 3185 bytes .../postgres/locale/hu/LC_MESSAGES/django.po | 118 + .../postgres/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 758 bytes .../postgres/locale/ia/LC_MESSAGES/django.po | 108 + .../postgres/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 3035 bytes .../postgres/locale/id/LC_MESSAGES/django.po | 118 + .../postgres/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 3212 bytes .../postgres/locale/is/LC_MESSAGES/django.po | 118 + .../postgres/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 3243 bytes .../postgres/locale/it/LC_MESSAGES/django.po | 126 + .../postgres/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 3349 bytes .../postgres/locale/ja/LC_MESSAGES/django.po | 110 + .../postgres/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 767 bytes .../postgres/locale/ka/LC_MESSAGES/django.po | 106 + .../postgres/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 868 bytes .../postgres/locale/kk/LC_MESSAGES/django.po | 105 + .../postgres/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 3194 bytes .../postgres/locale/ko/LC_MESSAGES/django.po | 113 + .../postgres/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 3853 bytes .../postgres/locale/lt/LC_MESSAGES/django.po | 130 + .../postgres/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 3382 bytes .../postgres/locale/lv/LC_MESSAGES/django.po | 125 + .../postgres/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 3717 bytes .../postgres/locale/mk/LC_MESSAGES/django.po | 122 + .../postgres/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 3755 bytes .../postgres/locale/mn/LC_MESSAGES/django.po | 120 + .../postgres/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 3112 bytes .../postgres/locale/nb/LC_MESSAGES/django.po | 117 + .../postgres/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 934 bytes .../postgres/locale/ne/LC_MESSAGES/django.po | 106 + .../postgres/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 3243 bytes .../postgres/locale/nl/LC_MESSAGES/django.po | 121 + .../postgres/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 3734 bytes .../postgres/locale/pl/LC_MESSAGES/django.po | 136 + .../postgres/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 3136 bytes .../postgres/locale/pt/LC_MESSAGES/django.po | 117 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 3190 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 126 + .../postgres/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 3454 bytes .../postgres/locale/ro/LC_MESSAGES/django.po | 129 + .../postgres/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 5119 bytes .../postgres/locale/ru/LC_MESSAGES/django.po | 141 + .../postgres/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 3630 bytes .../postgres/locale/sk/LC_MESSAGES/django.po | 128 + .../postgres/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 3524 bytes .../postgres/locale/sl/LC_MESSAGES/django.po | 130 + .../postgres/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 3192 bytes .../postgres/locale/sq/LC_MESSAGES/django.po | 117 + .../postgres/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 4106 bytes .../postgres/locale/sr/LC_MESSAGES/django.po | 123 + .../postgres/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 2875 bytes .../postgres/locale/sv/LC_MESSAGES/django.po | 120 + .../postgres/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 3162 bytes .../postgres/locale/tr/LC_MESSAGES/django.po | 119 + .../postgres/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 4758 bytes .../postgres/locale/uk/LC_MESSAGES/django.po | 138 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 2854 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 108 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 2864 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 107 + .../django/contrib/postgres/lookups.py | 76 + .../django/contrib/postgres/operations.py | 77 + .../django/contrib/postgres/search.py | 219 + .../django/contrib/postgres/signals.py | 64 + .../postgres/widgets/split_array.html | 1 + .../django/contrib/postgres/utils.py | 29 + .../django/contrib/postgres/validators.py | 76 + .../django/contrib/redirects/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 220 bytes .../__pycache__/admin.cpython-35.pyc | Bin 0 -> 646 bytes .../redirects/__pycache__/apps.cpython-35.pyc | Bin 0 -> 515 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 1906 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 1474 bytes .../django/contrib/redirects/admin.py | 10 + .../django/contrib/redirects/apps.py | 7 + .../redirects/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../redirects/locale/af/LC_MESSAGES/django.po | 42 + .../redirects/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 1342 bytes .../redirects/locale/ar/LC_MESSAGES/django.po | 50 + .../locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 1071 bytes .../locale/ast/LC_MESSAGES/django.po | 50 + .../redirects/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 1157 bytes .../redirects/locale/az/LC_MESSAGES/django.po | 51 + .../redirects/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1437 bytes .../redirects/locale/be/LC_MESSAGES/django.po | 52 + .../redirects/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 1268 bytes .../redirects/locale/bg/LC_MESSAGES/django.po | 52 + .../redirects/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 1319 bytes .../redirects/locale/bn/LC_MESSAGES/django.po | 48 + .../redirects/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 623 bytes .../redirects/locale/br/LC_MESSAGES/django.po | 45 + .../redirects/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 1115 bytes .../redirects/locale/bs/LC_MESSAGES/django.po | 51 + .../redirects/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 1137 bytes .../redirects/locale/ca/LC_MESSAGES/django.po | 52 + .../redirects/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1156 bytes .../redirects/locale/cs/LC_MESSAGES/django.po | 50 + .../redirects/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../redirects/locale/cy/LC_MESSAGES/django.po | 51 + .../redirects/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 1114 bytes .../redirects/locale/da/LC_MESSAGES/django.po | 49 + .../redirects/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 1136 bytes .../redirects/locale/de/LC_MESSAGES/django.po | 50 + .../locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 1242 bytes .../locale/dsb/LC_MESSAGES/django.po | 51 + .../redirects/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 1384 bytes .../redirects/locale/el/LC_MESSAGES/django.po | 51 + .../redirects/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../redirects/locale/en/LC_MESSAGES/django.po | 50 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 42 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 1053 bytes .../locale/en_GB/LC_MESSAGES/django.po | 50 + .../redirects/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 1138 bytes .../redirects/locale/eo/LC_MESSAGES/django.po | 52 + .../redirects/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 1143 bytes .../redirects/locale/es/LC_MESSAGES/django.po | 52 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 1127 bytes .../locale/es_AR/LC_MESSAGES/django.po | 51 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../locale/es_CO/LC_MESSAGES/django.po | 50 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 1136 bytes .../locale/es_MX/LC_MESSAGES/django.po | 52 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/es_VE/LC_MESSAGES/django.po | 42 + .../redirects/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 1122 bytes .../redirects/locale/et/LC_MESSAGES/django.po | 52 + .../redirects/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 1119 bytes .../redirects/locale/eu/LC_MESSAGES/django.po | 50 + .../redirects/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 1241 bytes .../redirects/locale/fa/LC_MESSAGES/django.po | 49 + .../redirects/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 1158 bytes .../redirects/locale/fi/LC_MESSAGES/django.po | 52 + .../redirects/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 1141 bytes .../redirects/locale/fr/LC_MESSAGES/django.po | 50 + .../redirects/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../redirects/locale/fy/LC_MESSAGES/django.po | 42 + .../redirects/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 1073 bytes .../redirects/locale/ga/LC_MESSAGES/django.po | 47 + .../redirects/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 1252 bytes .../redirects/locale/gd/LC_MESSAGES/django.po | 51 + .../redirects/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 1079 bytes .../redirects/locale/gl/LC_MESSAGES/django.po | 51 + .../redirects/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 1128 bytes .../redirects/locale/he/LC_MESSAGES/django.po | 46 + .../redirects/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 1409 bytes .../redirects/locale/hi/LC_MESSAGES/django.po | 49 + .../redirects/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 1207 bytes .../redirects/locale/hr/LC_MESSAGES/django.po | 52 + .../locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 1236 bytes .../locale/hsb/LC_MESSAGES/django.po | 51 + .../redirects/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 1152 bytes .../redirects/locale/hu/LC_MESSAGES/django.po | 51 + .../redirects/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 1152 bytes .../redirects/locale/ia/LC_MESSAGES/django.po | 50 + .../redirects/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 1098 bytes .../redirects/locale/id/LC_MESSAGES/django.po | 51 + .../redirects/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 1019 bytes .../redirects/locale/io/LC_MESSAGES/django.po | 48 + .../redirects/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 1065 bytes .../redirects/locale/is/LC_MESSAGES/django.po | 49 + .../redirects/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 1105 bytes .../redirects/locale/it/LC_MESSAGES/django.po | 52 + .../redirects/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 1148 bytes .../redirects/locale/ja/LC_MESSAGES/django.po | 47 + .../redirects/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 1511 bytes .../redirects/locale/ka/LC_MESSAGES/django.po | 50 + .../locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 699 bytes .../locale/kab/LC_MESSAGES/django.po | 45 + .../redirects/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 1261 bytes .../redirects/locale/kk/LC_MESSAGES/django.po | 48 + .../redirects/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 1248 bytes .../redirects/locale/km/LC_MESSAGES/django.po | 47 + .../redirects/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 1396 bytes .../redirects/locale/kn/LC_MESSAGES/django.po | 48 + .../redirects/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 1112 bytes .../redirects/locale/ko/LC_MESSAGES/django.po | 48 + .../redirects/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../redirects/locale/lb/LC_MESSAGES/django.po | 42 + .../redirects/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 1191 bytes .../redirects/locale/lt/LC_MESSAGES/django.po | 52 + .../redirects/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 1179 bytes .../redirects/locale/lv/LC_MESSAGES/django.po | 52 + .../redirects/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 1353 bytes .../redirects/locale/mk/LC_MESSAGES/django.po | 52 + .../redirects/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 1331 bytes .../redirects/locale/ml/LC_MESSAGES/django.po | 47 + .../redirects/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 1274 bytes .../redirects/locale/mn/LC_MESSAGES/django.po | 52 + .../redirects/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../redirects/locale/mr/LC_MESSAGES/django.po | 42 + .../redirects/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 549 bytes .../redirects/locale/my/LC_MESSAGES/django.po | 46 + .../redirects/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../redirects/locale/nb/LC_MESSAGES/django.po | 53 + .../redirects/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 1420 bytes .../redirects/locale/ne/LC_MESSAGES/django.po | 47 + .../redirects/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 1114 bytes .../redirects/locale/nl/LC_MESSAGES/django.po | 51 + .../redirects/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 1072 bytes .../redirects/locale/nn/LC_MESSAGES/django.po | 49 + .../redirects/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 1150 bytes .../redirects/locale/os/LC_MESSAGES/django.po | 49 + .../redirects/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 748 bytes .../redirects/locale/pa/LC_MESSAGES/django.po | 47 + .../redirects/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 1279 bytes .../redirects/locale/pl/LC_MESSAGES/django.po | 53 + .../redirects/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 1129 bytes .../redirects/locale/pt/LC_MESSAGES/django.po | 52 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 1162 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 53 + .../redirects/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 1222 bytes .../redirects/locale/ro/LC_MESSAGES/django.po | 53 + .../redirects/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1456 bytes .../redirects/locale/ru/LC_MESSAGES/django.po | 53 + .../redirects/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 1160 bytes .../redirects/locale/sk/LC_MESSAGES/django.po | 51 + .../redirects/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 1173 bytes .../redirects/locale/sl/LC_MESSAGES/django.po | 52 + .../redirects/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 1125 bytes .../redirects/locale/sq/LC_MESSAGES/django.po | 51 + .../redirects/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 1350 bytes .../redirects/locale/sr/LC_MESSAGES/django.po | 52 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 51 + .../redirects/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 1147 bytes .../redirects/locale/sv/LC_MESSAGES/django.po | 52 + .../redirects/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 1078 bytes .../redirects/locale/sw/LC_MESSAGES/django.po | 49 + .../redirects/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 1502 bytes .../redirects/locale/ta/LC_MESSAGES/django.po | 49 + .../redirects/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 467 bytes .../redirects/locale/te/LC_MESSAGES/django.po | 42 + .../redirects/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 1331 bytes .../redirects/locale/th/LC_MESSAGES/django.po | 46 + .../redirects/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 1124 bytes .../redirects/locale/tr/LC_MESSAGES/django.po | 53 + .../redirects/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 1178 bytes .../redirects/locale/tt/LC_MESSAGES/django.po | 48 + .../locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../locale/udm/LC_MESSAGES/django.po | 42 + .../redirects/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 1414 bytes .../redirects/locale/uk/LC_MESSAGES/django.po | 54 + .../redirects/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 1138 bytes .../redirects/locale/ur/LC_MESSAGES/django.po | 46 + .../redirects/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 592 bytes .../redirects/locale/uz/LC_MESSAGES/django.po | 45 + .../redirects/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 1106 bytes .../redirects/locale/vi/LC_MESSAGES/django.po | 49 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 1093 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 49 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 1096 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 48 + .../django/contrib/redirects/middleware.py | 50 + .../redirects/migrations/0001_initial.py | 40 + .../contrib/redirects/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1349 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 161 bytes .../django/contrib/redirects/models.py | 29 + .../django/contrib/sessions/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 217 bytes .../sessions/__pycache__/apps.cpython-35.pyc | Bin 0 -> 511 bytes .../__pycache__/base_session.cpython-35.pyc | Bin 0 -> 2319 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 643 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 2708 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 1854 bytes .../__pycache__/serializers.cpython-35.pyc | Bin 0 -> 848 bytes .../django/contrib/sessions/apps.py | 7 + .../contrib/sessions/backends/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 158 bytes .../backends/__pycache__/base.cpython-35.pyc | Bin 0 -> 13052 bytes .../backends/__pycache__/cache.cpython-35.pyc | Bin 0 -> 2697 bytes .../__pycache__/cached_db.cpython-35.pyc | Bin 0 -> 2476 bytes .../backends/__pycache__/db.cpython-35.pyc | Bin 0 -> 4216 bytes .../backends/__pycache__/file.cpython-35.pyc | Bin 0 -> 5824 bytes .../__pycache__/signed_cookies.cpython-35.pyc | Bin 0 -> 3231 bytes .../django/contrib/sessions/backends/base.py | 349 + .../django/contrib/sessions/backends/cache.py | 81 + .../contrib/sessions/backends/cached_db.py | 65 + .../django/contrib/sessions/backends/db.py | 109 + .../django/contrib/sessions/backends/file.py | 202 + .../sessions/backends/signed_cookies.py | 82 + .../django/contrib/sessions/base_session.py | 47 + .../django/contrib/sessions/exceptions.py | 11 + .../sessions/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../sessions/locale/af/LC_MESSAGES/django.po | 35 + .../sessions/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 846 bytes .../sessions/locale/ar/LC_MESSAGES/django.po | 37 + .../sessions/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 702 bytes .../sessions/locale/ast/LC_MESSAGES/django.po | 36 + .../sessions/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 731 bytes .../sessions/locale/az/LC_MESSAGES/django.po | 37 + .../sessions/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 895 bytes .../sessions/locale/be/LC_MESSAGES/django.po | 38 + .../sessions/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 783 bytes .../sessions/locale/bg/LC_MESSAGES/django.po | 37 + .../sessions/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 762 bytes .../sessions/locale/bn/LC_MESSAGES/django.po | 36 + .../sessions/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 536 bytes .../sessions/locale/br/LC_MESSAGES/django.po | 35 + .../sessions/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/bs/LC_MESSAGES/django.po | 37 + .../sessions/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 738 bytes .../sessions/locale/ca/LC_MESSAGES/django.po | 37 + .../sessions/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 747 bytes .../sessions/locale/cs/LC_MESSAGES/django.po | 36 + .../sessions/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 774 bytes .../sessions/locale/cy/LC_MESSAGES/django.po | 37 + .../sessions/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 722 bytes .../sessions/locale/da/LC_MESSAGES/django.po | 36 + .../sessions/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 721 bytes .../sessions/locale/de/LC_MESSAGES/django.po | 35 + .../sessions/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sessions/locale/dsb/LC_MESSAGES/django.po | 37 + .../sessions/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sessions/locale/el/LC_MESSAGES/django.po | 36 + .../sessions/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../sessions/locale/en/LC_MESSAGES/django.po | 38 + .../locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/en_AU/LC_MESSAGES/django.po | 35 + .../locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../locale/en_GB/LC_MESSAGES/django.po | 36 + .../sessions/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sessions/locale/eo/LC_MESSAGES/django.po | 37 + .../sessions/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 734 bytes .../sessions/locale/es/LC_MESSAGES/django.po | 37 + .../locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 735 bytes .../locale/es_AR/LC_MESSAGES/django.po | 37 + .../locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 754 bytes .../locale/es_CO/LC_MESSAGES/django.po | 36 + .../locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 756 bytes .../locale/es_MX/LC_MESSAGES/django.po | 37 + .../locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../locale/es_VE/LC_MESSAGES/django.po | 35 + .../sessions/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 737 bytes .../sessions/locale/et/LC_MESSAGES/django.po | 37 + .../sessions/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 728 bytes .../sessions/locale/eu/LC_MESSAGES/django.po | 36 + .../sessions/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 755 bytes .../sessions/locale/fa/LC_MESSAGES/django.po | 37 + .../sessions/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 721 bytes .../sessions/locale/fi/LC_MESSAGES/django.po | 37 + .../sessions/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 733 bytes .../sessions/locale/fr/LC_MESSAGES/django.po | 36 + .../sessions/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../sessions/locale/fy/LC_MESSAGES/django.po | 35 + .../sessions/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 747 bytes .../sessions/locale/ga/LC_MESSAGES/django.po | 36 + .../sessions/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sessions/locale/gd/LC_MESSAGES/django.po | 37 + .../sessions/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 701 bytes .../sessions/locale/gl/LC_MESSAGES/django.po | 37 + .../sessions/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sessions/locale/he/LC_MESSAGES/django.po | 36 + .../sessions/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 759 bytes .../sessions/locale/hi/LC_MESSAGES/django.po | 36 + .../sessions/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 819 bytes .../sessions/locale/hr/LC_MESSAGES/django.po | 38 + .../sessions/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 805 bytes .../sessions/locale/hsb/LC_MESSAGES/django.po | 37 + .../sessions/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 727 bytes .../sessions/locale/hu/LC_MESSAGES/django.po | 37 + .../sessions/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 744 bytes .../sessions/locale/ia/LC_MESSAGES/django.po | 36 + .../sessions/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 705 bytes .../sessions/locale/id/LC_MESSAGES/django.po | 38 + .../sessions/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 683 bytes .../sessions/locale/io/LC_MESSAGES/django.po | 35 + .../sessions/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../sessions/locale/is/LC_MESSAGES/django.po | 36 + .../sessions/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 726 bytes .../sessions/locale/it/LC_MESSAGES/django.po | 37 + .../sessions/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 757 bytes .../sessions/locale/ja/LC_MESSAGES/django.po | 37 + .../sessions/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 803 bytes .../sessions/locale/ka/LC_MESSAGES/django.po | 36 + .../sessions/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 743 bytes .../sessions/locale/kab/LC_MESSAGES/django.po | 35 + .../sessions/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sessions/locale/kk/LC_MESSAGES/django.po | 37 + .../sessions/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 929 bytes .../sessions/locale/km/LC_MESSAGES/django.po | 35 + .../sessions/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sessions/locale/kn/LC_MESSAGES/django.po | 36 + .../sessions/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 700 bytes .../sessions/locale/ko/LC_MESSAGES/django.po | 36 + .../sessions/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../sessions/locale/lb/LC_MESSAGES/django.po | 35 + .../sessions/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sessions/locale/lt/LC_MESSAGES/django.po | 38 + .../sessions/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 753 bytes .../sessions/locale/lv/LC_MESSAGES/django.po | 38 + .../sessions/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 816 bytes .../sessions/locale/mk/LC_MESSAGES/django.po | 37 + .../sessions/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 780 bytes .../sessions/locale/ml/LC_MESSAGES/django.po | 36 + .../sessions/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 784 bytes .../sessions/locale/mn/LC_MESSAGES/django.po | 38 + .../sessions/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../sessions/locale/mr/LC_MESSAGES/django.po | 35 + .../sessions/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 872 bytes .../sessions/locale/my/LC_MESSAGES/django.po | 36 + .../sessions/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 717 bytes .../sessions/locale/nb/LC_MESSAGES/django.po | 38 + .../sessions/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 802 bytes .../sessions/locale/ne/LC_MESSAGES/django.po | 36 + .../sessions/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 733 bytes .../sessions/locale/nl/LC_MESSAGES/django.po | 36 + .../sessions/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 695 bytes .../sessions/locale/nn/LC_MESSAGES/django.po | 36 + .../sessions/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 732 bytes .../sessions/locale/os/LC_MESSAGES/django.po | 36 + .../sessions/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 771 bytes .../sessions/locale/pa/LC_MESSAGES/django.po | 36 + .../sessions/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 869 bytes .../sessions/locale/pl/LC_MESSAGES/django.po | 39 + .../sessions/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 738 bytes .../sessions/locale/pt/LC_MESSAGES/django.po | 37 + .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 757 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 37 + .../sessions/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 776 bytes .../sessions/locale/ro/LC_MESSAGES/django.po | 39 + .../sessions/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 913 bytes .../sessions/locale/ru/LC_MESSAGES/django.po | 39 + .../sessions/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 766 bytes .../sessions/locale/sk/LC_MESSAGES/django.po | 36 + .../sessions/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 770 bytes .../sessions/locale/sl/LC_MESSAGES/django.po | 38 + .../sessions/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 724 bytes .../sessions/locale/sq/LC_MESSAGES/django.po | 36 + .../sessions/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 855 bytes .../sessions/locale/sr/LC_MESSAGES/django.po | 38 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 787 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 37 + .../sessions/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 707 bytes .../sessions/locale/sv/LC_MESSAGES/django.po | 37 + .../sessions/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 743 bytes .../sessions/locale/sw/LC_MESSAGES/django.po | 36 + .../sessions/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 801 bytes .../sessions/locale/ta/LC_MESSAGES/django.po | 35 + .../sessions/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sessions/locale/te/LC_MESSAGES/django.po | 36 + .../sessions/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sessions/locale/th/LC_MESSAGES/django.po | 36 + .../sessions/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 726 bytes .../sessions/locale/tr/LC_MESSAGES/django.po | 37 + .../sessions/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 806 bytes .../sessions/locale/tt/LC_MESSAGES/django.po | 36 + .../sessions/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../sessions/locale/udm/LC_MESSAGES/django.po | 35 + .../sessions/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 841 bytes .../sessions/locale/uk/LC_MESSAGES/django.po | 38 + .../sessions/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 729 bytes .../sessions/locale/ur/LC_MESSAGES/django.po | 35 + .../sessions/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 744 bytes .../sessions/locale/uz/LC_MESSAGES/django.po | 35 + .../sessions/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 679 bytes .../sessions/locale/vi/LC_MESSAGES/django.po | 38 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 722 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 37 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 733 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 37 + .../__pycache__/clearsessions.cpython-35.pyc | Bin 0 -> 1000 bytes .../management/commands/clearsessions.py | 19 + .../django/contrib/sessions/middleware.py | 74 + .../sessions/migrations/0001_initial.py | 30 + .../contrib/sessions/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1049 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 160 bytes .../django/contrib/sessions/models.py | 35 + .../django/contrib/sessions/serializers.py | 18 + .../django/contrib/sitemaps/__init__.py | 162 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 5187 bytes .../sitemaps/__pycache__/apps.cpython-35.pyc | Bin 0 -> 512 bytes .../sitemaps/__pycache__/views.cpython-35.pyc | Bin 0 -> 2788 bytes .../django/contrib/sitemaps/apps.py | 7 + .../__pycache__/ping_google.cpython-35.pyc | Bin 0 -> 901 bytes .../management/commands/ping_google.py | 12 + .../contrib/sitemaps/templates/sitemap.xml | 13 + .../sitemaps/templates/sitemap_index.xml | 4 + .../django/contrib/sitemaps/views.py | 92 + .../django/contrib/sites/__init__.py | 1 + .../sites/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 208 bytes .../sites/__pycache__/admin.cpython-35.pyc | Bin 0 -> 542 bytes .../sites/__pycache__/apps.cpython-35.pyc | Bin 0 -> 787 bytes .../__pycache__/management.cpython-35.pyc | Bin 0 -> 1267 bytes .../sites/__pycache__/managers.cpython-35.pyc | Bin 0 -> 2252 bytes .../__pycache__/middleware.cpython-35.pyc | Bin 0 -> 713 bytes .../sites/__pycache__/models.cpython-35.pyc | Bin 0 -> 4441 bytes .../sites/__pycache__/requests.cpython-35.pyc | Bin 0 -> 1249 bytes .../__pycache__/shortcuts.cpython-35.pyc | Bin 0 -> 662 bytes .../django/contrib/sites/admin.py | 8 + .../django/contrib/sites/apps.py | 13 + .../sites/locale/af/LC_MESSAGES/django.mo | Bin 0 -> 470 bytes .../sites/locale/af/LC_MESSAGES/django.po | 35 + .../sites/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 947 bytes .../sites/locale/ar/LC_MESSAGES/django.po | 38 + .../sites/locale/ast/LC_MESSAGES/django.mo | Bin 0 -> 774 bytes .../sites/locale/ast/LC_MESSAGES/django.po | 36 + .../sites/locale/az/LC_MESSAGES/django.mo | Bin 0 -> 773 bytes .../sites/locale/az/LC_MESSAGES/django.po | 37 + .../sites/locale/be/LC_MESSAGES/django.mo | Bin 0 -> 1024 bytes .../sites/locale/be/LC_MESSAGES/django.po | 38 + .../sites/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 904 bytes .../sites/locale/bg/LC_MESSAGES/django.po | 38 + .../sites/locale/bn/LC_MESSAGES/django.mo | Bin 0 -> 925 bytes .../sites/locale/bn/LC_MESSAGES/django.po | 37 + .../sites/locale/br/LC_MESSAGES/django.mo | Bin 0 -> 628 bytes .../sites/locale/br/LC_MESSAGES/django.po | 35 + .../sites/locale/bs/LC_MESSAGES/django.mo | Bin 0 -> 692 bytes .../sites/locale/bs/LC_MESSAGES/django.po | 37 + .../sites/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sites/locale/ca/LC_MESSAGES/django.po | 38 + .../sites/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 815 bytes .../sites/locale/cs/LC_MESSAGES/django.po | 36 + .../sites/locale/cy/LC_MESSAGES/django.mo | Bin 0 -> 835 bytes .../sites/locale/cy/LC_MESSAGES/django.po | 37 + .../sites/locale/da/LC_MESSAGES/django.mo | Bin 0 -> 794 bytes .../sites/locale/da/LC_MESSAGES/django.po | 36 + .../sites/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/de/LC_MESSAGES/django.po | 36 + .../sites/locale/dsb/LC_MESSAGES/django.mo | Bin 0 -> 868 bytes .../sites/locale/dsb/LC_MESSAGES/django.po | 37 + .../sites/locale/el/LC_MESSAGES/django.mo | Bin 0 -> 878 bytes .../sites/locale/el/LC_MESSAGES/django.po | 38 + .../sites/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 356 bytes .../sites/locale/en/LC_MESSAGES/django.po | 38 + .../sites/locale/en_AU/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../sites/locale/en_AU/LC_MESSAGES/django.po | 35 + .../sites/locale/en_GB/LC_MESSAGES/django.mo | Bin 0 -> 639 bytes .../sites/locale/en_GB/LC_MESSAGES/django.po | 36 + .../sites/locale/eo/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/eo/LC_MESSAGES/django.po | 38 + .../sites/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 804 bytes .../sites/locale/es/LC_MESSAGES/django.po | 39 + .../sites/locale/es_AR/LC_MESSAGES/django.mo | Bin 0 -> 817 bytes .../sites/locale/es_AR/LC_MESSAGES/django.po | 38 + .../sites/locale/es_CO/LC_MESSAGES/django.mo | Bin 0 -> 825 bytes .../sites/locale/es_CO/LC_MESSAGES/django.po | 36 + .../sites/locale/es_MX/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sites/locale/es_MX/LC_MESSAGES/django.po | 38 + .../sites/locale/es_VE/LC_MESSAGES/django.mo | Bin 0 -> 486 bytes .../sites/locale/es_VE/LC_MESSAGES/django.po | 35 + .../sites/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 788 bytes .../sites/locale/et/LC_MESSAGES/django.po | 38 + .../sites/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 807 bytes .../sites/locale/eu/LC_MESSAGES/django.po | 37 + .../sites/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 872 bytes .../sites/locale/fa/LC_MESSAGES/django.po | 38 + .../sites/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 786 bytes .../sites/locale/fi/LC_MESSAGES/django.po | 37 + .../sites/locale/fr/LC_MESSAGES/django.mo | Bin 0 -> 797 bytes .../sites/locale/fr/LC_MESSAGES/django.po | 37 + .../sites/locale/fy/LC_MESSAGES/django.mo | Bin 0 -> 476 bytes .../sites/locale/fy/LC_MESSAGES/django.po | 35 + .../sites/locale/ga/LC_MESSAGES/django.mo | Bin 0 -> 668 bytes .../sites/locale/ga/LC_MESSAGES/django.po | 36 + .../sites/locale/gd/LC_MESSAGES/django.mo | Bin 0 -> 858 bytes .../sites/locale/gd/LC_MESSAGES/django.po | 37 + .../sites/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 742 bytes .../sites/locale/gl/LC_MESSAGES/django.po | 37 + .../sites/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 820 bytes .../sites/locale/he/LC_MESSAGES/django.po | 36 + .../sites/locale/hi/LC_MESSAGES/django.mo | Bin 0 -> 665 bytes .../sites/locale/hi/LC_MESSAGES/django.po | 35 + .../sites/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 876 bytes .../sites/locale/hr/LC_MESSAGES/django.po | 38 + .../sites/locale/hsb/LC_MESSAGES/django.mo | Bin 0 -> 863 bytes .../sites/locale/hsb/LC_MESSAGES/django.po | 37 + .../sites/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 796 bytes .../sites/locale/hu/LC_MESSAGES/django.po | 37 + .../sites/locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 906 bytes .../sites/locale/hy/LC_MESSAGES/django.po | 36 + .../sites/locale/ia/LC_MESSAGES/django.mo | Bin 0 -> 809 bytes .../sites/locale/ia/LC_MESSAGES/django.po | 36 + .../sites/locale/id/LC_MESSAGES/django.mo | Bin 0 -> 791 bytes .../sites/locale/id/LC_MESSAGES/django.po | 38 + .../sites/locale/io/LC_MESSAGES/django.mo | Bin 0 -> 760 bytes .../sites/locale/io/LC_MESSAGES/django.po | 35 + .../sites/locale/is/LC_MESSAGES/django.mo | Bin 0 -> 812 bytes .../sites/locale/is/LC_MESSAGES/django.po | 37 + .../sites/locale/it/LC_MESSAGES/django.mo | Bin 0 -> 795 bytes .../sites/locale/it/LC_MESSAGES/django.po | 38 + .../sites/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 814 bytes .../sites/locale/ja/LC_MESSAGES/django.po | 37 + .../sites/locale/ka/LC_MESSAGES/django.mo | Bin 0 -> 993 bytes .../sites/locale/ka/LC_MESSAGES/django.po | 37 + .../sites/locale/kab/LC_MESSAGES/django.mo | Bin 0 -> 808 bytes .../sites/locale/kab/LC_MESSAGES/django.po | 35 + .../sites/locale/kk/LC_MESSAGES/django.mo | Bin 0 -> 895 bytes .../sites/locale/kk/LC_MESSAGES/django.po | 36 + .../sites/locale/km/LC_MESSAGES/django.mo | Bin 0 -> 701 bytes .../sites/locale/km/LC_MESSAGES/django.po | 35 + .../sites/locale/kn/LC_MESSAGES/django.mo | Bin 0 -> 676 bytes .../sites/locale/kn/LC_MESSAGES/django.po | 36 + .../sites/locale/ko/LC_MESSAGES/django.mo | Bin 0 -> 807 bytes .../sites/locale/ko/LC_MESSAGES/django.po | 38 + .../sites/locale/lb/LC_MESSAGES/django.mo | Bin 0 -> 474 bytes .../sites/locale/lb/LC_MESSAGES/django.po | 35 + .../sites/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 869 bytes .../sites/locale/lt/LC_MESSAGES/django.po | 40 + .../sites/locale/lv/LC_MESSAGES/django.mo | Bin 0 -> 823 bytes .../sites/locale/lv/LC_MESSAGES/django.po | 39 + .../sites/locale/mk/LC_MESSAGES/django.mo | Bin 0 -> 885 bytes .../sites/locale/mk/LC_MESSAGES/django.po | 37 + .../sites/locale/ml/LC_MESSAGES/django.mo | Bin 0 -> 708 bytes .../sites/locale/ml/LC_MESSAGES/django.po | 36 + .../sites/locale/mn/LC_MESSAGES/django.mo | Bin 0 -> 867 bytes .../sites/locale/mn/LC_MESSAGES/django.po | 39 + .../sites/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 468 bytes .../sites/locale/mr/LC_MESSAGES/django.po | 35 + .../sites/locale/my/LC_MESSAGES/django.mo | Bin 0 -> 961 bytes .../sites/locale/my/LC_MESSAGES/django.po | 36 + .../sites/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 793 bytes .../sites/locale/nb/LC_MESSAGES/django.po | 38 + .../sites/locale/ne/LC_MESSAGES/django.mo | Bin 0 -> 899 bytes .../sites/locale/ne/LC_MESSAGES/django.po | 35 + .../sites/locale/nl/LC_MESSAGES/django.mo | Bin 0 -> 788 bytes .../sites/locale/nl/LC_MESSAGES/django.po | 37 + .../sites/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 633 bytes .../sites/locale/nn/LC_MESSAGES/django.po | 36 + .../sites/locale/os/LC_MESSAGES/django.mo | Bin 0 -> 806 bytes .../sites/locale/os/LC_MESSAGES/django.po | 36 + .../sites/locale/pa/LC_MESSAGES/django.mo | Bin 0 -> 684 bytes .../sites/locale/pa/LC_MESSAGES/django.po | 36 + .../sites/locale/pl/LC_MESSAGES/django.mo | Bin 0 -> 944 bytes .../sites/locale/pl/LC_MESSAGES/django.po | 40 + .../sites/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 797 bytes .../sites/locale/pt/LC_MESSAGES/django.po | 38 + .../sites/locale/pt_BR/LC_MESSAGES/django.mo | Bin 0 -> 824 bytes .../sites/locale/pt_BR/LC_MESSAGES/django.po | 38 + .../sites/locale/ro/LC_MESSAGES/django.mo | Bin 0 -> 857 bytes .../sites/locale/ro/LC_MESSAGES/django.po | 40 + .../sites/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 1016 bytes .../sites/locale/ru/LC_MESSAGES/django.po | 41 + .../sites/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 822 bytes .../sites/locale/sk/LC_MESSAGES/django.po | 37 + .../sites/locale/sl/LC_MESSAGES/django.mo | Bin 0 -> 845 bytes .../sites/locale/sl/LC_MESSAGES/django.po | 39 + .../sites/locale/sq/LC_MESSAGES/django.mo | Bin 0 -> 810 bytes .../sites/locale/sq/LC_MESSAGES/django.po | 36 + .../sites/locale/sr/LC_MESSAGES/django.mo | Bin 0 -> 935 bytes .../sites/locale/sr/LC_MESSAGES/django.po | 38 + .../locale/sr_Latn/LC_MESSAGES/django.mo | Bin 0 -> 714 bytes .../locale/sr_Latn/LC_MESSAGES/django.po | 37 + .../sites/locale/sv/LC_MESSAGES/django.mo | Bin 0 -> 792 bytes .../sites/locale/sv/LC_MESSAGES/django.po | 38 + .../sites/locale/sw/LC_MESSAGES/django.mo | Bin 0 -> 781 bytes .../sites/locale/sw/LC_MESSAGES/django.po | 36 + .../sites/locale/ta/LC_MESSAGES/django.mo | Bin 0 -> 714 bytes .../sites/locale/ta/LC_MESSAGES/django.po | 35 + .../sites/locale/te/LC_MESSAGES/django.mo | Bin 0 -> 687 bytes .../sites/locale/te/LC_MESSAGES/django.po | 35 + .../sites/locale/th/LC_MESSAGES/django.mo | Bin 0 -> 898 bytes .../sites/locale/th/LC_MESSAGES/django.po | 36 + .../sites/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 799 bytes .../sites/locale/tr/LC_MESSAGES/django.po | 39 + .../sites/locale/tt/LC_MESSAGES/django.mo | Bin 0 -> 706 bytes .../sites/locale/tt/LC_MESSAGES/django.po | 36 + .../sites/locale/udm/LC_MESSAGES/django.mo | Bin 0 -> 462 bytes .../sites/locale/udm/LC_MESSAGES/django.po | 35 + .../sites/locale/uk/LC_MESSAGES/django.mo | Bin 0 -> 960 bytes .../sites/locale/uk/LC_MESSAGES/django.po | 39 + .../sites/locale/ur/LC_MESSAGES/django.mo | Bin 0 -> 654 bytes .../sites/locale/ur/LC_MESSAGES/django.po | 35 + .../sites/locale/uz/LC_MESSAGES/django.mo | Bin 0 -> 799 bytes .../sites/locale/uz/LC_MESSAGES/django.po | 35 + .../sites/locale/vi/LC_MESSAGES/django.mo | Bin 0 -> 762 bytes .../sites/locale/vi/LC_MESSAGES/django.po | 38 + .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 0 -> 779 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 37 + .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 0 -> 790 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 39 + .../django/contrib/sites/management.py | 38 + .../django/contrib/sites/managers.py | 60 + .../django/contrib/sites/middleware.py | 12 + .../contrib/sites/migrations/0001_initial.py | 31 + .../migrations/0002_alter_domain_unique.py | 20 + .../contrib/sites/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1111 bytes .../0002_alter_domain_unique.cpython-35.pyc | Bin 0 -> 805 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 157 bytes .../django/contrib/sites/models.py | 121 + .../django/contrib/sites/requests.py | 19 + .../django/contrib/sites/shortcuts.py | 16 + .../django/contrib/staticfiles/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 226 bytes .../__pycache__/apps.cpython-35.pyc | Bin 0 -> 861 bytes .../__pycache__/checks.cpython-35.pyc | Bin 0 -> 554 bytes .../__pycache__/finders.cpython-35.pyc | Bin 0 -> 9852 bytes .../__pycache__/handlers.cpython-35.pyc | Bin 0 -> 3011 bytes .../__pycache__/storage.cpython-35.pyc | Bin 0 -> 15397 bytes .../__pycache__/testing.cpython-35.pyc | Bin 0 -> 763 bytes .../__pycache__/urls.cpython-35.pyc | Bin 0 -> 651 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 1906 bytes .../__pycache__/views.cpython-35.pyc | Bin 0 -> 1463 bytes .../django/contrib/staticfiles/apps.py | 13 + .../django/contrib/staticfiles/checks.py | 14 + .../django/contrib/staticfiles/finders.py | 290 + .../django/contrib/staticfiles/handlers.py | 66 + .../__pycache__/collectstatic.cpython-35.pyc | Bin 0 -> 10021 bytes .../__pycache__/findstatic.cpython-35.pyc | Bin 0 -> 1782 bytes .../__pycache__/runserver.cpython-35.pyc | Bin 0 -> 1585 bytes .../management/commands/collectstatic.py | 354 + .../management/commands/findstatic.py | 43 + .../management/commands/runserver.py | 32 + .../django/contrib/staticfiles/storage.py | 494 + .../staticfiles/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 165 bytes .../__pycache__/staticfiles.cpython-35.pyc | Bin 0 -> 971 bytes .../staticfiles/templatetags/staticfiles.py | 28 + .../django/contrib/staticfiles/testing.py | 13 + .../django/contrib/staticfiles/urls.py | 19 + .../django/contrib/staticfiles/utils.py | 54 + .../django/contrib/staticfiles/views.py | 39 + .../django/contrib/syndication/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 226 bytes .../__pycache__/apps.cpython-35.pyc | Bin 0 -> 523 bytes .../__pycache__/views.cpython-35.pyc | Bin 0 -> 6778 bytes .../django/contrib/syndication/apps.py | 7 + .../django/contrib/syndication/views.py | 218 + .../site-packages/django/core/__init__.py | 0 .../core/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 137 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 6808 bytes .../core/__pycache__/paginator.cpython-35.pyc | Bin 0 -> 6755 bytes .../core/__pycache__/signals.cpython-35.pyc | Bin 0 -> 395 bytes .../core/__pycache__/signing.cpython-35.pyc | Bin 0 -> 7723 bytes .../__pycache__/validators.cpython-35.pyc | Bin 0 -> 17284 bytes .../core/__pycache__/wsgi.cpython-35.pyc | Bin 0 -> 607 bytes .../django/core/cache/__init__.py | 124 + .../cache/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4089 bytes .../cache/__pycache__/utils.cpython-35.pyc | Bin 0 -> 727 bytes .../django/core/cache/backends/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 152 bytes .../backends/__pycache__/base.cpython-35.pyc | Bin 0 -> 10209 bytes .../backends/__pycache__/db.cpython-35.pyc | Bin 0 -> 7577 bytes .../backends/__pycache__/dummy.cpython-35.pyc | Bin 0 -> 1851 bytes .../__pycache__/filebased.cpython-35.pyc | Bin 0 -> 6050 bytes .../__pycache__/locmem.cpython-35.pyc | Bin 0 -> 4365 bytes .../__pycache__/memcached.cpython-35.pyc | Bin 0 -> 7337 bytes .../django/core/cache/backends/base.py | 283 + .../django/core/cache/backends/db.py | 262 + .../django/core/cache/backends/dummy.py | 38 + .../django/core/cache/backends/filebased.py | 164 + .../django/core/cache/backends/locmem.py | 120 + .../django/core/cache/backends/memcached.py | 189 + .../site-packages/django/core/cache/utils.py | 12 + .../django/core/checks/__init__.py | 23 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1007 bytes .../checks/__pycache__/caches.cpython-35.pyc | Bin 0 -> 652 bytes .../__pycache__/database.cpython-35.pyc | Bin 0 -> 514 bytes .../__pycache__/messages.cpython-35.pyc | Bin 0 -> 3758 bytes .../__pycache__/model_checks.cpython-35.pyc | Bin 0 -> 5815 bytes .../__pycache__/registry.cpython-35.pyc | Bin 0 -> 3766 bytes .../__pycache__/templates.cpython-35.pyc | Bin 0 -> 1479 bytes .../checks/__pycache__/urls.cpython-35.pyc | Bin 0 -> 3602 bytes .../django/core/checks/caches.py | 16 + .../core/checks/compatibility/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 158 bytes .../django/core/checks/database.py | 11 + .../django/core/checks/messages.py | 75 + .../django/core/checks/model_checks.py | 154 + .../django/core/checks/registry.py | 96 + .../django/core/checks/security/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 153 bytes .../security/__pycache__/base.cpython-35.pyc | Bin 0 -> 6649 bytes .../security/__pycache__/csrf.cpython-35.pyc | Bin 0 -> 1514 bytes .../__pycache__/sessions.cpython-35.pyc | Bin 0 -> 2710 bytes .../django/core/checks/security/base.py | 210 + .../django/core/checks/security/csrf.py | 40 + .../django/core/checks/security/sessions.py | 97 + .../django/core/checks/templates.py | 35 + .../site-packages/django/core/checks/urls.py | 110 + .../site-packages/django/core/exceptions.py | 183 + .../django/core/files/__init__.py | 3 + .../files/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 223 bytes .../files/__pycache__/base.cpython-35.pyc | Bin 0 -> 5651 bytes .../files/__pycache__/images.cpython-35.pyc | Bin 0 -> 2082 bytes .../files/__pycache__/locks.cpython-35.pyc | Bin 0 -> 3612 bytes .../files/__pycache__/move.cpython-35.pyc | Bin 0 -> 2126 bytes .../files/__pycache__/storage.cpython-35.pyc | Bin 0 -> 13137 bytes .../files/__pycache__/temp.cpython-35.pyc | Bin 0 -> 2836 bytes .../__pycache__/uploadedfile.cpython-35.pyc | Bin 0 -> 4814 bytes .../__pycache__/uploadhandler.cpython-35.pyc | Bin 0 -> 7750 bytes .../files/__pycache__/utils.cpython-35.pyc | Bin 0 -> 3170 bytes .../site-packages/django/core/files/base.py | 160 + .../site-packages/django/core/files/images.py | 80 + .../site-packages/django/core/files/locks.py | 113 + .../site-packages/django/core/files/move.py | 87 + .../django/core/files/storage.py | 364 + .../site-packages/django/core/files/temp.py | 74 + .../django/core/files/uploadedfile.py | 117 + .../django/core/files/uploadhandler.py | 205 + .../site-packages/django/core/files/utils.py | 52 + .../django/core/handlers/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 146 bytes .../handlers/__pycache__/base.cpython-35.pyc | Bin 0 -> 4982 bytes .../__pycache__/exception.cpython-35.pyc | Bin 0 -> 3868 bytes .../handlers/__pycache__/wsgi.cpython-35.pyc | Bin 0 -> 7099 bytes .../django/core/handlers/base.py | 169 + .../django/core/handlers/exception.py | 129 + .../django/core/handlers/wsgi.py | 214 + .../django/core/mail/__init__.py | 116 + .../mail/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4200 bytes .../mail/__pycache__/message.cpython-35.pyc | Bin 0 -> 15856 bytes .../mail/__pycache__/utils.cpython-35.pyc | Bin 0 -> 747 bytes .../django/core/mail/backends/__init__.py | 1 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 151 bytes .../backends/__pycache__/base.cpython-35.pyc | Bin 0 -> 2411 bytes .../__pycache__/console.cpython-35.pyc | Bin 0 -> 1682 bytes .../backends/__pycache__/dummy.cpython-35.pyc | Bin 0 -> 617 bytes .../__pycache__/filebased.cpython-35.pyc | Bin 0 -> 2528 bytes .../__pycache__/locmem.cpython-35.pyc | Bin 0 -> 1277 bytes .../backends/__pycache__/smtp.cpython-35.pyc | Bin 0 -> 4307 bytes .../django/core/mail/backends/base.py | 59 + .../django/core/mail/backends/console.py | 42 + .../django/core/mail/backends/dummy.py | 10 + .../django/core/mail/backends/filebased.py | 70 + .../django/core/mail/backends/locmem.py | 30 + .../django/core/mail/backends/smtp.py | 131 + .../site-packages/django/core/mail/message.py | 454 + .../site-packages/django/core/mail/utils.py | 20 + .../django/core/management/__init__.py | 381 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 13401 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 22075 bytes .../__pycache__/color.cpython-35.pyc | Bin 0 -> 2017 bytes .../management/__pycache__/sql.cpython-35.pyc | Bin 0 -> 1737 bytes .../__pycache__/templates.cpython-35.pyc | Bin 0 -> 10365 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 3444 bytes .../django/core/management/base.py | 537 + .../django/core/management/color.py | 73 + .../commands/__pycache__/check.cpython-35.pyc | Bin 0 -> 2422 bytes .../compilemessages.cpython-35.pyc | Bin 0 -> 4634 bytes .../createcachetable.cpython-35.pyc | Bin 0 -> 3799 bytes .../__pycache__/dbshell.cpython-35.pyc | Bin 0 -> 1312 bytes .../__pycache__/diffsettings.cpython-35.pyc | Bin 0 -> 3248 bytes .../__pycache__/dumpdata.cpython-35.pyc | Bin 0 -> 6116 bytes .../commands/__pycache__/flush.cpython-35.pyc | Bin 0 -> 2931 bytes .../__pycache__/inspectdb.cpython-35.pyc | Bin 0 -> 9651 bytes .../__pycache__/loaddata.cpython-35.pyc | Bin 0 -> 11233 bytes .../__pycache__/makemessages.cpython-35.pyc | Bin 0 -> 22564 bytes .../__pycache__/makemigrations.cpython-35.pyc | Bin 0 -> 10253 bytes .../__pycache__/migrate.cpython-35.pyc | Bin 0 -> 9886 bytes .../__pycache__/runserver.cpython-35.pyc | Bin 0 -> 5144 bytes .../__pycache__/sendtestemail.cpython-35.pyc | Bin 0 -> 1801 bytes .../commands/__pycache__/shell.cpython-35.pyc | Bin 0 -> 3256 bytes .../__pycache__/showmigrations.cpython-35.pyc | Bin 0 -> 4408 bytes .../__pycache__/sqlflush.cpython-35.pyc | Bin 0 -> 1249 bytes .../__pycache__/sqlmigrate.cpython-35.pyc | Bin 0 -> 2380 bytes .../sqlsequencereset.cpython-35.pyc | Bin 0 -> 1309 bytes .../squashmigrations.cpython-35.pyc | Bin 0 -> 6315 bytes .../__pycache__/startapp.cpython-35.pyc | Bin 0 -> 856 bytes .../__pycache__/startproject.cpython-35.pyc | Bin 0 -> 963 bytes .../commands/__pycache__/test.cpython-35.pyc | Bin 0 -> 2324 bytes .../__pycache__/testserver.cpython-35.pyc | Bin 0 -> 1914 bytes .../django/core/management/commands/check.py | 66 + .../management/commands/compilemessages.py | 130 + .../management/commands/createcachetable.py | 108 + .../core/management/commands/dbshell.py | 31 + .../core/management/commands/diffsettings.py | 78 + .../core/management/commands/dumpdata.py | 194 + .../django/core/management/commands/flush.py | 82 + .../core/management/commands/inspectdb.py | 293 + .../core/management/commands/loaddata.py | 345 + .../core/management/commands/makemessages.py | 687 + .../management/commands/makemigrations.py | 313 + .../core/management/commands/migrate.py | 310 + .../core/management/commands/runserver.py | 161 + .../core/management/commands/sendtestemail.py | 40 + .../django/core/management/commands/shell.py | 102 + .../management/commands/showmigrations.py | 131 + .../core/management/commands/sqlflush.py | 22 + .../core/management/commands/sqlmigrate.py | 59 + .../management/commands/sqlsequencereset.py | 23 + .../management/commands/squashmigrations.py | 204 + .../core/management/commands/startapp.py | 14 + .../core/management/commands/startproject.py | 20 + .../django/core/management/commands/test.py | 59 + .../core/management/commands/testserver.py | 54 + .../django/core/management/sql.py | 52 + .../django/core/management/templates.py | 334 + .../django/core/management/utils.py | 108 + .../site-packages/django/core/paginator.py | 187 + .../django/core/serializers/__init__.py | 234 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 7079 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 10131 bytes .../__pycache__/json.cpython-35.pyc | Bin 0 -> 3672 bytes .../__pycache__/python.cpython-35.pyc | Bin 0 -> 5745 bytes .../__pycache__/pyyaml.cpython-35.pyc | Bin 0 -> 2858 bytes .../__pycache__/xml_serializer.cpython-35.pyc | Bin 0 -> 14917 bytes .../django/core/serializers/base.py | 283 + .../django/core/serializers/json.py | 104 + .../django/core/serializers/python.py | 148 + .../django/core/serializers/pyyaml.py | 77 + .../django/core/serializers/xml_serializer.py | 384 + .../django/core/servers/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 145 bytes .../__pycache__/basehttp.cpython-35.pyc | Bin 0 -> 7368 bytes .../django/core/servers/basehttp.py | 213 + .../site-packages/django/core/signals.py | 6 + .../site-packages/django/core/signing.py | 198 + .../site-packages/django/core/validators.py | 538 + .../site-packages/django/core/wsgi.py | 13 + .../site-packages/django/db/__init__.py | 65 + .../db/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2314 bytes .../db/__pycache__/transaction.cpython-35.pyc | Bin 0 -> 7495 bytes .../db/__pycache__/utils.cpython-35.pyc | Bin 0 -> 11098 bytes .../django/db/backends/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 144 bytes .../__pycache__/ddl_references.cpython-35.pyc | Bin 0 -> 8425 bytes .../__pycache__/signals.cpython-35.pyc | Bin 0 -> 261 bytes .../backends/__pycache__/utils.cpython-35.pyc | Bin 0 -> 7968 bytes .../django/db/backends/base/__init__.py | 0 .../base/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 149 bytes .../base/__pycache__/base.cpython-35.pyc | Bin 0 -> 21850 bytes .../base/__pycache__/client.cpython-35.pyc | Bin 0 -> 797 bytes .../base/__pycache__/creation.cpython-35.pyc | Bin 0 -> 9233 bytes .../base/__pycache__/features.cpython-35.pyc | Bin 0 -> 5179 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 8511 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 30420 bytes .../base/__pycache__/schema.cpython-35.pyc | Bin 0 -> 33779 bytes .../__pycache__/validation.cpython-35.pyc | Bin 0 -> 1353 bytes .../django/db/backends/base/base.py | 658 + .../django/db/backends/base/client.py | 12 + .../django/db/backends/base/creation.py | 294 + .../django/db/backends/base/features.py | 289 + .../django/db/backends/base/introspection.py | 179 + .../django/db/backends/base/operations.py | 672 + .../django/db/backends/base/schema.py | 1063 ++ .../django/db/backends/base/validation.py | 25 + .../django/db/backends/ddl_references.py | 175 + .../django/db/backends/dummy/__init__.py | 0 .../dummy/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../dummy/__pycache__/base.cpython-35.pyc | Bin 0 -> 2788 bytes .../dummy/__pycache__/features.cpython-35.pyc | Bin 0 -> 437 bytes .../django/db/backends/dummy/base.py | 73 + .../django/db/backends/dummy/features.py | 5 + .../django/db/backends/mysql/__init__.py | 0 .../mysql/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../mysql/__pycache__/base.cpython-35.pyc | Bin 0 -> 11084 bytes .../mysql/__pycache__/client.cpython-35.pyc | Bin 0 -> 1717 bytes .../mysql/__pycache__/compiler.cpython-35.pyc | Bin 0 -> 1581 bytes .../mysql/__pycache__/creation.cpython-35.pyc | Bin 0 -> 2749 bytes .../mysql/__pycache__/features.cpython-35.pyc | Bin 0 -> 4534 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 7785 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 11472 bytes .../mysql/__pycache__/schema.cpython-35.pyc | Bin 0 -> 4618 bytes .../__pycache__/validation.cpython-35.pyc | Bin 0 -> 2567 bytes .../django/db/backends/mysql/base.py | 344 + .../django/db/backends/mysql/client.py | 48 + .../django/db/backends/mysql/compiler.py | 25 + .../django/db/backends/mysql/creation.py | 67 + .../django/db/backends/mysql/features.py | 108 + .../django/db/backends/mysql/introspection.py | 208 + .../django/db/backends/mysql/operations.py | 295 + .../django/db/backends/mysql/schema.py | 101 + .../django/db/backends/mysql/validation.py | 60 + .../django/db/backends/oracle/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 151 bytes .../oracle/__pycache__/base.cpython-35.pyc | Bin 0 -> 19171 bytes .../oracle/__pycache__/client.cpython-35.pyc | Bin 0 -> 700 bytes .../__pycache__/compiler.cpython-35.pyc | Bin 0 -> 2295 bytes .../__pycache__/creation.cpython-35.pyc | Bin 0 -> 15455 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 2559 bytes .../__pycache__/functions.cpython-35.pyc | Bin 0 -> 1337 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 10076 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 21426 bytes .../oracle/__pycache__/schema.cpython-35.pyc | Bin 0 -> 6768 bytes .../oracle/__pycache__/utils.cpython-35.pyc | Bin 0 -> 2036 bytes .../__pycache__/validation.cpython-35.pyc | Bin 0 -> 1020 bytes .../django/db/backends/oracle/base.py | 546 + .../django/db/backends/oracle/client.py | 12 + .../django/db/backends/oracle/compiler.py | 60 + .../django/db/backends/oracle/creation.py | 376 + .../django/db/backends/oracle/features.py | 66 + .../django/db/backends/oracle/functions.py | 22 + .../db/backends/oracle/introspection.py | 252 + .../django/db/backends/oracle/operations.py | 584 + .../django/db/backends/oracle/schema.py | 169 + .../django/db/backends/oracle/utils.py | 56 + .../django/db/backends/oracle/validation.py | 22 + .../django/db/backends/postgresql/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 155 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 8349 bytes .../__pycache__/client.cpython-35.pyc | Bin 0 -> 1966 bytes .../__pycache__/creation.cpython-35.pyc | Bin 0 -> 3192 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 2481 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 9559 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 11345 bytes .../__pycache__/schema.cpython-35.pyc | Bin 0 -> 4171 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 412 bytes .../django/db/backends/postgresql/base.py | 283 + .../django/db/backends/postgresql/client.py | 71 + .../django/db/backends/postgresql/creation.py | 77 + .../django/db/backends/postgresql/features.py | 63 + .../db/backends/postgresql/introspection.py | 215 + .../db/backends/postgresql/operations.py | 275 + .../django/db/backends/postgresql/schema.py | 134 + .../django/db/backends/postgresql/utils.py | 7 + .../backends/postgresql_psycopg2/__init__.py | 9 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 424 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 194 bytes .../__pycache__/client.cpython-35.pyc | Bin 0 -> 198 bytes .../__pycache__/creation.cpython-35.pyc | Bin 0 -> 202 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 202 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 212 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 206 bytes .../__pycache__/schema.cpython-35.pyc | Bin 0 -> 198 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 196 bytes .../db/backends/postgresql_psycopg2/base.py | 1 + .../db/backends/postgresql_psycopg2/client.py | 1 + .../backends/postgresql_psycopg2/creation.py | 1 + .../backends/postgresql_psycopg2/features.py | 1 + .../postgresql_psycopg2/introspection.py | 1 + .../postgresql_psycopg2/operations.py | 1 + .../db/backends/postgresql_psycopg2/schema.py | 1 + .../db/backends/postgresql_psycopg2/utils.py | 1 + .../django/db/backends/signals.py | 3 + .../django/db/backends/sqlite3/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 152 bytes .../sqlite3/__pycache__/base.cpython-35.pyc | Bin 0 -> 15396 bytes .../sqlite3/__pycache__/client.cpython-35.pyc | Bin 0 -> 680 bytes .../__pycache__/creation.cpython-35.pyc | Bin 0 -> 3742 bytes .../__pycache__/features.cpython-35.pyc | Bin 0 -> 2059 bytes .../__pycache__/introspection.cpython-35.pyc | Bin 0 -> 9070 bytes .../__pycache__/operations.cpython-35.pyc | Bin 0 -> 12197 bytes .../sqlite3/__pycache__/schema.cpython-35.pyc | Bin 0 -> 12173 bytes .../django/db/backends/sqlite3/base.py | 487 + .../django/db/backends/sqlite3/client.py | 12 + .../django/db/backends/sqlite3/creation.py | 98 + .../django/db/backends/sqlite3/features.py | 52 + .../db/backends/sqlite3/introspection.py | 283 + .../django/db/backends/sqlite3/operations.py | 299 + .../django/db/backends/sqlite3/schema.py | 373 + .../site-packages/django/db/backends/utils.py | 256 + .../django/db/migrations/__init__.py | 2 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 255 bytes .../__pycache__/autodetector.cpython-35.pyc | Bin 0 -> 38065 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 2625 bytes .../__pycache__/executor.cpython-35.pyc | Bin 0 -> 11913 bytes .../__pycache__/graph.cpython-35.pyc | Bin 0 -> 15613 bytes .../__pycache__/loader.cpython-35.pyc | Bin 0 -> 10988 bytes .../__pycache__/migration.cpython-35.pyc | Bin 0 -> 5708 bytes .../__pycache__/optimizer.cpython-35.pyc | Bin 0 -> 2532 bytes .../__pycache__/questioner.cpython-35.pyc | Bin 0 -> 9462 bytes .../__pycache__/recorder.cpython-35.pyc | Bin 0 -> 4093 bytes .../__pycache__/serializer.cpython-35.pyc | Bin 0 -> 15326 bytes .../__pycache__/state.cpython-35.pyc | Bin 0 -> 19992 bytes .../topological_sort.cpython-35.pyc | Bin 0 -> 1645 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 907 bytes .../__pycache__/writer.cpython-35.pyc | Bin 0 -> 8808 bytes .../django/db/migrations/autodetector.py | 1260 ++ .../django/db/migrations/exceptions.py | 54 + .../django/db/migrations/executor.py | 369 + .../django/db/migrations/graph.py | 382 + .../django/db/migrations/loader.py | 322 + .../django/db/migrations/migration.py | 193 + .../db/migrations/operations/__init__.py | 15 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 868 bytes .../__pycache__/base.cpython-35.pyc | Bin 0 -> 5571 bytes .../__pycache__/fields.cpython-35.pyc | Bin 0 -> 12789 bytes .../__pycache__/models.cpython-35.pyc | Bin 0 -> 28642 bytes .../__pycache__/special.cpython-35.pyc | Bin 0 -> 6950 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 617 bytes .../django/db/migrations/operations/base.py | 141 + .../django/db/migrations/operations/fields.py | 369 + .../django/db/migrations/operations/models.py | 825 ++ .../db/migrations/operations/special.py | 203 + .../django/db/migrations/operations/utils.py | 9 + .../django/db/migrations/optimizer.py | 61 + .../django/db/migrations/questioner.py | 238 + .../django/db/migrations/recorder.py | 80 + .../django/db/migrations/serializer.py | 354 + .../django/db/migrations/state.py | 601 + .../django/db/migrations/topological_sort.py | 32 + .../django/db/migrations/utils.py | 17 + .../django/db/migrations/writer.py | 296 + .../django/db/models/__init__.py | 46 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2246 bytes .../__pycache__/aggregates.cpython-35.pyc | Bin 0 -> 8178 bytes .../db/models/__pycache__/base.cpython-35.pyc | Bin 0 -> 47338 bytes .../__pycache__/constants.cpython-35.pyc | Bin 0 -> 224 bytes .../__pycache__/deletion.cpython-35.pyc | Bin 0 -> 11418 bytes .../__pycache__/expressions.cpython-35.pyc | Bin 0 -> 54317 bytes .../models/__pycache__/indexes.cpython-35.pyc | Bin 0 -> 5179 bytes .../models/__pycache__/lookups.cpython-35.pyc | Bin 0 -> 20563 bytes .../models/__pycache__/manager.cpython-35.pyc | Bin 0 -> 6519 bytes .../models/__pycache__/options.cpython-35.pyc | Bin 0 -> 24729 bytes .../models/__pycache__/query.cpython-35.pyc | Bin 0 -> 61868 bytes .../__pycache__/query_utils.cpython-35.pyc | Bin 0 -> 12343 bytes .../models/__pycache__/signals.cpython-35.pyc | Bin 0 -> 2105 bytes .../models/__pycache__/utils.cpython-35.pyc | Bin 0 -> 909 bytes .../django/db/models/aggregates.py | 185 + .../site-packages/django/db/models/base.py | 1756 +++ .../django/db/models/constants.py | 6 + .../django/db/models/deletion.py | 317 + .../django/db/models/expressions.py | 1321 ++ .../django/db/models/fields/__init__.py | 2338 ++++ .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 73333 bytes .../fields/__pycache__/files.cpython-35.pyc | Bin 0 -> 13266 bytes .../fields/__pycache__/mixins.cpython-35.pyc | Bin 0 -> 1422 bytes .../fields/__pycache__/proxy.cpython-35.pyc | Bin 0 -> 903 bytes .../fields/__pycache__/related.cpython-35.pyc | Bin 0 -> 51029 bytes .../related_descriptors.cpython-35.pyc | Bin 0 -> 38753 bytes .../related_lookups.cpython-35.pyc | Bin 0 -> 6395 bytes .../reverse_related.cpython-35.pyc | Bin 0 -> 10345 bytes .../django/db/models/fields/files.py | 466 + .../django/db/models/fields/mixins.py | 26 + .../django/db/models/fields/proxy.py | 18 + .../django/db/models/fields/related.py | 1642 +++ .../db/models/fields/related_descriptors.py | 1144 ++ .../db/models/fields/related_lookups.py | 154 + .../db/models/fields/reverse_related.py | 287 + .../django/db/models/functions/__init__.py | 33 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1858 bytes .../__pycache__/comparison.cpython-35.pyc | Bin 0 -> 4425 bytes .../__pycache__/datetime.cpython-35.pyc | Bin 0 -> 10586 bytes .../functions/__pycache__/text.cpython-35.pyc | Bin 0 -> 10660 bytes .../__pycache__/window.cpython-35.pyc | Bin 0 -> 4203 bytes .../django/db/models/functions/comparison.py | 91 + .../django/db/models/functions/datetime.py | 294 + .../django/db/models/functions/text.py | 237 + .../django/db/models/functions/window.py | 118 + .../site-packages/django/db/models/indexes.py | 118 + .../site-packages/django/db/models/lookups.py | 556 + .../site-packages/django/db/models/manager.py | 201 + .../site-packages/django/db/models/options.py | 827 ++ .../site-packages/django/db/models/query.py | 1841 +++ .../django/db/models/query_utils.py | 338 + .../site-packages/django/db/models/signals.py | 53 + .../django/db/models/sql/__init__.py | 6 + .../sql/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 425 bytes .../sql/__pycache__/compiler.cpython-35.pyc | Bin 0 -> 46088 bytes .../sql/__pycache__/constants.cpython-35.pyc | Bin 0 -> 569 bytes .../__pycache__/datastructures.cpython-35.pyc | Bin 0 -> 6051 bytes .../sql/__pycache__/query.cpython-35.pyc | Bin 0 -> 67042 bytes .../sql/__pycache__/subqueries.cpython-35.pyc | Bin 0 -> 7633 bytes .../sql/__pycache__/where.cpython-35.pyc | Bin 0 -> 8183 bytes .../django/db/models/sql/compiler.py | 1469 +++ .../django/db/models/sql/constants.py | 27 + .../django/db/models/sql/datastructures.py | 170 + .../django/db/models/sql/query.py | 2227 ++++ .../django/db/models/sql/subqueries.py | 193 + .../django/db/models/sql/where.py | 228 + .../site-packages/django/db/models/utils.py | 21 + .../site-packages/django/db/transaction.py | 289 + .../site-packages/django/db/utils.py | 308 + .../site-packages/django/dispatch/__init__.py | 9 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 456 bytes .../__pycache__/dispatcher.cpython-35.pyc | Bin 0 -> 8961 bytes .../django/dispatch/dispatcher.py | 292 + .../site-packages/django/dispatch/license.txt | 36 + .../site-packages/django/forms/__init__.py | 11 + .../forms/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 475 bytes .../__pycache__/boundfield.cpython-35.pyc | Bin 0 -> 10223 bytes .../forms/__pycache__/fields.cpython-35.pyc | Bin 0 -> 40316 bytes .../forms/__pycache__/forms.cpython-35.pyc | Bin 0 -> 16416 bytes .../forms/__pycache__/formsets.cpython-35.pyc | Bin 0 -> 15606 bytes .../forms/__pycache__/models.cpython-35.pyc | Bin 0 -> 39795 bytes .../__pycache__/renderers.cpython-35.pyc | Bin 0 -> 3145 bytes .../forms/__pycache__/utils.cpython-35.pyc | Bin 0 -> 7329 bytes .../forms/__pycache__/widgets.cpython-35.pyc | Bin 0 -> 38645 bytes .../site-packages/django/forms/boundfield.py | 266 + .../site-packages/django/forms/fields.py | 1202 ++ .../site-packages/django/forms/forms.py | 506 + .../site-packages/django/forms/formsets.py | 443 + .../jinja2/django/forms/widgets/attrs.html | 1 + .../jinja2/django/forms/widgets/checkbox.html | 1 + .../django/forms/widgets/checkbox_option.html | 1 + .../django/forms/widgets/checkbox_select.html | 1 + .../forms/widgets/clearable_file_input.html | 5 + .../jinja2/django/forms/widgets/date.html | 1 + .../jinja2/django/forms/widgets/datetime.html | 1 + .../jinja2/django/forms/widgets/email.html | 1 + .../jinja2/django/forms/widgets/file.html | 1 + .../jinja2/django/forms/widgets/hidden.html | 1 + .../jinja2/django/forms/widgets/input.html | 1 + .../django/forms/widgets/input_option.html | 1 + .../django/forms/widgets/multiple_hidden.html | 1 + .../django/forms/widgets/multiple_input.html | 5 + .../django/forms/widgets/multiwidget.html | 1 + .../jinja2/django/forms/widgets/number.html | 1 + .../jinja2/django/forms/widgets/password.html | 1 + .../jinja2/django/forms/widgets/radio.html | 1 + .../django/forms/widgets/radio_option.html | 1 + .../jinja2/django/forms/widgets/select.html | 5 + .../django/forms/widgets/select_date.html | 1 + .../django/forms/widgets/select_option.html | 1 + .../django/forms/widgets/splitdatetime.html | 1 + .../forms/widgets/splithiddendatetime.html | 1 + .../jinja2/django/forms/widgets/text.html | 1 + .../jinja2/django/forms/widgets/textarea.html | 2 + .../jinja2/django/forms/widgets/time.html | 1 + .../jinja2/django/forms/widgets/url.html | 1 + .../site-packages/django/forms/models.py | 1362 ++ .../site-packages/django/forms/renderers.py | 70 + .../templates/django/forms/widgets/attrs.html | 1 + .../django/forms/widgets/checkbox.html | 1 + .../django/forms/widgets/checkbox_option.html | 1 + .../django/forms/widgets/checkbox_select.html | 1 + .../forms/widgets/clearable_file_input.html | 5 + .../templates/django/forms/widgets/date.html | 1 + .../django/forms/widgets/datetime.html | 1 + .../templates/django/forms/widgets/email.html | 1 + .../templates/django/forms/widgets/file.html | 1 + .../django/forms/widgets/hidden.html | 1 + .../templates/django/forms/widgets/input.html | 1 + .../django/forms/widgets/input_option.html | 1 + .../django/forms/widgets/multiple_hidden.html | 1 + .../django/forms/widgets/multiple_input.html | 5 + .../django/forms/widgets/multiwidget.html | 1 + .../django/forms/widgets/number.html | 1 + .../django/forms/widgets/password.html | 1 + .../templates/django/forms/widgets/radio.html | 1 + .../django/forms/widgets/radio_option.html | 1 + .../django/forms/widgets/select.html | 5 + .../django/forms/widgets/select_date.html | 1 + .../django/forms/widgets/select_option.html | 1 + .../django/forms/widgets/splitdatetime.html | 1 + .../forms/widgets/splithiddendatetime.html | 1 + .../templates/django/forms/widgets/text.html | 1 + .../django/forms/widgets/textarea.html | 2 + .../templates/django/forms/widgets/time.html | 1 + .../templates/django/forms/widgets/url.html | 1 + .../site-packages/django/forms/utils.py | 178 + .../site-packages/django/forms/widgets.py | 1059 ++ .../site-packages/django/http/__init__.py | 21 + .../http/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1069 bytes .../http/__pycache__/cookie.cpython-35.pyc | Bin 0 -> 680 bytes .../multipartparser.cpython-35.pyc | Bin 0 -> 18688 bytes .../http/__pycache__/request.cpython-35.pyc | Bin 0 -> 20668 bytes .../http/__pycache__/response.cpython-35.pyc | Bin 0 -> 21214 bytes .../site-packages/django/http/cookie.py | 26 + .../django/http/multipartparser.py | 688 + .../site-packages/django/http/request.py | 583 + .../site-packages/django/http/response.py | 559 + .../django/middleware/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 143 bytes .../__pycache__/cache.cpython-35.pyc | Bin 0 -> 6422 bytes .../__pycache__/clickjacking.cpython-35.pyc | Bin 0 -> 1934 bytes .../__pycache__/common.cpython-35.pyc | Bin 0 -> 6355 bytes .../__pycache__/csrf.cpython-35.pyc | Bin 0 -> 9201 bytes .../__pycache__/gzip.cpython-35.pyc | Bin 0 -> 1527 bytes .../__pycache__/http.cpython-35.pyc | Bin 0 -> 1774 bytes .../__pycache__/locale.cpython-35.pyc | Bin 0 -> 2431 bytes .../__pycache__/security.cpython-35.pyc | Bin 0 -> 2375 bytes .../site-packages/django/middleware/cache.py | 189 + .../django/middleware/clickjacking.py | 45 + .../site-packages/django/middleware/common.py | 173 + .../site-packages/django/middleware/csrf.py | 326 + .../site-packages/django/middleware/gzip.py | 52 + .../site-packages/django/middleware/http.py | 41 + .../site-packages/django/middleware/locale.py | 61 + .../django/middleware/security.py | 46 + .../site-packages/django/shortcuts.py | 158 + .../site-packages/django/template/__init__.py | 68 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1827 bytes .../template/__pycache__/base.cpython-35.pyc | Bin 0 -> 31307 bytes .../__pycache__/context.cpython-35.pyc | Bin 0 -> 10282 bytes .../context_processors.cpython-35.pyc | Bin 0 -> 2917 bytes .../__pycache__/defaultfilters.cpython-35.pyc | Bin 0 -> 26078 bytes .../__pycache__/defaulttags.cpython-35.pyc | Bin 0 -> 47806 bytes .../__pycache__/engine.cpython-35.pyc | Bin 0 -> 6484 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 1770 bytes .../__pycache__/library.cpython-35.pyc | Bin 0 -> 11048 bytes .../__pycache__/loader.cpython-35.pyc | Bin 0 -> 2022 bytes .../__pycache__/loader_tags.cpython-35.pyc | Bin 0 -> 10743 bytes .../__pycache__/response.cpython-35.pyc | Bin 0 -> 4794 bytes .../__pycache__/smartif.cpython-35.pyc | Bin 0 -> 8050 bytes .../template/__pycache__/utils.cpython-35.pyc | Bin 0 -> 3809 bytes .../django/template/backends/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 150 bytes .../backends/__pycache__/base.cpython-35.pyc | Bin 0 -> 2753 bytes .../__pycache__/django.cpython-35.pyc | Bin 0 -> 5069 bytes .../backends/__pycache__/dummy.cpython-35.pyc | Bin 0 -> 2366 bytes .../__pycache__/jinja2.cpython-35.pyc | Bin 0 -> 4212 bytes .../backends/__pycache__/utils.cpython-35.pyc | Bin 0 -> 654 bytes .../django/template/backends/base.py | 81 + .../django/template/backends/django.py | 129 + .../django/template/backends/dummy.py | 53 + .../django/template/backends/jinja2.py | 108 + .../django/template/backends/utils.py | 14 + .../site-packages/django/template/base.py | 1044 ++ .../site-packages/django/template/context.py | 280 + .../django/template/context_processors.py | 81 + .../django/template/defaultfilters.py | 907 ++ .../django/template/defaulttags.py | 1473 +++ .../site-packages/django/template/engine.py | 181 + .../django/template/exceptions.py | 42 + .../site-packages/django/template/library.py | 328 + .../site-packages/django/template/loader.py | 66 + .../django/template/loader_tags.py | 317 + .../django/template/loaders/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 149 bytes .../app_directories.cpython-35.pyc | Bin 0 -> 690 bytes .../loaders/__pycache__/base.cpython-35.pyc | Bin 0 -> 1841 bytes .../loaders/__pycache__/cached.cpython-35.pyc | Bin 0 -> 4239 bytes .../__pycache__/filesystem.cpython-35.pyc | Bin 0 -> 1835 bytes .../loaders/__pycache__/locmem.cpython-35.pyc | Bin 0 -> 1132 bytes .../template/loaders/app_directories.py | 14 + .../django/template/loaders/base.py | 49 + .../django/template/loaders/cached.py | 95 + .../django/template/loaders/filesystem.py | 46 + .../django/template/loaders/locmem.py | 27 + .../site-packages/django/template/response.py | 145 + .../site-packages/django/template/smartif.py | 208 + .../site-packages/django/template/utils.py | 107 + .../django/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 145 bytes .../__pycache__/cache.cpython-35.pyc | Bin 0 -> 3370 bytes .../__pycache__/i18n.cpython-35.pyc | Bin 0 -> 17856 bytes .../__pycache__/l10n.cpython-35.pyc | Bin 0 -> 2294 bytes .../__pycache__/static.cpython-35.pyc | Bin 0 -> 5188 bytes .../__pycache__/tz.cpython-35.pyc | Bin 0 -> 5693 bytes .../django/templatetags/cache.py | 93 + .../site-packages/django/templatetags/i18n.py | 551 + .../site-packages/django/templatetags/l10n.py | 63 + .../django/templatetags/static.py | 167 + .../site-packages/django/templatetags/tz.py | 190 + .../site-packages/django/test/__init__.py | 18 + .../test/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 811 bytes .../test/__pycache__/client.cpython-35.pyc | Bin 0 -> 22813 bytes .../test/__pycache__/html.cpython-35.pyc | Bin 0 -> 8130 bytes .../test/__pycache__/runner.cpython-35.pyc | Bin 0 -> 23196 bytes .../test/__pycache__/selenium.cpython-35.pyc | Bin 0 -> 3028 bytes .../test/__pycache__/signals.cpython-35.pyc | Bin 0 -> 6349 bytes .../test/__pycache__/testcases.cpython-35.pyc | Bin 0 -> 47336 bytes .../test/__pycache__/utils.cpython-35.pyc | Bin 0 -> 29956 bytes .../site-packages/django/test/client.py | 716 ++ .../site-packages/django/test/html.py | 228 + .../site-packages/django/test/runner.py | 706 ++ .../site-packages/django/test/selenium.py | 81 + .../site-packages/django/test/signals.py | 205 + .../site-packages/django/test/testcases.py | 1367 ++ .../site-packages/django/test/utils.py | 842 ++ .../site-packages/django/urls/__init__.py | 23 + .../urls/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1137 bytes .../urls/__pycache__/base.cpython-35.pyc | Bin 0 -> 4804 bytes .../urls/__pycache__/conf.cpython-35.pyc | Bin 0 -> 2178 bytes .../__pycache__/converters.cpython-35.pyc | Bin 0 -> 2501 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 511 bytes .../urls/__pycache__/resolvers.cpython-35.pyc | Bin 0 -> 20229 bytes .../urls/__pycache__/utils.cpython-35.pyc | Bin 0 -> 1809 bytes .../site-packages/django/urls/base.py | 183 + .../site-packages/django/urls/conf.py | 77 + .../site-packages/django/urls/converters.py | 67 + .../site-packages/django/urls/exceptions.py | 9 + .../site-packages/django/urls/resolvers.py | 622 + .../site-packages/django/urls/utils.py | 62 + .../site-packages/django/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 138 bytes .../utils/__pycache__/_os.cpython-35.pyc | Bin 0 -> 2270 bytes .../utils/__pycache__/archive.cpython-35.pyc | Bin 0 -> 8588 bytes .../__pycache__/autoreload.cpython-35.pyc | Bin 0 -> 7590 bytes .../utils/__pycache__/baseconv.cpython-35.pyc | Bin 0 -> 2618 bytes .../utils/__pycache__/cache.cpython-35.pyc | Bin 0 -> 12441 bytes .../utils/__pycache__/crypto.cpython-35.pyc | Bin 0 -> 2482 bytes .../__pycache__/datastructures.cpython-35.pyc | Bin 0 -> 10996 bytes .../__pycache__/dateformat.cpython-35.pyc | Bin 0 -> 12570 bytes .../__pycache__/dateparse.cpython-35.pyc | Bin 0 -> 4644 bytes .../utils/__pycache__/dates.cpython-35.pyc | Bin 0 -> 1648 bytes .../__pycache__/datetime_safe.cpython-35.pyc | Bin 0 -> 3064 bytes .../__pycache__/deconstruct.cpython-35.pyc | Bin 0 -> 1877 bytes .../__pycache__/decorators.cpython-35.pyc | Bin 0 -> 6012 bytes .../__pycache__/deprecation.cpython-35.pyc | Bin 0 -> 3730 bytes .../utils/__pycache__/duration.cpython-35.pyc | Bin 0 -> 1357 bytes .../utils/__pycache__/encoding.cpython-35.pyc | Bin 0 -> 7512 bytes .../__pycache__/feedgenerator.cpython-35.pyc | Bin 0 -> 13535 bytes .../utils/__pycache__/formats.cpython-35.pyc | Bin 0 -> 6906 bytes .../__pycache__/functional.cpython-35.pyc | Bin 0 -> 13241 bytes .../utils/__pycache__/hashable.cpython-35.pyc | Bin 0 -> 683 bytes .../utils/__pycache__/html.cpython-35.pyc | Bin 0 -> 13305 bytes .../utils/__pycache__/http.cpython-35.pyc | Bin 0 -> 13987 bytes .../utils/__pycache__/inspect.cpython-35.pyc | Bin 0 -> 2528 bytes .../utils/__pycache__/ipv6.cpython-35.pyc | Bin 0 -> 1497 bytes .../__pycache__/itercompat.cpython-35.pyc | Bin 0 -> 369 bytes .../utils/__pycache__/jslex.cpython-35.pyc | Bin 0 -> 7187 bytes .../utils/__pycache__/log.cpython-35.pyc | Bin 0 -> 6966 bytes .../__pycache__/lorem_ipsum.cpython-35.pyc | Bin 0 -> 5673 bytes .../__pycache__/lru_cache.cpython-35.pyc | Bin 0 -> 186 bytes .../__pycache__/module_loading.cpython-35.pyc | Bin 0 -> 2740 bytes .../__pycache__/numberformat.cpython-35.pyc | Bin 0 -> 1990 bytes .../__pycache__/regex_helper.cpython-35.pyc | Bin 0 -> 7771 bytes .../__pycache__/safestring.cpython-35.pyc | Bin 0 -> 3397 bytes .../utils/__pycache__/six.cpython-35.pyc | Bin 0 -> 26388 bytes .../__pycache__/termcolors.cpython-35.pyc | Bin 0 -> 5962 bytes .../utils/__pycache__/text.cpython-35.pyc | Bin 0 -> 13500 bytes .../__pycache__/timesince.cpython-35.pyc | Bin 0 -> 2836 bytes .../utils/__pycache__/timezone.cpython-35.pyc | Bin 0 -> 8270 bytes .../utils/__pycache__/tree.cpython-35.pyc | Bin 0 -> 4539 bytes .../utils/__pycache__/version.cpython-35.pyc | Bin 0 -> 3264 bytes .../utils/__pycache__/xmlutils.cpython-35.pyc | Bin 0 -> 1568 bytes .../site-packages/django/utils/_os.py | 68 + .../site-packages/django/utils/archive.py | 227 + .../site-packages/django/utils/autoreload.py | 323 + .../site-packages/django/utils/baseconv.py | 101 + .../site-packages/django/utils/cache.py | 387 + .../site-packages/django/utils/crypto.py | 84 + .../django/utils/datastructures.py | 282 + .../site-packages/django/utils/dateformat.py | 367 + .../site-packages/django/utils/dateparse.py | 146 + .../site-packages/django/utils/dates.py | 49 + .../django/utils/datetime_safe.py | 105 + .../site-packages/django/utils/deconstruct.py | 55 + .../site-packages/django/utils/decorators.py | 176 + .../site-packages/django/utils/deprecation.py | 94 + .../site-packages/django/utils/duration.py | 44 + .../site-packages/django/utils/encoding.py | 269 + .../django/utils/feedgenerator.py | 391 + .../site-packages/django/utils/formats.py | 257 + .../site-packages/django/utils/functional.py | 388 + .../site-packages/django/utils/hashable.py | 19 + .../site-packages/django/utils/html.py | 399 + .../site-packages/django/utils/http.py | 446 + .../site-packages/django/utils/inspect.py | 62 + .../site-packages/django/utils/ipv6.py | 46 + .../site-packages/django/utils/itercompat.py | 8 + .../site-packages/django/utils/jslex.py | 220 + .../site-packages/django/utils/log.py | 230 + .../site-packages/django/utils/lorem_ipsum.py | 114 + .../site-packages/django/utils/lru_cache.py | 5 + .../django/utils/module_loading.py | 98 + .../django/utils/numberformat.py | 66 + .../django/utils/regex_helper.py | 333 + .../site-packages/django/utils/safestring.py | 86 + .../site-packages/django/utils/six.py | 882 ++ .../site-packages/django/utils/termcolors.py | 215 + .../site-packages/django/utils/text.py | 433 + .../site-packages/django/utils/timesince.py | 91 + .../site-packages/django/utils/timezone.py | 281 + .../django/utils/translation/__init__.py | 268 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 8256 bytes .../__pycache__/template.cpython-35.pyc | Bin 0 -> 5315 bytes .../__pycache__/trans_null.cpython-35.pyc | Bin 0 -> 1878 bytes .../__pycache__/trans_real.cpython-35.pyc | Bin 0 -> 16227 bytes .../django/utils/translation/template.py | 227 + .../django/utils/translation/trans_null.py | 67 + .../django/utils/translation/trans_real.py | 516 + .../site-packages/django/utils/tree.py | 124 + .../site-packages/django/utils/version.py | 104 + .../site-packages/django/utils/xmlutils.py | 34 + .../site-packages/django/views/__init__.py | 3 + .../views/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 221 bytes .../views/__pycache__/csrf.cpython-35.pyc | Bin 0 -> 5519 bytes .../views/__pycache__/debug.cpython-35.pyc | Bin 0 -> 15583 bytes .../views/__pycache__/defaults.cpython-35.pyc | Bin 0 -> 3214 bytes .../views/__pycache__/i18n.cpython-35.pyc | Bin 0 -> 12618 bytes .../views/__pycache__/static.cpython-35.pyc | Bin 0 -> 4557 bytes .../site-packages/django/views/csrf.py | 154 + .../site-packages/django/views/debug.py | 520 + .../django/views/decorators/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 149 bytes .../__pycache__/cache.cpython-35.pyc | Bin 0 -> 2212 bytes .../__pycache__/clickjacking.cpython-35.pyc | Bin 0 -> 2009 bytes .../__pycache__/csrf.cpython-35.pyc | Bin 0 -> 2289 bytes .../__pycache__/debug.cpython-35.pyc | Bin 0 -> 2921 bytes .../__pycache__/gzip.cpython-35.pyc | Bin 0 -> 397 bytes .../__pycache__/http.cpython-35.pyc | Bin 0 -> 4562 bytes .../__pycache__/vary.cpython-35.pyc | Bin 0 -> 1567 bytes .../django/views/decorators/cache.py | 47 + .../django/views/decorators/clickjacking.py | 53 + .../django/views/decorators/csrf.py | 56 + .../django/views/decorators/debug.py | 78 + .../django/views/decorators/gzip.py | 5 + .../django/views/decorators/http.py | 121 + .../django/views/decorators/vary.py | 41 + .../site-packages/django/views/defaults.py | 123 + .../django/views/generic/__init__.py | 22 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 1135 bytes .../generic/__pycache__/base.cpython-35.pyc | Bin 0 -> 7866 bytes .../generic/__pycache__/dates.cpython-35.pyc | Bin 0 -> 24510 bytes .../generic/__pycache__/detail.cpython-35.pyc | Bin 0 -> 5481 bytes .../generic/__pycache__/edit.cpython-35.pyc | Bin 0 -> 9601 bytes .../generic/__pycache__/list.cpython-35.pyc | Bin 0 -> 6794 bytes .../django/views/generic/base.py | 208 + .../django/views/generic/dates.py | 720 ++ .../django/views/generic/detail.py | 170 + .../django/views/generic/edit.py | 241 + .../django/views/generic/list.py | 198 + .../site-packages/django/views/i18n.py | 333 + .../site-packages/django/views/static.py | 135 + .../views/templates/default_urlconf.html | 414 + .../django/views/templates/technical_404.html | 79 + .../django/views/templates/technical_500.html | 485 + .../django/views/templates/technical_500.txt | 66 + .../python3.5/site-packages/easy_install.py | 5 + .../pip-8.1.1.dist-info/DESCRIPTION.rst | 36 + .../pip-8.1.1.dist-info/INSTALLER | 1 + .../pip-8.1.1.dist-info/METADATA | 65 + .../site-packages/pip-8.1.1.dist-info/RECORD | 117 + .../site-packages/pip-8.1.1.dist-info/WHEEL | 6 + .../pip-8.1.1.dist-info/entry_points.txt | 5 + .../pip-8.1.1.dist-info/metadata.json | 1 + .../pip-8.1.1.dist-info/top_level.txt | 1 + .../python3.5/site-packages/pip/__init__.py | 315 + .../python3.5/site-packages/pip/__main__.py | 19 + .../pip/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 9041 bytes .../pip/__pycache__/__main__.cpython-35.pyc | Bin 0 -> 418 bytes .../__pycache__/basecommand.cpython-35.pyc | Bin 0 -> 7730 bytes .../pip/__pycache__/baseparser.cpython-35.pyc | Bin 0 -> 10018 bytes .../pip/__pycache__/cmdoptions.cpython-35.pyc | Bin 0 -> 13449 bytes .../pip/__pycache__/download.cpython-35.pyc | Bin 0 -> 21902 bytes .../pip/__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 10717 bytes .../pip/__pycache__/index.cpython-35.pyc | Bin 0 -> 30482 bytes .../pip/__pycache__/locations.cpython-35.pyc | Bin 0 -> 4287 bytes .../pip/__pycache__/pep425tags.cpython-35.pyc | Bin 0 -> 8366 bytes .../__pycache__/status_codes.cpython-35.pyc | Bin 0 -> 354 bytes .../pip/__pycache__/wheel.cpython-35.pyc | Bin 0 -> 23807 bytes .../site-packages/pip/_vendor/__init__.py | 110 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2947 bytes .../site-packages/pip/basecommand.py | 325 + .../python3.5/site-packages/pip/baseparser.py | 292 + .../python3.5/site-packages/pip/cmdoptions.py | 618 + .../site-packages/pip/commands/__init__.py | 83 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2125 bytes .../__pycache__/completion.cpython-35.pyc | Bin 0 -> 2348 bytes .../__pycache__/download.cpython-35.pyc | Bin 0 -> 3970 bytes .../__pycache__/freeze.cpython-35.pyc | Bin 0 -> 2738 bytes .../commands/__pycache__/hash.cpython-35.pyc | Bin 0 -> 2052 bytes .../commands/__pycache__/help.cpython-35.pyc | Bin 0 -> 1150 bytes .../__pycache__/install.cpython-35.pyc | Bin 0 -> 9733 bytes .../commands/__pycache__/list.cpython-35.pyc | Bin 0 -> 6417 bytes .../__pycache__/search.cpython-35.pyc | Bin 0 -> 4642 bytes .../commands/__pycache__/show.cpython-35.pyc | Bin 0 -> 5779 bytes .../__pycache__/uninstall.cpython-35.pyc | Bin 0 -> 2697 bytes .../commands/__pycache__/wheel.cpython-35.pyc | Bin 0 -> 5687 bytes .../site-packages/pip/commands/completion.py | 67 + .../site-packages/pip/commands/download.py | 136 + .../site-packages/pip/commands/freeze.py | 86 + .../site-packages/pip/commands/hash.py | 57 + .../site-packages/pip/commands/help.py | 35 + .../site-packages/pip/commands/install.py | 404 + .../site-packages/pip/commands/list.py | 209 + .../site-packages/pip/commands/search.py | 146 + .../site-packages/pip/commands/show.py | 154 + .../site-packages/pip/commands/uninstall.py | 76 + .../site-packages/pip/commands/wheel.py | 204 + .../site-packages/pip/compat/__init__.py | 164 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 4289 bytes .../__pycache__/dictconfig.cpython-35.pyc | Bin 0 -> 15022 bytes .../__pycache__/ordereddict.cpython-35.pyc | Bin 0 -> 3882 bytes .../site-packages/pip/compat/dictconfig.py | 565 + .../site-packages/pip/compat/ordereddict.py | 129 + .../python3.5/site-packages/pip/download.py | 895 ++ .../python3.5/site-packages/pip/exceptions.py | 239 + env/lib/python3.5/site-packages/pip/index.py | 1048 ++ .../python3.5/site-packages/pip/locations.py | 182 + .../site-packages/pip/models/__init__.py | 4 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 233 bytes .../models/__pycache__/index.cpython-35.pyc | Bin 0 -> 886 bytes .../site-packages/pip/models/index.py | 16 + .../site-packages/pip/operations/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 137 bytes .../__pycache__/freeze.cpython-35.pyc | Bin 0 -> 2880 bytes .../site-packages/pip/operations/freeze.py | 122 + .../python3.5/site-packages/pip/pep425tags.py | 338 + .../site-packages/pip/req/__init__.py | 10 + .../req/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 428 bytes .../req/__pycache__/req_file.cpython-35.pyc | Bin 0 -> 9084 bytes .../__pycache__/req_install.cpython-35.pyc | Bin 0 -> 33079 bytes .../req/__pycache__/req_set.cpython-35.pyc | Bin 0 -> 21343 bytes .../__pycache__/req_uninstall.cpython-35.pyc | Bin 0 -> 6840 bytes .../site-packages/pip/req/req_file.py | 342 + .../site-packages/pip/req/req_install.py | 1190 ++ .../site-packages/pip/req/req_set.py | 746 ++ .../site-packages/pip/req/req_uninstall.py | 195 + .../site-packages/pip/status_codes.py | 8 + .../site-packages/pip/utils/__init__.py | 878 ++ .../utils/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 24823 bytes .../utils/__pycache__/appdirs.cpython-35.pyc | Bin 0 -> 7271 bytes .../utils/__pycache__/build.cpython-35.pyc | Bin 0 -> 1411 bytes .../__pycache__/deprecation.cpython-35.pyc | Bin 0 -> 1866 bytes .../utils/__pycache__/encoding.cpython-35.pyc | Bin 0 -> 1124 bytes .../__pycache__/filesystem.cpython-35.pyc | Bin 0 -> 645 bytes .../utils/__pycache__/hashes.cpython-35.pyc | Bin 0 -> 3412 bytes .../utils/__pycache__/logging.cpython-35.pyc | Bin 0 -> 4186 bytes .../utils/__pycache__/outdated.cpython-35.pyc | Bin 0 -> 4575 bytes .../setuptools_build.cpython-35.pyc | Bin 0 -> 305 bytes .../pip/utils/__pycache__/ui.cpython-35.pyc | Bin 0 -> 10254 bytes .../site-packages/pip/utils/appdirs.py | 224 + .../site-packages/pip/utils/build.py | 42 + .../site-packages/pip/utils/deprecation.py | 76 + .../site-packages/pip/utils/encoding.py | 31 + .../site-packages/pip/utils/filesystem.py | 28 + .../site-packages/pip/utils/hashes.py | 92 + .../site-packages/pip/utils/logging.py | 130 + .../site-packages/pip/utils/outdated.py | 162 + .../pip/utils/setuptools_build.py | 6 + .../python3.5/site-packages/pip/utils/ui.py | 344 + .../site-packages/pip/vcs/__init__.py | 363 + .../vcs/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 11801 bytes .../pip/vcs/__pycache__/bazaar.cpython-35.pyc | Bin 0 -> 3944 bytes .../pip/vcs/__pycache__/git.cpython-35.pyc | Bin 0 -> 9018 bytes .../vcs/__pycache__/mercurial.cpython-35.pyc | Bin 0 -> 3870 bytes .../vcs/__pycache__/subversion.cpython-35.pyc | Bin 0 -> 7436 bytes .../python3.5/site-packages/pip/vcs/bazaar.py | 116 + .../python3.5/site-packages/pip/vcs/git.py | 277 + .../site-packages/pip/vcs/mercurial.py | 103 + .../site-packages/pip/vcs/subversion.py | 249 + env/lib/python3.5/site-packages/pip/wheel.py | 855 ++ .../DESCRIPTION.rst | 3 + .../pkg_resources-0.0.0.dist-info/INSTALLER | 1 + .../pkg_resources-0.0.0.dist-info/METADATA | 13 + .../pkg_resources-0.0.0.dist-info/RECORD | 34 + .../pkg_resources-0.0.0.dist-info/WHEEL | 6 + .../metadata.json | 1 + .../site-packages/pkg_resources/__init__.py | 2956 +++++ .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 99725 bytes .../pkg_resources/_vendor/__init__.py | 0 .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 154 bytes .../__pycache__/pyparsing.cpython-35.pyc | Bin 0 -> 147533 bytes .../_vendor/__pycache__/six.cpython-35.pyc | Bin 0 -> 26369 bytes .../_vendor/packaging/__about__.py | 21 + .../_vendor/packaging/__init__.py | 14 + .../__pycache__/__about__.cpython-35.pyc | Bin 0 -> 724 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 564 bytes .../__pycache__/_compat.cpython-35.pyc | Bin 0 -> 1040 bytes .../__pycache__/_structures.cpython-35.pyc | Bin 0 -> 2960 bytes .../__pycache__/markers.cpython-35.pyc | Bin 0 -> 8548 bytes .../__pycache__/requirements.cpython-35.pyc | Bin 0 -> 4260 bytes .../__pycache__/specifiers.cpython-35.pyc | Bin 0 -> 21160 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 486 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 11444 bytes .../_vendor/packaging/_compat.py | 30 + .../_vendor/packaging/_structures.py | 68 + .../_vendor/packaging/markers.py | 278 + .../_vendor/packaging/requirements.py | 127 + .../_vendor/packaging/specifiers.py | 774 ++ .../pkg_resources/_vendor/packaging/utils.py | 14 + .../_vendor/packaging/version.py | 393 + .../pkg_resources/_vendor/pyparsing.py | 3805 ++++++ .../pkg_resources/_vendor/six.py | 868 ++ .../pkg_resources/extern/__init__.py | 71 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 2509 bytes .../pytz-2018.9.dist-info/DESCRIPTION.rst | 584 + .../pytz-2018.9.dist-info/INSTALLER | 1 + .../pytz-2018.9.dist-info/LICENSE.txt | 19 + .../pytz-2018.9.dist-info/METADATA | 618 + .../pytz-2018.9.dist-info/RECORD | 620 + .../site-packages/pytz-2018.9.dist-info/WHEEL | 6 + .../pytz-2018.9.dist-info/metadata.json | 1 + .../pytz-2018.9.dist-info/top_level.txt | 1 + .../pytz-2018.9.dist-info/zip-safe | 1 + .../python3.5/site-packages/pytz/__init__.py | 1529 +++ .../pytz/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 29399 bytes .../__pycache__/exceptions.cpython-35.pyc | Bin 0 -> 1872 bytes .../pytz/__pycache__/lazy.cpython-35.pyc | Bin 0 -> 5912 bytes .../pytz/__pycache__/reference.cpython-35.pyc | Bin 0 -> 4162 bytes .../pytz/__pycache__/tzfile.cpython-35.pyc | Bin 0 -> 3436 bytes .../pytz/__pycache__/tzinfo.cpython-35.pyc | Bin 0 -> 15594 bytes .../site-packages/pytz/exceptions.py | 48 + env/lib/python3.5/site-packages/pytz/lazy.py | 172 + .../python3.5/site-packages/pytz/reference.py | 140 + .../python3.5/site-packages/pytz/tzfile.py | 134 + .../python3.5/site-packages/pytz/tzinfo.py | 577 + .../pytz/zoneinfo/Africa/Abidjan | Bin 0 -> 156 bytes .../site-packages/pytz/zoneinfo/Africa/Accra | Bin 0 -> 828 bytes .../pytz/zoneinfo/Africa/Addis_Ababa | Bin 0 -> 271 bytes .../pytz/zoneinfo/Africa/Algiers | Bin 0 -> 751 bytes .../site-packages/pytz/zoneinfo/Africa/Asmara | Bin 0 -> 271 bytes .../site-packages/pytz/zoneinfo/Africa/Asmera | Bin 0 -> 271 bytes .../site-packages/pytz/zoneinfo/Africa/Bamako | Bin 0 -> 156 bytes .../site-packages/pytz/zoneinfo/Africa/Bangui | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Banjul | Bin 0 -> 156 bytes .../site-packages/pytz/zoneinfo/Africa/Bissau | Bin 0 -> 194 bytes .../pytz/zoneinfo/Africa/Blantyre | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Brazzaville | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Bujumbura | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Cairo | Bin 0 -> 1963 bytes .../pytz/zoneinfo/Africa/Casablanca | Bin 0 -> 1533 bytes .../site-packages/pytz/zoneinfo/Africa/Ceuta | Bin 0 -> 2050 bytes .../pytz/zoneinfo/Africa/Conakry | Bin 0 -> 156 bytes .../site-packages/pytz/zoneinfo/Africa/Dakar | Bin 0 -> 156 bytes .../pytz/zoneinfo/Africa/Dar_es_Salaam | Bin 0 -> 271 bytes .../pytz/zoneinfo/Africa/Djibouti | Bin 0 -> 271 bytes .../site-packages/pytz/zoneinfo/Africa/Douala | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/El_Aaiun | Bin 0 -> 1403 bytes .../pytz/zoneinfo/Africa/Freetown | Bin 0 -> 156 bytes .../pytz/zoneinfo/Africa/Gaborone | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Harare | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Johannesburg | Bin 0 -> 262 bytes .../site-packages/pytz/zoneinfo/Africa/Juba | Bin 0 -> 669 bytes .../pytz/zoneinfo/Africa/Kampala | Bin 0 -> 271 bytes .../pytz/zoneinfo/Africa/Khartoum | Bin 0 -> 699 bytes .../site-packages/pytz/zoneinfo/Africa/Kigali | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Kinshasa | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Lagos | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Libreville | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Lome | Bin 0 -> 156 bytes .../site-packages/pytz/zoneinfo/Africa/Luanda | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Lubumbashi | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Lusaka | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Malabo | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Maputo | Bin 0 -> 157 bytes .../site-packages/pytz/zoneinfo/Africa/Maseru | Bin 0 -> 262 bytes .../pytz/zoneinfo/Africa/Mbabane | Bin 0 -> 262 bytes .../pytz/zoneinfo/Africa/Mogadishu | Bin 0 -> 271 bytes .../pytz/zoneinfo/Africa/Monrovia | Bin 0 -> 224 bytes .../pytz/zoneinfo/Africa/Nairobi | Bin 0 -> 271 bytes .../pytz/zoneinfo/Africa/Ndjamena | Bin 0 -> 211 bytes .../site-packages/pytz/zoneinfo/Africa/Niamey | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Nouakchott | Bin 0 -> 156 bytes .../pytz/zoneinfo/Africa/Ouagadougou | Bin 0 -> 156 bytes .../pytz/zoneinfo/Africa/Porto-Novo | Bin 0 -> 157 bytes .../pytz/zoneinfo/Africa/Sao_Tome | Bin 0 -> 254 bytes .../pytz/zoneinfo/Africa/Timbuktu | Bin 0 -> 156 bytes .../pytz/zoneinfo/Africa/Tripoli | Bin 0 -> 641 bytes .../site-packages/pytz/zoneinfo/Africa/Tunis | Bin 0 -> 701 bytes .../pytz/zoneinfo/Africa/Windhoek | Bin 0 -> 979 bytes .../site-packages/pytz/zoneinfo/America/Adak | Bin 0 -> 2356 bytes .../pytz/zoneinfo/America/Anchorage | Bin 0 -> 2371 bytes .../pytz/zoneinfo/America/Anguilla | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Antigua | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Araguaina | Bin 0 -> 896 bytes .../zoneinfo/America/Argentina/Buenos_Aires | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Argentina/Catamarca | Bin 0 -> 1100 bytes .../zoneinfo/America/Argentina/ComodRivadavia | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Argentina/Cordoba | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Argentina/Jujuy | Bin 0 -> 1072 bytes .../pytz/zoneinfo/America/Argentina/La_Rioja | Bin 0 -> 1114 bytes .../pytz/zoneinfo/America/Argentina/Mendoza | Bin 0 -> 1100 bytes .../zoneinfo/America/Argentina/Rio_Gallegos | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Argentina/Salta | Bin 0 -> 1072 bytes .../pytz/zoneinfo/America/Argentina/San_Juan | Bin 0 -> 1114 bytes .../pytz/zoneinfo/America/Argentina/San_Luis | Bin 0 -> 1130 bytes .../pytz/zoneinfo/America/Argentina/Tucuman | Bin 0 -> 1128 bytes .../pytz/zoneinfo/America/Argentina/Ushuaia | Bin 0 -> 1100 bytes .../site-packages/pytz/zoneinfo/America/Aruba | Bin 0 -> 198 bytes .../pytz/zoneinfo/America/Asuncion | Bin 0 -> 2068 bytes .../pytz/zoneinfo/America/Atikokan | Bin 0 -> 336 bytes .../site-packages/pytz/zoneinfo/America/Atka | Bin 0 -> 2356 bytes .../site-packages/pytz/zoneinfo/America/Bahia | Bin 0 -> 1036 bytes .../pytz/zoneinfo/America/Bahia_Banderas | Bin 0 -> 1574 bytes .../pytz/zoneinfo/America/Barbados | Bin 0 -> 330 bytes .../site-packages/pytz/zoneinfo/America/Belem | Bin 0 -> 588 bytes .../pytz/zoneinfo/America/Belize | Bin 0 -> 964 bytes .../pytz/zoneinfo/America/Blanc-Sablon | Bin 0 -> 298 bytes .../pytz/zoneinfo/America/Boa_Vista | Bin 0 -> 644 bytes .../pytz/zoneinfo/America/Bogota | Bin 0 -> 262 bytes .../site-packages/pytz/zoneinfo/America/Boise | Bin 0 -> 2394 bytes .../pytz/zoneinfo/America/Buenos_Aires | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Cambridge_Bay | Bin 0 -> 2084 bytes .../pytz/zoneinfo/America/Campo_Grande | Bin 0 -> 2002 bytes .../pytz/zoneinfo/America/Cancun | Bin 0 -> 802 bytes .../pytz/zoneinfo/America/Caracas | Bin 0 -> 280 bytes .../pytz/zoneinfo/America/Catamarca | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Cayenne | Bin 0 -> 210 bytes .../pytz/zoneinfo/America/Cayman | Bin 0 -> 194 bytes .../pytz/zoneinfo/America/Chicago | Bin 0 -> 3576 bytes .../pytz/zoneinfo/America/Chihuahua | Bin 0 -> 1508 bytes .../pytz/zoneinfo/America/Coral_Harbour | Bin 0 -> 336 bytes .../pytz/zoneinfo/America/Cordoba | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Costa_Rica | Bin 0 -> 332 bytes .../pytz/zoneinfo/America/Creston | Bin 0 -> 224 bytes .../pytz/zoneinfo/America/Cuiaba | Bin 0 -> 1974 bytes .../pytz/zoneinfo/America/Curacao | Bin 0 -> 198 bytes .../pytz/zoneinfo/America/Danmarkshavn | Bin 0 -> 698 bytes .../pytz/zoneinfo/America/Dawson | Bin 0 -> 2084 bytes .../pytz/zoneinfo/America/Dawson_Creek | Bin 0 -> 1050 bytes .../pytz/zoneinfo/America/Denver | Bin 0 -> 2444 bytes .../pytz/zoneinfo/America/Detroit | Bin 0 -> 2174 bytes .../pytz/zoneinfo/America/Dominica | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Edmonton | Bin 0 -> 2388 bytes .../pytz/zoneinfo/America/Eirunepe | Bin 0 -> 676 bytes .../pytz/zoneinfo/America/El_Salvador | Bin 0 -> 236 bytes .../pytz/zoneinfo/America/Ensenada | Bin 0 -> 2342 bytes .../pytz/zoneinfo/America/Fort_Nelson | Bin 0 -> 2240 bytes .../pytz/zoneinfo/America/Fort_Wayne | Bin 0 -> 1666 bytes .../pytz/zoneinfo/America/Fortaleza | Bin 0 -> 728 bytes .../pytz/zoneinfo/America/Glace_Bay | Bin 0 -> 2192 bytes .../pytz/zoneinfo/America/Godthab | Bin 0 -> 1878 bytes .../pytz/zoneinfo/America/Goose_Bay | Bin 0 -> 3210 bytes .../pytz/zoneinfo/America/Grand_Turk | Bin 0 -> 1872 bytes .../pytz/zoneinfo/America/Grenada | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Guadeloupe | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Guatemala | Bin 0 -> 292 bytes .../pytz/zoneinfo/America/Guayaquil | Bin 0 -> 262 bytes .../pytz/zoneinfo/America/Guyana | Bin 0 -> 252 bytes .../pytz/zoneinfo/America/Halifax | Bin 0 -> 3424 bytes .../pytz/zoneinfo/America/Havana | Bin 0 -> 2428 bytes .../pytz/zoneinfo/America/Hermosillo | Bin 0 -> 440 bytes .../zoneinfo/America/Indiana/Indianapolis | Bin 0 -> 1666 bytes .../pytz/zoneinfo/America/Indiana/Knox | Bin 0 -> 2428 bytes .../pytz/zoneinfo/America/Indiana/Marengo | Bin 0 -> 1722 bytes .../pytz/zoneinfo/America/Indiana/Petersburg | Bin 0 -> 1904 bytes .../pytz/zoneinfo/America/Indiana/Tell_City | Bin 0 -> 1726 bytes .../pytz/zoneinfo/America/Indiana/Vevay | Bin 0 -> 1414 bytes .../pytz/zoneinfo/America/Indiana/Vincennes | Bin 0 -> 1694 bytes .../pytz/zoneinfo/America/Indiana/Winamac | Bin 0 -> 1778 bytes .../pytz/zoneinfo/America/Indianapolis | Bin 0 -> 1666 bytes .../pytz/zoneinfo/America/Inuvik | Bin 0 -> 1914 bytes .../pytz/zoneinfo/America/Iqaluit | Bin 0 -> 2032 bytes .../pytz/zoneinfo/America/Jamaica | Bin 0 -> 498 bytes .../site-packages/pytz/zoneinfo/America/Jujuy | Bin 0 -> 1072 bytes .../pytz/zoneinfo/America/Juneau | Bin 0 -> 2353 bytes .../pytz/zoneinfo/America/Kentucky/Louisville | Bin 0 -> 2772 bytes .../pytz/zoneinfo/America/Kentucky/Monticello | Bin 0 -> 2352 bytes .../pytz/zoneinfo/America/Knox_IN | Bin 0 -> 2428 bytes .../pytz/zoneinfo/America/Kralendijk | Bin 0 -> 198 bytes .../pytz/zoneinfo/America/La_Paz | Bin 0 -> 248 bytes .../site-packages/pytz/zoneinfo/America/Lima | Bin 0 -> 422 bytes .../pytz/zoneinfo/America/Los_Angeles | Bin 0 -> 2836 bytes .../pytz/zoneinfo/America/Louisville | Bin 0 -> 2772 bytes .../pytz/zoneinfo/America/Lower_Princes | Bin 0 -> 198 bytes .../pytz/zoneinfo/America/Maceio | Bin 0 -> 756 bytes .../pytz/zoneinfo/America/Managua | Bin 0 -> 454 bytes .../pytz/zoneinfo/America/Manaus | Bin 0 -> 616 bytes .../pytz/zoneinfo/America/Marigot | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Martinique | Bin 0 -> 248 bytes .../pytz/zoneinfo/America/Matamoros | Bin 0 -> 1402 bytes .../pytz/zoneinfo/America/Mazatlan | Bin 0 -> 1550 bytes .../pytz/zoneinfo/America/Mendoza | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Menominee | Bin 0 -> 2274 bytes .../pytz/zoneinfo/America/Merida | Bin 0 -> 1442 bytes .../pytz/zoneinfo/America/Metlakatla | Bin 0 -> 1409 bytes .../pytz/zoneinfo/America/Mexico_City | Bin 0 -> 1604 bytes .../pytz/zoneinfo/America/Miquelon | Bin 0 -> 1682 bytes .../pytz/zoneinfo/America/Moncton | Bin 0 -> 3154 bytes .../pytz/zoneinfo/America/Monterrey | Bin 0 -> 1402 bytes .../pytz/zoneinfo/America/Montevideo | Bin 0 -> 1550 bytes .../pytz/zoneinfo/America/Montreal | Bin 0 -> 3494 bytes .../pytz/zoneinfo/America/Montserrat | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Nassau | Bin 0 -> 2270 bytes .../pytz/zoneinfo/America/New_York | Bin 0 -> 3536 bytes .../pytz/zoneinfo/America/Nipigon | Bin 0 -> 2122 bytes .../site-packages/pytz/zoneinfo/America/Nome | Bin 0 -> 2367 bytes .../pytz/zoneinfo/America/Noronha | Bin 0 -> 728 bytes .../pytz/zoneinfo/America/North_Dakota/Beulah | Bin 0 -> 2380 bytes .../pytz/zoneinfo/America/North_Dakota/Center | Bin 0 -> 2380 bytes .../zoneinfo/America/North_Dakota/New_Salem | Bin 0 -> 2380 bytes .../pytz/zoneinfo/America/Ojinaga | Bin 0 -> 1508 bytes .../pytz/zoneinfo/America/Panama | Bin 0 -> 194 bytes .../pytz/zoneinfo/America/Pangnirtung | Bin 0 -> 2094 bytes .../pytz/zoneinfo/America/Paramaribo | Bin 0 -> 282 bytes .../pytz/zoneinfo/America/Phoenix | Bin 0 -> 344 bytes .../pytz/zoneinfo/America/Port-au-Prince | Bin 0 -> 1446 bytes .../pytz/zoneinfo/America/Port_of_Spain | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Porto_Acre | Bin 0 -> 648 bytes .../pytz/zoneinfo/America/Porto_Velho | Bin 0 -> 588 bytes .../pytz/zoneinfo/America/Puerto_Rico | Bin 0 -> 246 bytes .../pytz/zoneinfo/America/Punta_Arenas | Bin 0 -> 1902 bytes .../pytz/zoneinfo/America/Rainy_River | Bin 0 -> 2122 bytes .../pytz/zoneinfo/America/Rankin_Inlet | Bin 0 -> 1916 bytes .../pytz/zoneinfo/America/Recife | Bin 0 -> 728 bytes .../pytz/zoneinfo/America/Regina | Bin 0 -> 980 bytes .../pytz/zoneinfo/America/Resolute | Bin 0 -> 1916 bytes .../pytz/zoneinfo/America/Rio_Branco | Bin 0 -> 648 bytes .../pytz/zoneinfo/America/Rosario | Bin 0 -> 1100 bytes .../pytz/zoneinfo/America/Santa_Isabel | Bin 0 -> 2342 bytes .../pytz/zoneinfo/America/Santarem | Bin 0 -> 618 bytes .../pytz/zoneinfo/America/Santiago | Bin 0 -> 2529 bytes .../pytz/zoneinfo/America/Santo_Domingo | Bin 0 -> 482 bytes .../pytz/zoneinfo/America/Sao_Paulo | Bin 0 -> 2002 bytes .../pytz/zoneinfo/America/Scoresbysund | Bin 0 -> 1916 bytes .../pytz/zoneinfo/America/Shiprock | Bin 0 -> 2444 bytes .../site-packages/pytz/zoneinfo/America/Sitka | Bin 0 -> 2329 bytes .../pytz/zoneinfo/America/St_Barthelemy | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/St_Johns | Bin 0 -> 3655 bytes .../pytz/zoneinfo/America/St_Kitts | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/St_Lucia | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/St_Thomas | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/St_Vincent | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Swift_Current | Bin 0 -> 560 bytes .../pytz/zoneinfo/America/Tegucigalpa | Bin 0 -> 264 bytes .../site-packages/pytz/zoneinfo/America/Thule | Bin 0 -> 1514 bytes .../pytz/zoneinfo/America/Thunder_Bay | Bin 0 -> 2202 bytes .../pytz/zoneinfo/America/Tijuana | Bin 0 -> 2342 bytes .../pytz/zoneinfo/America/Toronto | Bin 0 -> 3494 bytes .../pytz/zoneinfo/America/Tortola | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Vancouver | Bin 0 -> 2892 bytes .../pytz/zoneinfo/America/Virgin | Bin 0 -> 156 bytes .../pytz/zoneinfo/America/Whitehorse | Bin 0 -> 2084 bytes .../pytz/zoneinfo/America/Winnipeg | Bin 0 -> 2882 bytes .../pytz/zoneinfo/America/Yakutat | Bin 0 -> 2305 bytes .../pytz/zoneinfo/America/Yellowknife | Bin 0 -> 1966 bytes .../pytz/zoneinfo/Antarctica/Casey | Bin 0 -> 297 bytes .../pytz/zoneinfo/Antarctica/Davis | Bin 0 -> 297 bytes .../pytz/zoneinfo/Antarctica/DumontDUrville | Bin 0 -> 202 bytes .../pytz/zoneinfo/Antarctica/Macquarie | Bin 0 -> 1534 bytes .../pytz/zoneinfo/Antarctica/Mawson | Bin 0 -> 211 bytes .../pytz/zoneinfo/Antarctica/McMurdo | Bin 0 -> 2451 bytes .../pytz/zoneinfo/Antarctica/Palmer | Bin 0 -> 1418 bytes .../pytz/zoneinfo/Antarctica/Rothera | Bin 0 -> 172 bytes .../pytz/zoneinfo/Antarctica/South_Pole | Bin 0 -> 2451 bytes .../pytz/zoneinfo/Antarctica/Syowa | Bin 0 -> 173 bytes .../pytz/zoneinfo/Antarctica/Troll | Bin 0 -> 1162 bytes .../pytz/zoneinfo/Antarctica/Vostok | Bin 0 -> 173 bytes .../pytz/zoneinfo/Arctic/Longyearbyen | Bin 0 -> 2242 bytes .../site-packages/pytz/zoneinfo/Asia/Aden | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Asia/Almaty | Bin 0 -> 1017 bytes .../site-packages/pytz/zoneinfo/Asia/Amman | Bin 0 -> 1863 bytes .../site-packages/pytz/zoneinfo/Asia/Anadyr | Bin 0 -> 1208 bytes .../site-packages/pytz/zoneinfo/Asia/Aqtau | Bin 0 -> 1003 bytes .../site-packages/pytz/zoneinfo/Asia/Aqtobe | Bin 0 -> 1033 bytes .../site-packages/pytz/zoneinfo/Asia/Ashgabat | Bin 0 -> 637 bytes .../pytz/zoneinfo/Asia/Ashkhabad | Bin 0 -> 637 bytes .../site-packages/pytz/zoneinfo/Asia/Atyrau | Bin 0 -> 1011 bytes .../site-packages/pytz/zoneinfo/Asia/Baghdad | Bin 0 -> 995 bytes .../site-packages/pytz/zoneinfo/Asia/Bahrain | Bin 0 -> 211 bytes .../site-packages/pytz/zoneinfo/Asia/Baku | Bin 0 -> 1255 bytes .../site-packages/pytz/zoneinfo/Asia/Bangkok | Bin 0 -> 211 bytes .../site-packages/pytz/zoneinfo/Asia/Barnaul | Bin 0 -> 1241 bytes .../site-packages/pytz/zoneinfo/Asia/Beirut | Bin 0 -> 2166 bytes .../site-packages/pytz/zoneinfo/Asia/Bishkek | Bin 0 -> 999 bytes .../site-packages/pytz/zoneinfo/Asia/Brunei | Bin 0 -> 215 bytes .../site-packages/pytz/zoneinfo/Asia/Calcutta | Bin 0 -> 303 bytes .../site-packages/pytz/zoneinfo/Asia/Chita | Bin 0 -> 1243 bytes .../pytz/zoneinfo/Asia/Choibalsan | Bin 0 -> 977 bytes .../pytz/zoneinfo/Asia/Chongqing | Bin 0 -> 545 bytes .../pytz/zoneinfo/Asia/Chungking | Bin 0 -> 545 bytes .../site-packages/pytz/zoneinfo/Asia/Colombo | Bin 0 -> 404 bytes .../site-packages/pytz/zoneinfo/Asia/Dacca | Bin 0 -> 361 bytes .../site-packages/pytz/zoneinfo/Asia/Damascus | Bin 0 -> 2306 bytes .../site-packages/pytz/zoneinfo/Asia/Dhaka | Bin 0 -> 361 bytes .../site-packages/pytz/zoneinfo/Asia/Dili | Bin 0 -> 239 bytes .../site-packages/pytz/zoneinfo/Asia/Dubai | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Asia/Dushanbe | Bin 0 -> 607 bytes .../pytz/zoneinfo/Asia/Famagusta | Bin 0 -> 2028 bytes .../site-packages/pytz/zoneinfo/Asia/Gaza | Bin 0 -> 2286 bytes .../site-packages/pytz/zoneinfo/Asia/Harbin | Bin 0 -> 545 bytes .../site-packages/pytz/zoneinfo/Asia/Hebron | Bin 0 -> 2314 bytes .../pytz/zoneinfo/Asia/Ho_Chi_Minh | Bin 0 -> 375 bytes .../pytz/zoneinfo/Asia/Hong_Kong | Bin 0 -> 1191 bytes .../site-packages/pytz/zoneinfo/Asia/Hovd | Bin 0 -> 907 bytes .../site-packages/pytz/zoneinfo/Asia/Irkutsk | Bin 0 -> 1267 bytes .../site-packages/pytz/zoneinfo/Asia/Istanbul | Bin 0 -> 2157 bytes .../site-packages/pytz/zoneinfo/Asia/Jakarta | Bin 0 -> 383 bytes .../site-packages/pytz/zoneinfo/Asia/Jayapura | Bin 0 -> 237 bytes .../pytz/zoneinfo/Asia/Jerusalem | Bin 0 -> 2256 bytes .../site-packages/pytz/zoneinfo/Asia/Kabul | Bin 0 -> 220 bytes .../pytz/zoneinfo/Asia/Kamchatka | Bin 0 -> 1184 bytes .../site-packages/pytz/zoneinfo/Asia/Karachi | Bin 0 -> 403 bytes .../site-packages/pytz/zoneinfo/Asia/Kashgar | Bin 0 -> 173 bytes .../pytz/zoneinfo/Asia/Kathmandu | Bin 0 -> 224 bytes .../site-packages/pytz/zoneinfo/Asia/Katmandu | Bin 0 -> 224 bytes .../site-packages/pytz/zoneinfo/Asia/Khandyga | Bin 0 -> 1297 bytes .../site-packages/pytz/zoneinfo/Asia/Kolkata | Bin 0 -> 303 bytes .../pytz/zoneinfo/Asia/Krasnoyarsk | Bin 0 -> 1229 bytes .../pytz/zoneinfo/Asia/Kuala_Lumpur | Bin 0 -> 415 bytes .../site-packages/pytz/zoneinfo/Asia/Kuching | Bin 0 -> 507 bytes .../site-packages/pytz/zoneinfo/Asia/Kuwait | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Asia/Macao | Bin 0 -> 1241 bytes .../site-packages/pytz/zoneinfo/Asia/Macau | Bin 0 -> 1241 bytes .../site-packages/pytz/zoneinfo/Asia/Magadan | Bin 0 -> 1244 bytes .../site-packages/pytz/zoneinfo/Asia/Makassar | Bin 0 -> 274 bytes .../site-packages/pytz/zoneinfo/Asia/Manila | Bin 0 -> 350 bytes .../site-packages/pytz/zoneinfo/Asia/Muscat | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Asia/Nicosia | Bin 0 -> 2002 bytes .../pytz/zoneinfo/Asia/Novokuznetsk | Bin 0 -> 1183 bytes .../pytz/zoneinfo/Asia/Novosibirsk | Bin 0 -> 1241 bytes .../site-packages/pytz/zoneinfo/Asia/Omsk | Bin 0 -> 1229 bytes .../site-packages/pytz/zoneinfo/Asia/Oral | Bin 0 -> 1025 bytes .../pytz/zoneinfo/Asia/Phnom_Penh | Bin 0 -> 211 bytes .../pytz/zoneinfo/Asia/Pontianak | Bin 0 -> 381 bytes .../pytz/zoneinfo/Asia/Pyongyang | Bin 0 -> 253 bytes .../site-packages/pytz/zoneinfo/Asia/Qatar | Bin 0 -> 211 bytes .../site-packages/pytz/zoneinfo/Asia/Qostanay | Bin 0 -> 1033 bytes .../pytz/zoneinfo/Asia/Qyzylorda | Bin 0 -> 1047 bytes .../site-packages/pytz/zoneinfo/Asia/Rangoon | Bin 0 -> 288 bytes .../site-packages/pytz/zoneinfo/Asia/Riyadh | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Asia/Saigon | Bin 0 -> 375 bytes .../site-packages/pytz/zoneinfo/Asia/Sakhalin | Bin 0 -> 1220 bytes .../pytz/zoneinfo/Asia/Samarkand | Bin 0 -> 605 bytes .../site-packages/pytz/zoneinfo/Asia/Seoul | Bin 0 -> 517 bytes .../site-packages/pytz/zoneinfo/Asia/Shanghai | Bin 0 -> 545 bytes .../pytz/zoneinfo/Asia/Singapore | Bin 0 -> 415 bytes .../pytz/zoneinfo/Asia/Srednekolymsk | Bin 0 -> 1230 bytes .../site-packages/pytz/zoneinfo/Asia/Taipei | Bin 0 -> 781 bytes .../site-packages/pytz/zoneinfo/Asia/Tashkent | Bin 0 -> 621 bytes .../site-packages/pytz/zoneinfo/Asia/Tbilisi | Bin 0 -> 1071 bytes .../site-packages/pytz/zoneinfo/Asia/Tehran | Bin 0 -> 2610 bytes .../site-packages/pytz/zoneinfo/Asia/Tel_Aviv | Bin 0 -> 2256 bytes .../site-packages/pytz/zoneinfo/Asia/Thimbu | Bin 0 -> 215 bytes .../site-packages/pytz/zoneinfo/Asia/Thimphu | Bin 0 -> 215 bytes .../site-packages/pytz/zoneinfo/Asia/Tokyo | Bin 0 -> 309 bytes .../site-packages/pytz/zoneinfo/Asia/Tomsk | Bin 0 -> 1241 bytes .../pytz/zoneinfo/Asia/Ujung_Pandang | Bin 0 -> 274 bytes .../pytz/zoneinfo/Asia/Ulaanbaatar | Bin 0 -> 907 bytes .../pytz/zoneinfo/Asia/Ulan_Bator | Bin 0 -> 907 bytes .../site-packages/pytz/zoneinfo/Asia/Urumqi | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Asia/Ust-Nera | Bin 0 -> 1276 bytes .../pytz/zoneinfo/Asia/Vientiane | Bin 0 -> 211 bytes .../pytz/zoneinfo/Asia/Vladivostok | Bin 0 -> 1230 bytes .../site-packages/pytz/zoneinfo/Asia/Yakutsk | Bin 0 -> 1229 bytes .../site-packages/pytz/zoneinfo/Asia/Yangon | Bin 0 -> 288 bytes .../pytz/zoneinfo/Asia/Yekaterinburg | Bin 0 -> 1267 bytes .../site-packages/pytz/zoneinfo/Asia/Yerevan | Bin 0 -> 1199 bytes .../pytz/zoneinfo/Atlantic/Azores | Bin 0 -> 3484 bytes .../pytz/zoneinfo/Atlantic/Bermuda | Bin 0 -> 1990 bytes .../pytz/zoneinfo/Atlantic/Canary | Bin 0 -> 1897 bytes .../pytz/zoneinfo/Atlantic/Cape_Verde | Bin 0 -> 270 bytes .../pytz/zoneinfo/Atlantic/Faeroe | Bin 0 -> 1815 bytes .../pytz/zoneinfo/Atlantic/Faroe | Bin 0 -> 1815 bytes .../pytz/zoneinfo/Atlantic/Jan_Mayen | Bin 0 -> 2242 bytes .../pytz/zoneinfo/Atlantic/Madeira | Bin 0 -> 3475 bytes .../pytz/zoneinfo/Atlantic/Reykjavik | Bin 0 -> 1174 bytes .../pytz/zoneinfo/Atlantic/South_Georgia | Bin 0 -> 172 bytes .../pytz/zoneinfo/Atlantic/St_Helena | Bin 0 -> 156 bytes .../pytz/zoneinfo/Atlantic/Stanley | Bin 0 -> 1242 bytes .../site-packages/pytz/zoneinfo/Australia/ACT | Bin 0 -> 2214 bytes .../pytz/zoneinfo/Australia/Adelaide | Bin 0 -> 2233 bytes .../pytz/zoneinfo/Australia/Brisbane | Bin 0 -> 443 bytes .../pytz/zoneinfo/Australia/Broken_Hill | Bin 0 -> 2269 bytes .../pytz/zoneinfo/Australia/Canberra | Bin 0 -> 2214 bytes .../pytz/zoneinfo/Australia/Currie | Bin 0 -> 2214 bytes .../pytz/zoneinfo/Australia/Darwin | Bin 0 -> 318 bytes .../pytz/zoneinfo/Australia/Eucla | Bin 0 -> 494 bytes .../pytz/zoneinfo/Australia/Hobart | Bin 0 -> 2326 bytes .../site-packages/pytz/zoneinfo/Australia/LHI | Bin 0 -> 1880 bytes .../pytz/zoneinfo/Australia/Lindeman | Bin 0 -> 513 bytes .../pytz/zoneinfo/Australia/Lord_Howe | Bin 0 -> 1880 bytes .../pytz/zoneinfo/Australia/Melbourne | Bin 0 -> 2214 bytes .../site-packages/pytz/zoneinfo/Australia/NSW | Bin 0 -> 2214 bytes .../pytz/zoneinfo/Australia/North | Bin 0 -> 318 bytes .../pytz/zoneinfo/Australia/Perth | Bin 0 -> 470 bytes .../pytz/zoneinfo/Australia/Queensland | Bin 0 -> 443 bytes .../pytz/zoneinfo/Australia/South | Bin 0 -> 2233 bytes .../pytz/zoneinfo/Australia/Sydney | Bin 0 -> 2214 bytes .../pytz/zoneinfo/Australia/Tasmania | Bin 0 -> 2326 bytes .../pytz/zoneinfo/Australia/Victoria | Bin 0 -> 2214 bytes .../pytz/zoneinfo/Australia/West | Bin 0 -> 470 bytes .../pytz/zoneinfo/Australia/Yancowinna | Bin 0 -> 2269 bytes .../site-packages/pytz/zoneinfo/Brazil/Acre | Bin 0 -> 648 bytes .../pytz/zoneinfo/Brazil/DeNoronha | Bin 0 -> 728 bytes .../site-packages/pytz/zoneinfo/Brazil/East | Bin 0 -> 2002 bytes .../site-packages/pytz/zoneinfo/Brazil/West | Bin 0 -> 616 bytes .../python3.5/site-packages/pytz/zoneinfo/CET | Bin 0 -> 2102 bytes .../site-packages/pytz/zoneinfo/CST6CDT | Bin 0 -> 2294 bytes .../pytz/zoneinfo/Canada/Atlantic | Bin 0 -> 3424 bytes .../pytz/zoneinfo/Canada/Central | Bin 0 -> 2882 bytes .../pytz/zoneinfo/Canada/Eastern | Bin 0 -> 3494 bytes .../pytz/zoneinfo/Canada/Mountain | Bin 0 -> 2388 bytes .../pytz/zoneinfo/Canada/Newfoundland | Bin 0 -> 3655 bytes .../pytz/zoneinfo/Canada/Pacific | Bin 0 -> 2892 bytes .../pytz/zoneinfo/Canada/Saskatchewan | Bin 0 -> 980 bytes .../site-packages/pytz/zoneinfo/Canada/Yukon | Bin 0 -> 2084 bytes .../pytz/zoneinfo/Chile/Continental | Bin 0 -> 2529 bytes .../pytz/zoneinfo/Chile/EasterIsland | Bin 0 -> 2233 bytes .../site-packages/pytz/zoneinfo/Cuba | Bin 0 -> 2428 bytes .../python3.5/site-packages/pytz/zoneinfo/EET | Bin 0 -> 1876 bytes .../python3.5/site-packages/pytz/zoneinfo/EST | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/EST5EDT | Bin 0 -> 2294 bytes .../site-packages/pytz/zoneinfo/Egypt | Bin 0 -> 1963 bytes .../site-packages/pytz/zoneinfo/Eire | Bin 0 -> 3522 bytes .../site-packages/pytz/zoneinfo/Etc/GMT | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+0 | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+1 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+10 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+11 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+12 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+2 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+3 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+4 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+5 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+6 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+7 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+8 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+9 | Bin 0 -> 120 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-0 | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-1 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-10 | Bin 0 -> 122 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-11 | Bin 0 -> 122 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-12 | Bin 0 -> 122 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-13 | Bin 0 -> 122 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-14 | Bin 0 -> 122 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-2 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-3 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-4 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-5 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-6 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-7 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-8 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-9 | Bin 0 -> 121 bytes .../site-packages/pytz/zoneinfo/Etc/GMT0 | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/Greenwich | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/UCT | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/UTC | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/Universal | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Etc/Zulu | Bin 0 -> 118 bytes .../pytz/zoneinfo/Europe/Amsterdam | Bin 0 -> 2940 bytes .../pytz/zoneinfo/Europe/Andorra | Bin 0 -> 1742 bytes .../pytz/zoneinfo/Europe/Astrakhan | Bin 0 -> 1183 bytes .../site-packages/pytz/zoneinfo/Europe/Athens | Bin 0 -> 2262 bytes .../pytz/zoneinfo/Europe/Belfast | Bin 0 -> 3678 bytes .../pytz/zoneinfo/Europe/Belgrade | Bin 0 -> 1948 bytes .../site-packages/pytz/zoneinfo/Europe/Berlin | Bin 0 -> 2326 bytes .../pytz/zoneinfo/Europe/Bratislava | Bin 0 -> 2329 bytes .../pytz/zoneinfo/Europe/Brussels | Bin 0 -> 2961 bytes .../pytz/zoneinfo/Europe/Bucharest | Bin 0 -> 2212 bytes .../pytz/zoneinfo/Europe/Budapest | Bin 0 -> 2396 bytes .../pytz/zoneinfo/Europe/Busingen | Bin 0 -> 1909 bytes .../pytz/zoneinfo/Europe/Chisinau | Bin 0 -> 2436 bytes .../pytz/zoneinfo/Europe/Copenhagen | Bin 0 -> 2151 bytes .../site-packages/pytz/zoneinfo/Europe/Dublin | Bin 0 -> 3522 bytes .../pytz/zoneinfo/Europe/Gibraltar | Bin 0 -> 3052 bytes .../pytz/zoneinfo/Europe/Guernsey | Bin 0 -> 3678 bytes .../pytz/zoneinfo/Europe/Helsinki | Bin 0 -> 1900 bytes .../pytz/zoneinfo/Europe/Isle_of_Man | Bin 0 -> 3678 bytes .../pytz/zoneinfo/Europe/Istanbul | Bin 0 -> 2157 bytes .../site-packages/pytz/zoneinfo/Europe/Jersey | Bin 0 -> 3678 bytes .../pytz/zoneinfo/Europe/Kaliningrad | Bin 0 -> 1509 bytes .../site-packages/pytz/zoneinfo/Europe/Kiev | Bin 0 -> 2088 bytes .../site-packages/pytz/zoneinfo/Europe/Kirov | Bin 0 -> 1153 bytes .../site-packages/pytz/zoneinfo/Europe/Lisbon | Bin 0 -> 3469 bytes .../pytz/zoneinfo/Europe/Ljubljana | Bin 0 -> 1948 bytes .../site-packages/pytz/zoneinfo/Europe/London | Bin 0 -> 3678 bytes .../pytz/zoneinfo/Europe/Luxembourg | Bin 0 -> 2960 bytes .../site-packages/pytz/zoneinfo/Europe/Madrid | Bin 0 -> 2628 bytes .../site-packages/pytz/zoneinfo/Europe/Malta | Bin 0 -> 2620 bytes .../pytz/zoneinfo/Europe/Mariehamn | Bin 0 -> 1900 bytes .../site-packages/pytz/zoneinfo/Europe/Minsk | Bin 0 -> 1361 bytes .../site-packages/pytz/zoneinfo/Europe/Monaco | Bin 0 -> 2944 bytes .../site-packages/pytz/zoneinfo/Europe/Moscow | Bin 0 -> 1535 bytes .../pytz/zoneinfo/Europe/Nicosia | Bin 0 -> 2002 bytes .../site-packages/pytz/zoneinfo/Europe/Oslo | Bin 0 -> 2242 bytes .../site-packages/pytz/zoneinfo/Europe/Paris | Bin 0 -> 2962 bytes .../pytz/zoneinfo/Europe/Podgorica | Bin 0 -> 1948 bytes .../site-packages/pytz/zoneinfo/Europe/Prague | Bin 0 -> 2329 bytes .../site-packages/pytz/zoneinfo/Europe/Riga | Bin 0 -> 2226 bytes .../site-packages/pytz/zoneinfo/Europe/Rome | Bin 0 -> 2683 bytes .../site-packages/pytz/zoneinfo/Europe/Samara | Bin 0 -> 1215 bytes .../pytz/zoneinfo/Europe/San_Marino | Bin 0 -> 2683 bytes .../pytz/zoneinfo/Europe/Sarajevo | Bin 0 -> 1948 bytes .../pytz/zoneinfo/Europe/Saratov | Bin 0 -> 1183 bytes .../pytz/zoneinfo/Europe/Simferopol | Bin 0 -> 1481 bytes .../site-packages/pytz/zoneinfo/Europe/Skopje | Bin 0 -> 1948 bytes .../site-packages/pytz/zoneinfo/Europe/Sofia | Bin 0 -> 2121 bytes .../pytz/zoneinfo/Europe/Stockholm | Bin 0 -> 1909 bytes .../pytz/zoneinfo/Europe/Tallinn | Bin 0 -> 2178 bytes .../site-packages/pytz/zoneinfo/Europe/Tirane | Bin 0 -> 2084 bytes .../pytz/zoneinfo/Europe/Tiraspol | Bin 0 -> 2436 bytes .../pytz/zoneinfo/Europe/Ulyanovsk | Bin 0 -> 1267 bytes .../pytz/zoneinfo/Europe/Uzhgorod | Bin 0 -> 2094 bytes .../site-packages/pytz/zoneinfo/Europe/Vaduz | Bin 0 -> 1909 bytes .../pytz/zoneinfo/Europe/Vatican | Bin 0 -> 2683 bytes .../site-packages/pytz/zoneinfo/Europe/Vienna | Bin 0 -> 2228 bytes .../pytz/zoneinfo/Europe/Vilnius | Bin 0 -> 2190 bytes .../pytz/zoneinfo/Europe/Volgograd | Bin 0 -> 1183 bytes .../site-packages/pytz/zoneinfo/Europe/Warsaw | Bin 0 -> 2696 bytes .../site-packages/pytz/zoneinfo/Europe/Zagreb | Bin 0 -> 1948 bytes .../pytz/zoneinfo/Europe/Zaporozhye | Bin 0 -> 2106 bytes .../site-packages/pytz/zoneinfo/Europe/Zurich | Bin 0 -> 1909 bytes .../site-packages/pytz/zoneinfo/Factory | Bin 0 -> 120 bytes .../python3.5/site-packages/pytz/zoneinfo/GB | Bin 0 -> 3678 bytes .../site-packages/pytz/zoneinfo/GB-Eire | Bin 0 -> 3678 bytes .../python3.5/site-packages/pytz/zoneinfo/GMT | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/GMT+0 | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/GMT-0 | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/GMT0 | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Greenwich | Bin 0 -> 118 bytes .../python3.5/site-packages/pytz/zoneinfo/HST | Bin 0 -> 119 bytes .../site-packages/pytz/zoneinfo/Hongkong | Bin 0 -> 1191 bytes .../site-packages/pytz/zoneinfo/Iceland | Bin 0 -> 1174 bytes .../pytz/zoneinfo/Indian/Antananarivo | Bin 0 -> 271 bytes .../site-packages/pytz/zoneinfo/Indian/Chagos | Bin 0 -> 211 bytes .../pytz/zoneinfo/Indian/Christmas | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Indian/Cocos | Bin 0 -> 182 bytes .../site-packages/pytz/zoneinfo/Indian/Comoro | Bin 0 -> 271 bytes .../pytz/zoneinfo/Indian/Kerguelen | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Indian/Mahe | Bin 0 -> 173 bytes .../pytz/zoneinfo/Indian/Maldives | Bin 0 -> 211 bytes .../pytz/zoneinfo/Indian/Mauritius | Bin 0 -> 253 bytes .../pytz/zoneinfo/Indian/Mayotte | Bin 0 -> 271 bytes .../pytz/zoneinfo/Indian/Reunion | Bin 0 -> 173 bytes .../site-packages/pytz/zoneinfo/Iran | Bin 0 -> 2610 bytes .../site-packages/pytz/zoneinfo/Israel | Bin 0 -> 2256 bytes .../site-packages/pytz/zoneinfo/Jamaica | Bin 0 -> 498 bytes .../site-packages/pytz/zoneinfo/Japan | Bin 0 -> 309 bytes .../site-packages/pytz/zoneinfo/Kwajalein | Bin 0 -> 340 bytes .../site-packages/pytz/zoneinfo/Libya | Bin 0 -> 641 bytes .../python3.5/site-packages/pytz/zoneinfo/MET | Bin 0 -> 2102 bytes .../python3.5/site-packages/pytz/zoneinfo/MST | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/MST7MDT | Bin 0 -> 2294 bytes .../pytz/zoneinfo/Mexico/BajaNorte | Bin 0 -> 2342 bytes .../pytz/zoneinfo/Mexico/BajaSur | Bin 0 -> 1550 bytes .../pytz/zoneinfo/Mexico/General | Bin 0 -> 1604 bytes .../python3.5/site-packages/pytz/zoneinfo/NZ | Bin 0 -> 2451 bytes .../site-packages/pytz/zoneinfo/NZ-CHAT | Bin 0 -> 2078 bytes .../site-packages/pytz/zoneinfo/Navajo | Bin 0 -> 2444 bytes .../python3.5/site-packages/pytz/zoneinfo/PRC | Bin 0 -> 545 bytes .../site-packages/pytz/zoneinfo/PST8PDT | Bin 0 -> 2294 bytes .../site-packages/pytz/zoneinfo/Pacific/Apia | Bin 0 -> 1125 bytes .../pytz/zoneinfo/Pacific/Auckland | Bin 0 -> 2451 bytes .../pytz/zoneinfo/Pacific/Bougainville | Bin 0 -> 286 bytes .../pytz/zoneinfo/Pacific/Chatham | Bin 0 -> 2078 bytes .../site-packages/pytz/zoneinfo/Pacific/Chuuk | Bin 0 -> 287 bytes .../pytz/zoneinfo/Pacific/Easter | Bin 0 -> 2233 bytes .../site-packages/pytz/zoneinfo/Pacific/Efate | Bin 0 -> 478 bytes .../pytz/zoneinfo/Pacific/Enderbury | Bin 0 -> 250 bytes .../pytz/zoneinfo/Pacific/Fakaofo | Bin 0 -> 212 bytes .../site-packages/pytz/zoneinfo/Pacific/Fiji | Bin 0 -> 1090 bytes .../pytz/zoneinfo/Pacific/Funafuti | Bin 0 -> 174 bytes .../pytz/zoneinfo/Pacific/Galapagos | Bin 0 -> 254 bytes .../pytz/zoneinfo/Pacific/Gambier | Bin 0 -> 172 bytes .../pytz/zoneinfo/Pacific/Guadalcanal | Bin 0 -> 174 bytes .../site-packages/pytz/zoneinfo/Pacific/Guam | Bin 0 -> 516 bytes .../pytz/zoneinfo/Pacific/Honolulu | Bin 0 -> 329 bytes .../pytz/zoneinfo/Pacific/Johnston | Bin 0 -> 329 bytes .../pytz/zoneinfo/Pacific/Kiritimati | Bin 0 -> 254 bytes .../pytz/zoneinfo/Pacific/Kosrae | Bin 0 -> 377 bytes .../pytz/zoneinfo/Pacific/Kwajalein | Bin 0 -> 340 bytes .../pytz/zoneinfo/Pacific/Majuro | Bin 0 -> 330 bytes .../pytz/zoneinfo/Pacific/Marquesas | Bin 0 -> 181 bytes .../pytz/zoneinfo/Pacific/Midway | Bin 0 -> 187 bytes .../site-packages/pytz/zoneinfo/Pacific/Nauru | Bin 0 -> 268 bytes .../site-packages/pytz/zoneinfo/Pacific/Niue | Bin 0 -> 257 bytes .../pytz/zoneinfo/Pacific/Norfolk | Bin 0 -> 314 bytes .../pytz/zoneinfo/Pacific/Noumea | Bin 0 -> 314 bytes .../pytz/zoneinfo/Pacific/Pago_Pago | Bin 0 -> 187 bytes .../site-packages/pytz/zoneinfo/Pacific/Palau | Bin 0 -> 190 bytes .../pytz/zoneinfo/Pacific/Pitcairn | Bin 0 -> 214 bytes .../pytz/zoneinfo/Pacific/Pohnpei | Bin 0 -> 325 bytes .../pytz/zoneinfo/Pacific/Ponape | Bin 0 -> 325 bytes .../pytz/zoneinfo/Pacific/Port_Moresby | Bin 0 -> 196 bytes .../pytz/zoneinfo/Pacific/Rarotonga | Bin 0 -> 593 bytes .../pytz/zoneinfo/Pacific/Saipan | Bin 0 -> 516 bytes .../site-packages/pytz/zoneinfo/Pacific/Samoa | Bin 0 -> 187 bytes .../pytz/zoneinfo/Pacific/Tahiti | Bin 0 -> 173 bytes .../pytz/zoneinfo/Pacific/Tarawa | Bin 0 -> 174 bytes .../pytz/zoneinfo/Pacific/Tongatapu | Bin 0 -> 384 bytes .../site-packages/pytz/zoneinfo/Pacific/Truk | Bin 0 -> 287 bytes .../site-packages/pytz/zoneinfo/Pacific/Wake | Bin 0 -> 174 bytes .../pytz/zoneinfo/Pacific/Wallis | Bin 0 -> 174 bytes .../site-packages/pytz/zoneinfo/Pacific/Yap | Bin 0 -> 287 bytes .../site-packages/pytz/zoneinfo/Poland | Bin 0 -> 2696 bytes .../site-packages/pytz/zoneinfo/Portugal | Bin 0 -> 3469 bytes .../python3.5/site-packages/pytz/zoneinfo/ROC | Bin 0 -> 781 bytes .../python3.5/site-packages/pytz/zoneinfo/ROK | Bin 0 -> 517 bytes .../site-packages/pytz/zoneinfo/Singapore | Bin 0 -> 415 bytes .../site-packages/pytz/zoneinfo/Turkey | Bin 0 -> 2157 bytes .../python3.5/site-packages/pytz/zoneinfo/UCT | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/US/Alaska | Bin 0 -> 2371 bytes .../site-packages/pytz/zoneinfo/US/Aleutian | Bin 0 -> 2356 bytes .../site-packages/pytz/zoneinfo/US/Arizona | Bin 0 -> 344 bytes .../site-packages/pytz/zoneinfo/US/Central | Bin 0 -> 3576 bytes .../pytz/zoneinfo/US/East-Indiana | Bin 0 -> 1666 bytes .../site-packages/pytz/zoneinfo/US/Eastern | Bin 0 -> 3536 bytes .../site-packages/pytz/zoneinfo/US/Hawaii | Bin 0 -> 329 bytes .../pytz/zoneinfo/US/Indiana-Starke | Bin 0 -> 2428 bytes .../site-packages/pytz/zoneinfo/US/Michigan | Bin 0 -> 2174 bytes .../site-packages/pytz/zoneinfo/US/Mountain | Bin 0 -> 2444 bytes .../site-packages/pytz/zoneinfo/US/Pacific | Bin 0 -> 2836 bytes .../site-packages/pytz/zoneinfo/US/Samoa | Bin 0 -> 187 bytes .../python3.5/site-packages/pytz/zoneinfo/UTC | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/Universal | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/W-SU | Bin 0 -> 1535 bytes .../python3.5/site-packages/pytz/zoneinfo/WET | Bin 0 -> 1873 bytes .../site-packages/pytz/zoneinfo/Zulu | Bin 0 -> 118 bytes .../site-packages/pytz/zoneinfo/iso3166.tab | 274 + .../site-packages/pytz/zoneinfo/leapseconds | 69 + .../site-packages/pytz/zoneinfo/posixrules | Bin 0 -> 3536 bytes .../site-packages/pytz/zoneinfo/tzdata.zi | 4323 +++++++ .../site-packages/pytz/zoneinfo/zone.tab | 449 + .../site-packages/pytz/zoneinfo/zone1970.tab | 383 + .../DESCRIPTION.rst | 238 + .../setuptools-20.7.0.dist-info/INSTALLER | 1 + .../setuptools-20.7.0.dist-info/METADATA | 263 + .../setuptools-20.7.0.dist-info/RECORD | 100 + .../setuptools-20.7.0.dist-info/WHEEL | 6 + .../dependency_links.txt | 2 + .../entry_points.txt | 61 + .../setuptools-20.7.0.dist-info/metadata.json | 1 + .../setuptools-20.7.0.dist-info/top_level.txt | 3 + .../setuptools-20.7.0.dist-info/zip-safe | 1 + .../site-packages/setuptools/__init__.py | 169 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 6816 bytes .../__pycache__/archive_util.cpython-35.pyc | Bin 0 -> 5473 bytes .../__pycache__/depends.cpython-35.pyc | Bin 0 -> 6263 bytes .../__pycache__/dist.cpython-35.pyc | Bin 0 -> 33137 bytes .../__pycache__/extension.cpython-35.pyc | Bin 0 -> 2062 bytes .../__pycache__/launch.cpython-35.pyc | Bin 0 -> 871 bytes .../__pycache__/lib2to3_ex.cpython-35.pyc | Bin 0 -> 2555 bytes .../__pycache__/msvc9_support.cpython-35.pyc | Bin 0 -> 1811 bytes .../__pycache__/package_index.cpython-35.pyc | Bin 0 -> 35107 bytes .../__pycache__/py26compat.cpython-35.pyc | Bin 0 -> 824 bytes .../__pycache__/py27compat.cpython-35.pyc | Bin 0 -> 589 bytes .../__pycache__/py31compat.cpython-35.pyc | Bin 0 -> 1980 bytes .../__pycache__/sandbox.cpython-35.pyc | Bin 0 -> 16518 bytes .../__pycache__/site-patch.cpython-35.pyc | Bin 0 -> 1662 bytes .../__pycache__/ssl_support.cpython-35.pyc | Bin 0 -> 6808 bytes .../__pycache__/unicode_utils.cpython-35.pyc | Bin 0 -> 1212 bytes .../__pycache__/utils.cpython-35.pyc | Bin 0 -> 447 bytes .../__pycache__/version.cpython-35.pyc | Bin 0 -> 292 bytes .../windows_support.cpython-35.pyc | Bin 0 -> 1029 bytes .../site-packages/setuptools/archive_util.py | 170 + .../setuptools/command/__init__.py | 18 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 719 bytes .../command/__pycache__/alias.cpython-35.pyc | Bin 0 -> 2608 bytes .../__pycache__/bdist_egg.cpython-35.pyc | Bin 0 -> 14955 bytes .../__pycache__/bdist_rpm.cpython-35.pyc | Bin 0 -> 1831 bytes .../__pycache__/bdist_wininst.cpython-35.pyc | Bin 0 -> 991 bytes .../__pycache__/build_ext.cpython-35.pyc | Bin 0 -> 9821 bytes .../__pycache__/build_py.cpython-35.pyc | Bin 0 -> 8059 bytes .../__pycache__/develop.cpython-35.pyc | Bin 0 -> 6395 bytes .../__pycache__/easy_install.cpython-35.pyc | Bin 0 -> 71234 bytes .../__pycache__/egg_info.cpython-35.pyc | Bin 0 -> 17234 bytes .../__pycache__/install.cpython-35.pyc | Bin 0 -> 4233 bytes .../install_egg_info.cpython-35.pyc | Bin 0 -> 4928 bytes .../__pycache__/install_lib.cpython-35.pyc | Bin 0 -> 5416 bytes .../install_scripts.cpython-35.pyc | Bin 0 -> 2385 bytes .../__pycache__/register.cpython-35.pyc | Bin 0 -> 584 bytes .../command/__pycache__/rotate.cpython-35.pyc | Bin 0 -> 2675 bytes .../__pycache__/saveopts.cpython-35.pyc | Bin 0 -> 949 bytes .../command/__pycache__/sdist.cpython-35.pyc | Bin 0 -> 5859 bytes .../command/__pycache__/setopt.cpython-35.pyc | Bin 0 -> 4926 bytes .../command/__pycache__/test.cpython-35.pyc | Bin 0 -> 6430 bytes .../command/__pycache__/upload.cpython-35.pyc | Bin 0 -> 1053 bytes .../__pycache__/upload_docs.cpython-35.pyc | Bin 0 -> 5973 bytes .../site-packages/setuptools/command/alias.py | 80 + .../setuptools/command/bdist_egg.py | 471 + .../setuptools/command/bdist_rpm.py | 43 + .../setuptools/command/bdist_wininst.py | 21 + .../setuptools/command/build_ext.py | 296 + .../setuptools/command/build_py.py | 222 + .../setuptools/command/develop.py | 196 + .../setuptools/command/easy_install.py | 2315 ++++ .../setuptools/command/egg_info.py | 482 + .../setuptools/command/install.py | 125 + .../setuptools/command/install_egg_info.py | 138 + .../setuptools/command/install_lib.py | 147 + .../setuptools/command/install_scripts.py | 60 + .../setuptools/command/register.py | 10 + .../setuptools/command/rotate.py | 62 + .../setuptools/command/saveopts.py | 22 + .../site-packages/setuptools/command/sdist.py | 196 + .../setuptools/command/setopt.py | 150 + .../site-packages/setuptools/command/test.py | 196 + .../setuptools/command/upload.py | 23 + .../setuptools/command/upload_docs.py | 191 + .../site-packages/setuptools/depends.py | 217 + .../site-packages/setuptools/dist.py | 872 ++ .../site-packages/setuptools/extension.py | 57 + .../setuptools/extern/__init__.py | 5 + .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 303 bytes .../site-packages/setuptools/launch.py | 35 + .../site-packages/setuptools/lib2to3_ex.py | 58 + .../site-packages/setuptools/msvc9_support.py | 63 + .../site-packages/setuptools/package_index.py | 1069 ++ .../site-packages/setuptools/py26compat.py | 22 + .../site-packages/setuptools/py27compat.py | 15 + .../site-packages/setuptools/py31compat.py | 52 + .../site-packages/setuptools/sandbox.py | 496 + .../setuptools/script (dev).tmpl | 5 + .../site-packages/setuptools/script.tmpl | 3 + .../site-packages/setuptools/site-patch.py | 76 + .../site-packages/setuptools/ssl_support.py | 243 + .../site-packages/setuptools/unicode_utils.py | 43 + .../site-packages/setuptools/utils.py | 11 + .../site-packages/setuptools/version.py | 6 + .../setuptools/windows_support.py | 29 + env/lib64 | 1 + env/pip-selfcheck.json | 1 + env/pyvenv.cfg | 3 + .../CacheControl-0.11.5-py2.py3-none-any.whl | Bin 0 -> 17006 bytes .../chardet-2.3.0-py2.py3-none-any.whl | Bin 0 -> 180893 bytes .../colorama-0.3.7-py2.py3-none-any.whl | Bin 0 -> 19917 bytes .../distlib-0.2.2-py2.py3-none-any.whl | Bin 0 -> 139349 bytes .../html5lib-0.999-py2.py3-none-any.whl | Bin 0 -> 108385 bytes .../ipaddress-0.0.0-py2.py3-none-any.whl | Bin 0 -> 17454 bytes .../lockfile-0.12.2-py2.py3-none-any.whl | Bin 0 -> 13504 bytes .../packaging-16.6-py2.py3-none-any.whl | Bin 0 -> 22701 bytes .../pip-8.1.1-py2.py3-none-any.whl | Bin 0 -> 151984 bytes .../pkg_resources-0.0.0-py2.py3-none-any.whl | Bin 0 -> 91824 bytes .../progress-1.2-py2.py3-none-any.whl | Bin 0 -> 9605 bytes .../pyparsing-2.0.3-py2.py3-none-any.whl | Bin 0 -> 37692 bytes .../requests-2.9.1-py2.py3-none-any.whl | Bin 0 -> 72469 bytes .../retrying-1.3.3-py2.py3-none-any.whl | Bin 0 -> 9536 bytes .../setuptools-20.7.0-py2.py3-none-any.whl | Bin 0 -> 120358 bytes .../six-1.10.0-py2.py3-none-any.whl | Bin 0 -> 10342 bytes .../urllib3-1.13.1-py2.py3-none-any.whl | Bin 0 -> 83132 bytes .../wheel-0.29.0-py2.py3-none-any.whl | Bin 0 -> 65953 bytes hotel/db.sqlite3 | Bin 0 -> 48128 bytes hotel/hotel/__init__.py | 0 .../hotel/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 132 bytes .../hotel/__pycache__/settings.cpython-35.pyc | Bin 0 -> 2364 bytes hotel/hotel/__pycache__/urls.cpython-35.pyc | Bin 0 -> 977 bytes hotel/hotel/__pycache__/wsgi.cpython-35.pyc | Bin 0 -> 549 bytes hotel/hotel/settings.py | 121 + hotel/hotel/urls.py | 22 + hotel/hotel/wsgi.py | 16 + hotel/manage.py | 15 + hotel/rooms/__init__.py | 0 .../rooms/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 132 bytes hotel/rooms/__pycache__/admin.cpython-35.pyc | Bin 0 -> 275 bytes hotel/rooms/__pycache__/apps.cpython-35.pyc | Bin 0 -> 362 bytes hotel/rooms/__pycache__/models.cpython-35.pyc | Bin 0 -> 990 bytes hotel/rooms/__pycache__/urls.cpython-35.pyc | Bin 0 -> 276 bytes hotel/rooms/__pycache__/views.cpython-35.pyc | Bin 0 -> 586 bytes hotel/rooms/admin.py | 6 + hotel/rooms/apps.py | 5 + hotel/rooms/migrations/0001_initial.py | 35 + hotel/rooms/migrations/0002_room_reserved.py | 18 + .../migrations/0003_auto_20190112_2306.py | 18 + .../migrations/0004_auto_20190112_2307.py | 18 + hotel/rooms/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-35.pyc | Bin 0 -> 1148 bytes .../0002_room_reserved.cpython-35.pyc | Bin 0 -> 608 bytes .../0003_auto_20190112_2306.cpython-35.pyc | Bin 0 -> 612 bytes .../0004_auto_20190112_2307.cpython-35.pyc | Bin 0 -> 597 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 143 bytes hotel/rooms/models.py | 27 + hotel/rooms/templates/index.html | 31 + hotel/rooms/tests.py | 3 + hotel/rooms/urls.py | 7 + hotel/rooms/views.py | 13 + 5104 files changed, 503936 insertions(+) create mode 100644 .idea/hotel.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/workspace.xml create mode 100644 env/bin/__pycache__/django-admin.cpython-35.pyc create mode 100644 env/bin/activate create mode 100644 env/bin/activate.csh create mode 100644 env/bin/activate.fish create mode 100755 env/bin/django-admin create mode 100755 env/bin/django-admin.py create mode 100755 env/bin/easy_install create mode 100755 env/bin/easy_install-3.5 create mode 100755 env/bin/pip create mode 100755 env/bin/pip3 create mode 100755 env/bin/pip3.5 create mode 120000 env/bin/python create mode 120000 env/bin/python3 create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/INSTALLER create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/LICENSE create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/METADATA create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/RECORD create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/WHEEL create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/entry_points.txt create mode 100644 env/lib/python3.5/site-packages/Django-2.1.5.dist-info/top_level.txt create mode 100644 env/lib/python3.5/site-packages/__pycache__/easy_install.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/__main__.py create mode 100644 env/lib/python3.5/site-packages/django/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/__pycache__/__main__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/__pycache__/shortcuts.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/apps/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/apps/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/apps/__pycache__/config.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/apps/__pycache__/registry.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/apps/config.py create mode 100644 env/lib/python3.5/site-packages/django/apps/registry.py create mode 100644 env/lib/python3.5/site-packages/django/bin/__pycache__/django-admin.cpython-35.pyc create mode 100755 env/lib/python3.5/site-packages/django/bin/django-admin.py create mode 100644 env/lib/python3.5/site-packages/django/conf/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/__pycache__/global_settings.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/__init__.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/admin.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/apps.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/migrations/__init__.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/models.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/tests.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/app_template/views.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/global_settings.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ar/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ar/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ar/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ar/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/az/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/az/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/az/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/az/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bg/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bg/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bg/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bg/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bn/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bn/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bn/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bn/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bs/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bs/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bs/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/bs/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ca/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ca/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ca/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ca/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cs/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cs/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cs/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cs/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cy/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cy/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cy/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/cy/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/da/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/da/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/da/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/da/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de_CH/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de_CH/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de_CH/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/de_CH/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/el/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/el/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/el/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/el/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_AU/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_AU/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_AU/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_AU/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_GB/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_GB/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_GB/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/en_GB/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eo/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eo/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eo/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eo/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_AR/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_AR/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_AR/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_AR/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_CO/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_CO/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_CO/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_CO/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_MX/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_MX/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_MX/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_MX/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_NI/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_NI/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_NI/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_NI/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_PR/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_PR/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_PR/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_PR/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/et/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/et/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/et/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/et/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eu/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eu/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eu/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/eu/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fa/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fa/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fa/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fa/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fi/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fi/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fi/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fi/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fr/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fr/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fr/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fr/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fy/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fy/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fy/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/fy/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ga/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ga/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ga/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ga/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gd/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gd/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gd/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gd/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gl/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gl/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gl/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/gl/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/he/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/he/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/he/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/he/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hi/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hi/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hi/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hi/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hr/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hr/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hr/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hr/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hu/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hu/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hu/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/hu/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/id/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/id/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/id/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/id/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/is/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/is/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/is/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/is/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/it/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/it/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/it/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/it/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ja/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ja/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ja/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ja/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ka/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ka/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ka/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ka/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/km/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/km/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/km/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/km/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kn/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kn/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kn/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/kn/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ko/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ko/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ko/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ko/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lt/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lt/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lt/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lt/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lv/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lv/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lv/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/lv/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mk/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mk/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mk/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mk/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ml/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ml/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ml/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ml/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mn/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mn/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mn/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mn/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nb/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nb/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nb/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nb/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nl/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nl/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nl/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nl/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nn/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nn/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nn/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/nn/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pl/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pl/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pl/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pl/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt_BR/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt_BR/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt_BR/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/pt_BR/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ro/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ro/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ro/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ro/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ru/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ru/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ru/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ru/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sk/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sk/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sk/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sk/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sl/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sl/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sl/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sl/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sq/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sq/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sq/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sq/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr_Latn/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr_Latn/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr_Latn/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sr_Latn/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sv/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sv/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sv/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sv/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ta/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ta/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ta/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ta/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/te/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/te/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/te/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/te/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/th/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/th/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/th/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/th/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tr/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tr/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tr/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tr/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/uk/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/uk/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/uk/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/uk/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/vi/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/vi/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/vi/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/vi/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hans/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hans/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hans/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hans/formats.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hant/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hant/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hant/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/locale/zh_Hant/formats.py create mode 100755 env/lib/python3.5/site-packages/django/conf/project_template/manage.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/project_template/project_name/__init__.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/project_template/project_name/settings.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/project_template/project_name/urls.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/project_template/project_name/wsgi.py-tpl create mode 100644 env/lib/python3.5/site-packages/django/conf/urls/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/conf/urls/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/urls/__pycache__/i18n.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/urls/__pycache__/static.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/conf/urls/i18n.py create mode 100644 env/lib/python3.5/site-packages/django/conf/urls/static.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/actions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/checks.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/decorators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/filters.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/forms.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/helpers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/options.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/sites.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/tests.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/__pycache__/widgets.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/actions.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/checks.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/decorators.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/exceptions.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/filters.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/forms.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/helpers.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/af/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/am/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/am/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ar/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ast/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/be/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bg/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bn/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/br/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/bs/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ca/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cs/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/cy/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/da/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/de/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/dsb/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/el/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_AU/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/en_GB/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eo/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_AR/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_CO/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_MX/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/es_VE/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/et/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/eu/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fa/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fi/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fr/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/fy/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ga/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gd/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/gl/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hi/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hr/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hsb/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/hu/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ia/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/id/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/io/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/is/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/it/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ja/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ka/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kab/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kk/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/km/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/kn/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ko/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lb/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lt/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/lv/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mk/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ml/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mn/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/mr/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/my/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nb/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ne/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nl/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/nn/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/os/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pa/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pl/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/pt_BR/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ro/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ru/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sl/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sq/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sr_Latn/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sv/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/sw/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ta/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/te/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/th/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tr/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/tt/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/udm/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/uk/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/ur/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/vi/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/locale/zh_Hant/LC_MESSAGES/djangojs.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/0002_logentry_remove_auto_add.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/__pycache__/0002_logentry_remove_auto_add.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/__pycache__/0003_logentry_add_action_flag_choices.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/options.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/sites.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/autocomplete.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/base.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/changelists.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/dashboard.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/fonts.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/forms.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/login.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/rtl.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/widgets.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/README.txt create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/LICENSE create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/README.txt create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-no.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/search.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectBox.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/autocomplete.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/calendar.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/cancel.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/change_form.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/core.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/jquery.init.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/popup_response.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/timeparse.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/urlify.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt create mode 100755 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/404.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/500.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/actions.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/app_index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base_site.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_results.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/filter.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/invalid_setup.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/login.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/object_history.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/pagination.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/popup_response.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/related_widget_wrapper.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/search_form.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/submit_line.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/radio.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/url.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/logged_out.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_done.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_form.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_done.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_email.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_form.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_list.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_modify.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_static.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_urls.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/log.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_list.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_modify.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_static.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_urls.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/templatetags/log.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/tests.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/__pycache__/autocomplete.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/__pycache__/decorators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/__pycache__/main.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/autocomplete.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/decorators.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/views/main.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admin/widgets.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__pycache__/urls.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/bookmarklets.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/missing_docutils.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/model_detail.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/model_index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/template_detail.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/template_filter_index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/template_tag_index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/view_detail.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/templates/admin_doc/view_index.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/urls.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/admindocs/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/admin.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/backends.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/base_user.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/checks.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/context_processors.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/decorators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/forms.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/hashers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/mixins.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/password_validation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/signals.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/tokens.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/urls.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/validators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/admin.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/backends.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/base_user.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/checks.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/common-passwords.txt.gz create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/context_processors.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/decorators.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/forms.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/handlers/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/handlers/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/handlers/__pycache__/modwsgi.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/handlers/modwsgi.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/hashers.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/management/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/management/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/management/commands/__pycache__/changepassword.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/management/commands/__pycache__/createsuperuser.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/management/commands/changepassword.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/management/commands/createsuperuser.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0002_alter_permission_name_max_length.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0003_alter_user_email_max_length.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0004_alter_user_username_opts.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0005_alter_user_last_login_null.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0006_require_contenttypes_0002.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0007_alter_validators_add_error_messages.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0008_alter_user_username_max_length.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/0009_alter_user_last_name_max_length.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0002_alter_permission_name_max_length.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0003_alter_user_email_max_length.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0004_alter_user_username_opts.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0005_alter_user_last_login_null.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0006_require_contenttypes_0002.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0007_alter_validators_add_error_messages.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0008_alter_user_username_max_length.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/0009_alter_user_last_name_max_length.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/mixins.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/password_validation.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/signals.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/templates/auth/widgets/read_only_password_hash.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/templates/registration/password_reset_subject.txt create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/tokens.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/urls.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/validators.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/auth/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/admin.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/checks.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/fields.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/forms.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/admin.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/checks.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/fields.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/forms.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/management/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/management/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/management/commands/__pycache__/remove_stale_contenttypes.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/management/commands/remove_stale_contenttypes.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/migrations/0002_remove_content_type_name.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/migrations/__pycache__/0002_remove_content_type_name.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/contenttypes/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/admin.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/forms.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/sitemaps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/urls.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/admin.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/forms.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/sitemaps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/templatetags/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/templatetags/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/templatetags/__pycache__/flatpages.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/templatetags/flatpages.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/urls.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/flatpages/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/feeds.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/geometry.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/measure.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/ptr.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/shortcuts.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/admin/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/admin/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/admin/__pycache__/options.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/admin/__pycache__/widgets.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/admin/options.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/admin/widgets.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/__pycache__/adapter.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/adapter.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/features.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/base/operations.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/features.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/operations.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/mysql/schema.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/adapter.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/adapter.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/features.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/operations.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/oracle/schema.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/adapter.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/const.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/pgraster.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/adapter.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/const.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/features.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/operations.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/pgraster.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/postgis/schema.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/adapter.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/adapter.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/client.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/features.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/operations.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/schema.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/backends/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__pycache__/aggregates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__pycache__/fields.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__pycache__/functions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__pycache__/lookups.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/__pycache__/proxy.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/aggregates.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/fields.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/functions.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/lookups.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/proxy.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/sql/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/sql/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/sql/__pycache__/conversion.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/db/models/sql/conversion.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/feeds.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/forms/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/forms/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/forms/__pycache__/fields.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/forms/__pycache__/widgets.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/forms/fields.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/forms/widgets.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/LICENSE create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/datasource.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/driver.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/envelope.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/error.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/feature.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/field.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/geometries.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/geomtype.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/layer.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/libgdal.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/__pycache__/srs.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/datasource.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/driver.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/envelope.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/error.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/feature.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/field.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/geometries.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/geomtype.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/layer.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/libgdal.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/ds.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/errcheck.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/generation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/geom.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/raster.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/__pycache__/srs.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/ds.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/errcheck.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/generation.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/geom.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/raster.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/prototypes/srs.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/__pycache__/band.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/__pycache__/const.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/__pycache__/source.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/band.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/const.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/raster/source.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/gdal/srs.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geoip2/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geoip2/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geoip2/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geoip2/__pycache__/resources.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geoip2/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geoip2/resources.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geometry.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/LICENSE create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/collections.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/coordseq.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/error.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/factory.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/geometry.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/io.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/libgeos.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/linestring.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/mutable_list.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/point.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/polygon.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/__pycache__/prepared.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/collections.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/coordseq.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/error.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/factory.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/geometry.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/io.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/libgeos.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/linestring.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/mutable_list.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/point.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/polygon.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prepared.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/coordseq.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/errcheck.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/geom.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/io.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/misc.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/predicates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/prepared.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/threadsafe.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/__pycache__/topology.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/coordseq.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/errcheck.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/geom.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/io.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/misc.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/predicates.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/prepared.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/threadsafe.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/geos/prototypes/topology.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/management/commands/__pycache__/inspectdb.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/management/commands/__pycache__/ogrinspect.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/management/commands/inspectdb.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/management/commands/ogrinspect.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/measure.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/ptr.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/serializers/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/serializers/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/serializers/__pycache__/geojson.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/serializers/geojson.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/shortcuts.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/sitemaps/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/sitemaps/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/sitemaps/__pycache__/kml.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/sitemaps/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/sitemaps/kml.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/sitemaps/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/css/ol3.css create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/img/draw_line_off.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/img/draw_line_on.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/img/draw_point_off.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/img/draw_point_on.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/img/draw_polygon_off.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/img/draw_polygon_on.svg create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/static/gis/js/OLMapWidget.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/admin/openlayers.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/admin/openlayers.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/admin/osm.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/admin/osm.js create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/kml/base.kml create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/kml/placemarks.kml create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/openlayers-osm.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/templates/gis/openlayers.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/__pycache__/layermapping.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/__pycache__/ogrinfo.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/__pycache__/ogrinspect.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/__pycache__/srs.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/layermapping.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/ogrinfo.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/ogrinspect.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/utils/srs.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/gis/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__pycache__/humanize.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/humanize.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/api.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/constants.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/context_processors.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/api.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/constants.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/context_processors.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/cookie.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/fallback.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/session.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/cookie.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/fallback.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/storage/session.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/messages/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/functions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/indexes.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/lookups.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/search.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/signals.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/validators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/general.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/statistics.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/general.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/statistics.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/array.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/citext.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/hstore.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/jsonb.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/mixins.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/ranges.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/array.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/citext.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/hstore.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/jsonb.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/mixins.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/ranges.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/fields/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/array.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/hstore.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/jsonb.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/ranges.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/array.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/hstore.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/jsonb.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/forms/ranges.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/functions.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/indexes.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/lookups.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/operations.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/search.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/signals.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/postgres/validators.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/admin.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/admin.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/redirects/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/base_session.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/serializers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/cache.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/cached_db.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/db.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/file.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/signed_cookies.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/base.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/cache.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/cached_db.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/db.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/file.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/backends/signed_cookies.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/base_session.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/exceptions.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/clearsessions.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sessions/serializers.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/management/commands/__pycache__/ping_google.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/management/commands/ping_google.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/templates/sitemap.xml create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml create mode 100644 env/lib/python3.5/site-packages/django/contrib/sitemaps/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/admin.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/management.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/managers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/middleware.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/requests.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/shortcuts.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/admin.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.po create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/management.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/managers.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/middleware.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/migrations/0001_initial.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/migrations/__pycache__/0002_alter_domain_unique.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/models.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/requests.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/sites/shortcuts.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/checks.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/finders.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/handlers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/storage.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/testing.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/urls.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/checks.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/finders.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/findstatic.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/runserver.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/findstatic.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/runserver.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/storage.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__pycache__/staticfiles.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/testing.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/urls.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/utils.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/staticfiles/views.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/syndication/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/syndication/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/syndication/__pycache__/apps.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/syndication/__pycache__/views.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/contrib/syndication/apps.py create mode 100644 env/lib/python3.5/site-packages/django/contrib/syndication/views.py create mode 100644 env/lib/python3.5/site-packages/django/core/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/paginator.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/signals.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/signing.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/validators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/__pycache__/wsgi.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/db.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/dummy.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/filebased.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/locmem.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/memcached.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/db.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/dummy.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/filebased.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/locmem.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/backends/memcached.py create mode 100644 env/lib/python3.5/site-packages/django/core/cache/utils.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/caches.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/database.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/messages.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/model_checks.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/registry.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/templates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/__pycache__/urls.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/caches.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/compatibility/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/compatibility/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/database.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/messages.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/model_checks.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/registry.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/csrf.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/sessions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/csrf.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/security/sessions.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/templates.py create mode 100644 env/lib/python3.5/site-packages/django/core/checks/urls.py create mode 100644 env/lib/python3.5/site-packages/django/core/exceptions.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/images.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/locks.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/move.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/storage.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/temp.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/uploadedfile.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/uploadhandler.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/files/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/images.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/locks.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/move.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/storage.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/temp.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/uploadedfile.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/uploadhandler.py create mode 100644 env/lib/python3.5/site-packages/django/core/files/utils.py create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/__pycache__/exception.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/__pycache__/wsgi.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/exception.py create mode 100644 env/lib/python3.5/site-packages/django/core/handlers/wsgi.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/__pycache__/message.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/console.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/dummy.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/filebased.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/locmem.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/smtp.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/console.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/dummy.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/filebased.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/locmem.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/backends/smtp.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/message.py create mode 100644 env/lib/python3.5/site-packages/django/core/mail/utils.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/__pycache__/color.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/__pycache__/sql.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/__pycache__/templates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/color.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/check.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/compilemessages.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/createcachetable.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/dbshell.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/diffsettings.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/dumpdata.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/flush.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/inspectdb.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/loaddata.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/makemessages.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/makemigrations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/migrate.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/runserver.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sendtestemail.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/shell.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/showmigrations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlflush.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlmigrate.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlsequencereset.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/squashmigrations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/startapp.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/startproject.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/test.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/testserver.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/check.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/compilemessages.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/createcachetable.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/dbshell.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/diffsettings.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/dumpdata.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/flush.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/inspectdb.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/loaddata.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/makemessages.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/makemigrations.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/migrate.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/runserver.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/sendtestemail.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/shell.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/showmigrations.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/sqlflush.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/sqlmigrate.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/sqlsequencereset.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/squashmigrations.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/startapp.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/startproject.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/test.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/commands/testserver.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/sql.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/templates.py create mode 100644 env/lib/python3.5/site-packages/django/core/management/utils.py create mode 100644 env/lib/python3.5/site-packages/django/core/paginator.py create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__pycache__/json.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__pycache__/python.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__pycache__/pyyaml.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/__pycache__/xml_serializer.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/base.py create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/json.py create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/python.py create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/pyyaml.py create mode 100644 env/lib/python3.5/site-packages/django/core/serializers/xml_serializer.py create mode 100644 env/lib/python3.5/site-packages/django/core/servers/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/core/servers/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/servers/__pycache__/basehttp.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/core/servers/basehttp.py create mode 100644 env/lib/python3.5/site-packages/django/core/signals.py create mode 100644 env/lib/python3.5/site-packages/django/core/signing.py create mode 100644 env/lib/python3.5/site-packages/django/core/validators.py create mode 100644 env/lib/python3.5/site-packages/django/core/wsgi.py create mode 100644 env/lib/python3.5/site-packages/django/db/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/__pycache__/transaction.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/__pycache__/ddl_references.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/__pycache__/signals.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/creation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/validation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/client.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/creation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/operations.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/schema.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/base/validation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/ddl_references.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/dummy/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/dummy/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/dummy/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/dummy/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/dummy/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/dummy/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/compiler.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/creation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/validation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/client.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/compiler.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/creation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/operations.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/schema.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/mysql/validation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/compiler.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/creation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/functions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/validation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/client.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/compiler.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/creation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/functions.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/operations.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/schema.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/oracle/validation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/creation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/client.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/creation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/operations.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/schema.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/creation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/client.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/creation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/operations.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/schema.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/signals.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/creation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/features.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/introspection.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/operations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/schema.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/client.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/creation.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/features.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/introspection.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/operations.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/sqlite3/schema.py create mode 100644 env/lib/python3.5/site-packages/django/db/backends/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/autodetector.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/executor.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/graph.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/loader.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/migration.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/optimizer.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/questioner.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/recorder.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/serializer.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/state.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/topological_sort.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/__pycache__/writer.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/autodetector.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/exceptions.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/executor.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/graph.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/loader.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/migration.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/fields.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/special.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/fields.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/models.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/special.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/operations/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/optimizer.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/questioner.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/recorder.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/serializer.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/state.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/topological_sort.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/migrations/writer.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/aggregates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/constants.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/deletion.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/expressions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/indexes.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/lookups.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/manager.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/options.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/query.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/query_utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/signals.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/aggregates.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/base.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/constants.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/deletion.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/expressions.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/files.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/mixins.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/proxy.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/related.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/related_descriptors.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/related_lookups.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/__pycache__/reverse_related.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/files.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/mixins.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/proxy.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/related.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/related_lookups.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/fields/reverse_related.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/comparison.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/datetime.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/text.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/window.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/comparison.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/datetime.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/text.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/functions/window.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/indexes.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/lookups.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/manager.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/options.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/query.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/query_utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/signals.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/compiler.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/constants.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/datastructures.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/query.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/where.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/compiler.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/constants.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/datastructures.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/query.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/subqueries.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/sql/where.py create mode 100644 env/lib/python3.5/site-packages/django/db/models/utils.py create mode 100644 env/lib/python3.5/site-packages/django/db/transaction.py create mode 100644 env/lib/python3.5/site-packages/django/db/utils.py create mode 100644 env/lib/python3.5/site-packages/django/dispatch/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/dispatch/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/dispatch/__pycache__/dispatcher.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/dispatch/dispatcher.py create mode 100644 env/lib/python3.5/site-packages/django/dispatch/license.txt create mode 100644 env/lib/python3.5/site-packages/django/forms/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/boundfield.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/fields.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/forms.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/formsets.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/models.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/renderers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/__pycache__/widgets.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/forms/boundfield.py create mode 100644 env/lib/python3.5/site-packages/django/forms/fields.py create mode 100644 env/lib/python3.5/site-packages/django/forms/forms.py create mode 100644 env/lib/python3.5/site-packages/django/forms/formsets.py create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/attrs.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/checkbox.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/checkbox_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/checkbox_select.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/clearable_file_input.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/date.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/datetime.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/email.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/file.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/hidden.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/input.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/input_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/multiple_hidden.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/multiple_input.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/multiwidget.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/number.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/password.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/radio.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/radio_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/select.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/select_date.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/select_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/splitdatetime.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/splithiddendatetime.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/text.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/textarea.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/time.html create mode 100644 env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/url.html create mode 100644 env/lib/python3.5/site-packages/django/forms/models.py create mode 100644 env/lib/python3.5/site-packages/django/forms/renderers.py create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/attrs.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/date.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/datetime.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/email.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/file.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/hidden.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/number.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/password.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_date.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_option.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/text.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/textarea.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/time.html create mode 100644 env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/url.html create mode 100644 env/lib/python3.5/site-packages/django/forms/utils.py create mode 100644 env/lib/python3.5/site-packages/django/forms/widgets.py create mode 100644 env/lib/python3.5/site-packages/django/http/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/http/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/http/__pycache__/cookie.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/http/__pycache__/multipartparser.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/http/__pycache__/request.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/http/__pycache__/response.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/http/cookie.py create mode 100644 env/lib/python3.5/site-packages/django/http/multipartparser.py create mode 100644 env/lib/python3.5/site-packages/django/http/request.py create mode 100644 env/lib/python3.5/site-packages/django/http/response.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/cache.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/clickjacking.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/common.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/csrf.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/gzip.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/http.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/locale.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/__pycache__/security.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/middleware/cache.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/clickjacking.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/common.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/csrf.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/gzip.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/http.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/locale.py create mode 100644 env/lib/python3.5/site-packages/django/middleware/security.py create mode 100644 env/lib/python3.5/site-packages/django/shortcuts.py create mode 100644 env/lib/python3.5/site-packages/django/template/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/context.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/context_processors.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/defaultfilters.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/defaulttags.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/engine.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/library.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/loader.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/loader_tags.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/response.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/smartif.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__pycache__/django.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__pycache__/dummy.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__pycache__/jinja2.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/backends/base.py create mode 100644 env/lib/python3.5/site-packages/django/template/backends/django.py create mode 100644 env/lib/python3.5/site-packages/django/template/backends/dummy.py create mode 100644 env/lib/python3.5/site-packages/django/template/backends/jinja2.py create mode 100644 env/lib/python3.5/site-packages/django/template/backends/utils.py create mode 100644 env/lib/python3.5/site-packages/django/template/base.py create mode 100644 env/lib/python3.5/site-packages/django/template/context.py create mode 100644 env/lib/python3.5/site-packages/django/template/context_processors.py create mode 100644 env/lib/python3.5/site-packages/django/template/defaultfilters.py create mode 100644 env/lib/python3.5/site-packages/django/template/defaulttags.py create mode 100644 env/lib/python3.5/site-packages/django/template/engine.py create mode 100644 env/lib/python3.5/site-packages/django/template/exceptions.py create mode 100644 env/lib/python3.5/site-packages/django/template/library.py create mode 100644 env/lib/python3.5/site-packages/django/template/loader.py create mode 100644 env/lib/python3.5/site-packages/django/template/loader_tags.py create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__pycache__/app_directories.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__pycache__/cached.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__pycache__/filesystem.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/__pycache__/locmem.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/app_directories.py create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/base.py create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/cached.py create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/filesystem.py create mode 100644 env/lib/python3.5/site-packages/django/template/loaders/locmem.py create mode 100644 env/lib/python3.5/site-packages/django/template/response.py create mode 100644 env/lib/python3.5/site-packages/django/template/smartif.py create mode 100644 env/lib/python3.5/site-packages/django/template/utils.py create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__pycache__/cache.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__pycache__/i18n.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__pycache__/l10n.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__pycache__/static.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/templatetags/__pycache__/tz.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/templatetags/cache.py create mode 100644 env/lib/python3.5/site-packages/django/templatetags/i18n.py create mode 100644 env/lib/python3.5/site-packages/django/templatetags/l10n.py create mode 100644 env/lib/python3.5/site-packages/django/templatetags/static.py create mode 100644 env/lib/python3.5/site-packages/django/templatetags/tz.py create mode 100644 env/lib/python3.5/site-packages/django/test/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/client.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/html.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/runner.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/selenium.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/signals.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/testcases.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/test/client.py create mode 100644 env/lib/python3.5/site-packages/django/test/html.py create mode 100644 env/lib/python3.5/site-packages/django/test/runner.py create mode 100644 env/lib/python3.5/site-packages/django/test/selenium.py create mode 100644 env/lib/python3.5/site-packages/django/test/signals.py create mode 100644 env/lib/python3.5/site-packages/django/test/testcases.py create mode 100644 env/lib/python3.5/site-packages/django/test/utils.py create mode 100644 env/lib/python3.5/site-packages/django/urls/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/conf.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/converters.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/resolvers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/urls/base.py create mode 100644 env/lib/python3.5/site-packages/django/urls/conf.py create mode 100644 env/lib/python3.5/site-packages/django/urls/converters.py create mode 100644 env/lib/python3.5/site-packages/django/urls/exceptions.py create mode 100644 env/lib/python3.5/site-packages/django/urls/resolvers.py create mode 100644 env/lib/python3.5/site-packages/django/urls/utils.py create mode 100644 env/lib/python3.5/site-packages/django/utils/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/_os.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/archive.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/autoreload.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/baseconv.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/cache.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/crypto.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/datastructures.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/dateformat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/dateparse.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/dates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/datetime_safe.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/deconstruct.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/decorators.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/deprecation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/duration.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/encoding.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/feedgenerator.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/formats.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/functional.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/hashable.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/html.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/http.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/inspect.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/ipv6.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/itercompat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/jslex.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/log.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/lorem_ipsum.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/lru_cache.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/module_loading.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/numberformat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/regex_helper.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/safestring.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/six.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/termcolors.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/text.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/timesince.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/timezone.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/tree.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/version.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/__pycache__/xmlutils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/_os.py create mode 100644 env/lib/python3.5/site-packages/django/utils/archive.py create mode 100644 env/lib/python3.5/site-packages/django/utils/autoreload.py create mode 100644 env/lib/python3.5/site-packages/django/utils/baseconv.py create mode 100644 env/lib/python3.5/site-packages/django/utils/cache.py create mode 100644 env/lib/python3.5/site-packages/django/utils/crypto.py create mode 100644 env/lib/python3.5/site-packages/django/utils/datastructures.py create mode 100644 env/lib/python3.5/site-packages/django/utils/dateformat.py create mode 100644 env/lib/python3.5/site-packages/django/utils/dateparse.py create mode 100644 env/lib/python3.5/site-packages/django/utils/dates.py create mode 100644 env/lib/python3.5/site-packages/django/utils/datetime_safe.py create mode 100644 env/lib/python3.5/site-packages/django/utils/deconstruct.py create mode 100644 env/lib/python3.5/site-packages/django/utils/decorators.py create mode 100644 env/lib/python3.5/site-packages/django/utils/deprecation.py create mode 100644 env/lib/python3.5/site-packages/django/utils/duration.py create mode 100644 env/lib/python3.5/site-packages/django/utils/encoding.py create mode 100644 env/lib/python3.5/site-packages/django/utils/feedgenerator.py create mode 100644 env/lib/python3.5/site-packages/django/utils/formats.py create mode 100644 env/lib/python3.5/site-packages/django/utils/functional.py create mode 100644 env/lib/python3.5/site-packages/django/utils/hashable.py create mode 100644 env/lib/python3.5/site-packages/django/utils/html.py create mode 100644 env/lib/python3.5/site-packages/django/utils/http.py create mode 100644 env/lib/python3.5/site-packages/django/utils/inspect.py create mode 100644 env/lib/python3.5/site-packages/django/utils/ipv6.py create mode 100644 env/lib/python3.5/site-packages/django/utils/itercompat.py create mode 100644 env/lib/python3.5/site-packages/django/utils/jslex.py create mode 100644 env/lib/python3.5/site-packages/django/utils/log.py create mode 100644 env/lib/python3.5/site-packages/django/utils/lorem_ipsum.py create mode 100644 env/lib/python3.5/site-packages/django/utils/lru_cache.py create mode 100644 env/lib/python3.5/site-packages/django/utils/module_loading.py create mode 100644 env/lib/python3.5/site-packages/django/utils/numberformat.py create mode 100644 env/lib/python3.5/site-packages/django/utils/regex_helper.py create mode 100644 env/lib/python3.5/site-packages/django/utils/safestring.py create mode 100644 env/lib/python3.5/site-packages/django/utils/six.py create mode 100644 env/lib/python3.5/site-packages/django/utils/termcolors.py create mode 100644 env/lib/python3.5/site-packages/django/utils/text.py create mode 100644 env/lib/python3.5/site-packages/django/utils/timesince.py create mode 100644 env/lib/python3.5/site-packages/django/utils/timezone.py create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/__pycache__/template.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/__pycache__/trans_null.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/__pycache__/trans_real.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/template.py create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/trans_null.py create mode 100644 env/lib/python3.5/site-packages/django/utils/translation/trans_real.py create mode 100644 env/lib/python3.5/site-packages/django/utils/tree.py create mode 100644 env/lib/python3.5/site-packages/django/utils/version.py create mode 100644 env/lib/python3.5/site-packages/django/utils/xmlutils.py create mode 100644 env/lib/python3.5/site-packages/django/views/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/views/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/__pycache__/csrf.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/__pycache__/debug.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/__pycache__/defaults.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/__pycache__/i18n.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/__pycache__/static.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/csrf.py create mode 100644 env/lib/python3.5/site-packages/django/views/debug.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/cache.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/clickjacking.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/csrf.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/debug.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/gzip.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/http.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/__pycache__/vary.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/cache.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/clickjacking.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/csrf.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/debug.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/gzip.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/http.py create mode 100644 env/lib/python3.5/site-packages/django/views/decorators/vary.py create mode 100644 env/lib/python3.5/site-packages/django/views/defaults.py create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__init__.py create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__pycache__/base.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__pycache__/dates.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__pycache__/detail.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__pycache__/edit.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/generic/__pycache__/list.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/django/views/generic/base.py create mode 100644 env/lib/python3.5/site-packages/django/views/generic/dates.py create mode 100644 env/lib/python3.5/site-packages/django/views/generic/detail.py create mode 100644 env/lib/python3.5/site-packages/django/views/generic/edit.py create mode 100644 env/lib/python3.5/site-packages/django/views/generic/list.py create mode 100644 env/lib/python3.5/site-packages/django/views/i18n.py create mode 100644 env/lib/python3.5/site-packages/django/views/static.py create mode 100644 env/lib/python3.5/site-packages/django/views/templates/default_urlconf.html create mode 100644 env/lib/python3.5/site-packages/django/views/templates/technical_404.html create mode 100644 env/lib/python3.5/site-packages/django/views/templates/technical_500.html create mode 100644 env/lib/python3.5/site-packages/django/views/templates/technical_500.txt create mode 100644 env/lib/python3.5/site-packages/easy_install.py create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/DESCRIPTION.rst create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/INSTALLER create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/METADATA create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/RECORD create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/WHEEL create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/entry_points.txt create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/metadata.json create mode 100644 env/lib/python3.5/site-packages/pip-8.1.1.dist-info/top_level.txt create mode 100644 env/lib/python3.5/site-packages/pip/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/__main__.py create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/__main__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/basecommand.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/baseparser.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/cmdoptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/download.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/index.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/locations.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/pep425tags.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/status_codes.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/__pycache__/wheel.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/_vendor/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/_vendor/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/basecommand.py create mode 100644 env/lib/python3.5/site-packages/pip/baseparser.py create mode 100644 env/lib/python3.5/site-packages/pip/cmdoptions.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/completion.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/download.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/freeze.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/hash.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/help.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/install.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/list.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/search.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/show.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/uninstall.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/__pycache__/wheel.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/commands/completion.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/download.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/freeze.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/hash.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/help.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/install.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/list.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/search.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/show.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/uninstall.py create mode 100644 env/lib/python3.5/site-packages/pip/commands/wheel.py create mode 100644 env/lib/python3.5/site-packages/pip/compat/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/compat/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/compat/__pycache__/dictconfig.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/compat/__pycache__/ordereddict.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/compat/dictconfig.py create mode 100644 env/lib/python3.5/site-packages/pip/compat/ordereddict.py create mode 100644 env/lib/python3.5/site-packages/pip/download.py create mode 100644 env/lib/python3.5/site-packages/pip/exceptions.py create mode 100644 env/lib/python3.5/site-packages/pip/index.py create mode 100644 env/lib/python3.5/site-packages/pip/locations.py create mode 100644 env/lib/python3.5/site-packages/pip/models/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/models/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/models/__pycache__/index.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/models/index.py create mode 100644 env/lib/python3.5/site-packages/pip/operations/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/operations/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/operations/__pycache__/freeze.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/operations/freeze.py create mode 100644 env/lib/python3.5/site-packages/pip/pep425tags.py create mode 100644 env/lib/python3.5/site-packages/pip/req/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/req/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/req/__pycache__/req_file.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/req/__pycache__/req_install.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/req/__pycache__/req_set.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/req/__pycache__/req_uninstall.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/req/req_file.py create mode 100644 env/lib/python3.5/site-packages/pip/req/req_install.py create mode 100644 env/lib/python3.5/site-packages/pip/req/req_set.py create mode 100644 env/lib/python3.5/site-packages/pip/req/req_uninstall.py create mode 100644 env/lib/python3.5/site-packages/pip/status_codes.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/appdirs.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/build.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/deprecation.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/encoding.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/filesystem.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/hashes.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/logging.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/outdated.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/setuptools_build.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/__pycache__/ui.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/utils/appdirs.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/build.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/deprecation.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/encoding.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/filesystem.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/hashes.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/logging.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/outdated.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/setuptools_build.py create mode 100644 env/lib/python3.5/site-packages/pip/utils/ui.py create mode 100644 env/lib/python3.5/site-packages/pip/vcs/__init__.py create mode 100644 env/lib/python3.5/site-packages/pip/vcs/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/vcs/__pycache__/bazaar.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/vcs/__pycache__/git.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/vcs/__pycache__/mercurial.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/vcs/__pycache__/subversion.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pip/vcs/bazaar.py create mode 100644 env/lib/python3.5/site-packages/pip/vcs/git.py create mode 100644 env/lib/python3.5/site-packages/pip/vcs/mercurial.py create mode 100644 env/lib/python3.5/site-packages/pip/vcs/subversion.py create mode 100644 env/lib/python3.5/site-packages/pip/wheel.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources-0.0.0.dist-info/DESCRIPTION.rst create mode 100644 env/lib/python3.5/site-packages/pkg_resources-0.0.0.dist-info/INSTALLER create mode 100644 env/lib/python3.5/site-packages/pkg_resources-0.0.0.dist-info/METADATA create mode 100644 env/lib/python3.5/site-packages/pkg_resources-0.0.0.dist-info/RECORD create mode 100644 env/lib/python3.5/site-packages/pkg_resources-0.0.0.dist-info/WHEEL create mode 100644 env/lib/python3.5/site-packages/pkg_resources-0.0.0.dist-info/metadata.json create mode 100644 env/lib/python3.5/site-packages/pkg_resources/__init__.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/__init__.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/pyparsing.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/__pycache__/six.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__about__.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__init__.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/__about__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/_compat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/_structures.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/markers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/requirements.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/specifiers.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/__pycache__/version.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/_compat.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/_structures.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/markers.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/requirements.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/specifiers.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/utils.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/packaging/version.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/pyparsing.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/_vendor/six.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/extern/__init__.py create mode 100644 env/lib/python3.5/site-packages/pkg_resources/extern/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/DESCRIPTION.rst create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/INSTALLER create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/LICENSE.txt create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/METADATA create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/RECORD create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/WHEEL create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/metadata.json create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/top_level.txt create mode 100644 env/lib/python3.5/site-packages/pytz-2018.9.dist-info/zip-safe create mode 100644 env/lib/python3.5/site-packages/pytz/__init__.py create mode 100644 env/lib/python3.5/site-packages/pytz/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz/__pycache__/exceptions.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz/__pycache__/lazy.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz/__pycache__/reference.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz/__pycache__/tzfile.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz/__pycache__/tzinfo.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/pytz/exceptions.py create mode 100644 env/lib/python3.5/site-packages/pytz/lazy.py create mode 100644 env/lib/python3.5/site-packages/pytz/reference.py create mode 100644 env/lib/python3.5/site-packages/pytz/tzfile.py create mode 100644 env/lib/python3.5/site-packages/pytz/tzinfo.py create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Abidjan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Accra create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Addis_Ababa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Algiers create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Asmara create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Asmera create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Bamako create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Bangui create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Banjul create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Bissau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Blantyre create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Brazzaville create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Bujumbura create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Cairo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Casablanca create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Ceuta create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Conakry create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Dakar create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Dar_es_Salaam create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Djibouti create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Douala create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/El_Aaiun create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Freetown create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Gaborone create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Harare create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Johannesburg create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Juba create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Kampala create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Khartoum create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Kigali create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Kinshasa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Lagos create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Libreville create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Lome create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Luanda create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Lubumbashi create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Lusaka create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Malabo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Maputo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Maseru create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Mbabane create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Mogadishu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Monrovia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Nairobi create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Ndjamena create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Niamey create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Nouakchott create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Ouagadougou create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Porto-Novo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Sao_Tome create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Timbuktu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Tripoli create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Tunis create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Africa/Windhoek create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Adak create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Anchorage create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Anguilla create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Antigua create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Araguaina create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Buenos_Aires create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Catamarca create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/ComodRivadavia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Cordoba create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Jujuy create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/La_Rioja create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Mendoza create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Rio_Gallegos create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Salta create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/San_Juan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/San_Luis create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Tucuman create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Argentina/Ushuaia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Aruba create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Asuncion create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Atikokan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Atka create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Bahia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Bahia_Banderas create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Barbados create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Belem create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Belize create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Blanc-Sablon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Boa_Vista create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Bogota create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Boise create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Buenos_Aires create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Cambridge_Bay create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Campo_Grande create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Cancun create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Caracas create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Catamarca create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Cayenne create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Cayman create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Chicago create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Chihuahua create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Coral_Harbour create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Cordoba create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Costa_Rica create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Creston create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Cuiaba create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Curacao create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Danmarkshavn create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Dawson create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Dawson_Creek create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Denver create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Detroit create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Dominica create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Edmonton create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Eirunepe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/El_Salvador create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Ensenada create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Fort_Nelson create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Fort_Wayne create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Fortaleza create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Glace_Bay create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Godthab create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Goose_Bay create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Grand_Turk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Grenada create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Guadeloupe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Guatemala create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Guayaquil create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Guyana create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Halifax create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Havana create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Hermosillo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Indianapolis create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Knox create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Marengo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Petersburg create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Tell_City create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Vevay create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Vincennes create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indiana/Winamac create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Indianapolis create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Inuvik create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Iqaluit create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Jamaica create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Jujuy create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Juneau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Kentucky/Louisville create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Kentucky/Monticello create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Knox_IN create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Kralendijk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/La_Paz create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Lima create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Los_Angeles create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Louisville create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Lower_Princes create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Maceio create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Managua create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Manaus create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Marigot create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Martinique create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Matamoros create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Mazatlan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Mendoza create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Menominee create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Merida create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Metlakatla create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Mexico_City create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Miquelon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Moncton create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Monterrey create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Montevideo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Montreal create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Montserrat create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Nassau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/New_York create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Nipigon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Nome create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Noronha create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/North_Dakota/Beulah create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/North_Dakota/Center create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/North_Dakota/New_Salem create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Ojinaga create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Panama create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Pangnirtung create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Paramaribo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Phoenix create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Port-au-Prince create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Port_of_Spain create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Porto_Acre create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Porto_Velho create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Puerto_Rico create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Punta_Arenas create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Rainy_River create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Rankin_Inlet create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Recife create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Regina create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Resolute create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Rio_Branco create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Rosario create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Santa_Isabel create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Santarem create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Santiago create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Santo_Domingo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Sao_Paulo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Scoresbysund create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Shiprock create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Sitka create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/St_Barthelemy create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/St_Johns create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/St_Kitts create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/St_Lucia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/St_Thomas create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/St_Vincent create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Swift_Current create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Tegucigalpa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Thule create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Thunder_Bay create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Tijuana create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Toronto create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Tortola create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Vancouver create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Virgin create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Whitehorse create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Winnipeg create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Yakutat create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/America/Yellowknife create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Casey create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Davis create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/DumontDUrville create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Macquarie create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Mawson create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/McMurdo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Palmer create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Rothera create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/South_Pole create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Syowa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Troll create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Antarctica/Vostok create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Arctic/Longyearbyen create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Aden create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Almaty create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Amman create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Anadyr create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Aqtau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Aqtobe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ashgabat create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ashkhabad create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Atyrau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Baghdad create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Bahrain create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Baku create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Bangkok create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Barnaul create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Beirut create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Bishkek create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Brunei create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Calcutta create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Chita create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Choibalsan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Chongqing create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Chungking create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Colombo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Dacca create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Damascus create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Dhaka create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Dili create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Dubai create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Dushanbe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Famagusta create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Gaza create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Harbin create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Hebron create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ho_Chi_Minh create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Hong_Kong create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Hovd create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Irkutsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Istanbul create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Jakarta create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Jayapura create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Jerusalem create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kabul create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kamchatka create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Karachi create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kashgar create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kathmandu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Katmandu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Khandyga create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kolkata create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Krasnoyarsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kuala_Lumpur create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kuching create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Kuwait create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Macao create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Macau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Magadan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Makassar create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Manila create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Muscat create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Nicosia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Novokuznetsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Novosibirsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Omsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Oral create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Phnom_Penh create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Pontianak create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Pyongyang create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Qatar create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Qostanay create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Qyzylorda create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Rangoon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Riyadh create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Saigon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Sakhalin create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Samarkand create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Seoul create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Shanghai create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Singapore create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Srednekolymsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Taipei create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Tashkent create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Tbilisi create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Tehran create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Tel_Aviv create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Thimbu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Thimphu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Tokyo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Tomsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ujung_Pandang create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ulaanbaatar create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ulan_Bator create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Urumqi create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Ust-Nera create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Vientiane create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Vladivostok create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Yakutsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Yangon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Yekaterinburg create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Asia/Yerevan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Azores create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Bermuda create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Canary create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Cape_Verde create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Faeroe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Faroe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Jan_Mayen create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Madeira create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Reykjavik create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/South_Georgia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/St_Helena create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Atlantic/Stanley create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/ACT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Adelaide create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Brisbane create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Broken_Hill create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Canberra create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Currie create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Darwin create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Eucla create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Hobart create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/LHI create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Lindeman create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Lord_Howe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Melbourne create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/NSW create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/North create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Perth create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Queensland create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/South create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Sydney create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Tasmania create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Victoria create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/West create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Australia/Yancowinna create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Brazil/Acre create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Brazil/DeNoronha create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Brazil/East create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Brazil/West create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/CET create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/CST6CDT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Atlantic create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Central create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Eastern create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Mountain create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Newfoundland create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Pacific create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Saskatchewan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Canada/Yukon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Chile/Continental create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Chile/EasterIsland create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Cuba create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/EET create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/EST create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/EST5EDT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Egypt create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Eire create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+0 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+1 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+10 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+11 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+12 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+2 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+3 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+4 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+5 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+6 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+7 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+8 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT+9 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-0 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-1 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-10 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-11 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-12 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-13 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-14 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-2 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-3 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-4 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-5 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-6 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-7 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-8 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT-9 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/GMT0 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/Greenwich create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/UCT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/UTC create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/Universal create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Etc/Zulu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Amsterdam create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Andorra create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Astrakhan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Athens create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Belfast create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Belgrade create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Berlin create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Bratislava create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Brussels create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Bucharest create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Budapest create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Busingen create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Chisinau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Copenhagen create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Dublin create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Gibraltar create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Guernsey create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Helsinki create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Isle_of_Man create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Istanbul create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Jersey create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Kaliningrad create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Kiev create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Kirov create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Lisbon create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Ljubljana create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/London create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Luxembourg create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Madrid create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Malta create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Mariehamn create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Minsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Monaco create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Moscow create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Nicosia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Oslo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Paris create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Podgorica create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Prague create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Riga create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Rome create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Samara create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/San_Marino create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Sarajevo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Saratov create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Simferopol create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Skopje create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Sofia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Stockholm create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Tallinn create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Tirane create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Tiraspol create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Ulyanovsk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Uzhgorod create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Vaduz create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Vatican create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Vienna create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Vilnius create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Volgograd create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Warsaw create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Zagreb create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Zaporozhye create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Europe/Zurich create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Factory create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/GB create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/GB-Eire create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/GMT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/GMT+0 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/GMT-0 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/GMT0 create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Greenwich create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/HST create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Hongkong create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Iceland create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Antananarivo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Chagos create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Christmas create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Cocos create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Comoro create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Kerguelen create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Mahe create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Maldives create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Mauritius create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Mayotte create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Indian/Reunion create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Iran create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Israel create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Jamaica create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Japan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Kwajalein create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Libya create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/MET create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/MST create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/MST7MDT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Mexico/BajaNorte create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Mexico/BajaSur create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Mexico/General create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/NZ create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/NZ-CHAT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Navajo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/PRC create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/PST8PDT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Apia create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Auckland create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Bougainville create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Chatham create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Chuuk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Easter create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Efate create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Enderbury create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Fakaofo create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Fiji create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Funafuti create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Galapagos create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Gambier create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Guadalcanal create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Guam create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Honolulu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Johnston create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Kiritimati create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Kosrae create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Kwajalein create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Majuro create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Marquesas create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Midway create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Nauru create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Niue create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Norfolk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Noumea create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Pago_Pago create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Palau create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Pitcairn create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Pohnpei create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Ponape create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Port_Moresby create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Rarotonga create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Saipan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Samoa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Tahiti create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Tarawa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Tongatapu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Truk create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Wake create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Wallis create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Pacific/Yap create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Poland create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Portugal create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/ROC create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/ROK create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Singapore create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Turkey create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/UCT create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Alaska create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Aleutian create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Arizona create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Central create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/East-Indiana create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Eastern create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Hawaii create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Indiana-Starke create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Michigan create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Mountain create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Pacific create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/US/Samoa create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/UTC create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Universal create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/W-SU create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/WET create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/Zulu create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/iso3166.tab create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/leapseconds create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/posixrules create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/tzdata.zi create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/zone.tab create mode 100644 env/lib/python3.5/site-packages/pytz/zoneinfo/zone1970.tab create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/DESCRIPTION.rst create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/INSTALLER create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/METADATA create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/RECORD create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/WHEEL create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/dependency_links.txt create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/entry_points.txt create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/metadata.json create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/top_level.txt create mode 100644 env/lib/python3.5/site-packages/setuptools-20.7.0.dist-info/zip-safe create mode 100644 env/lib/python3.5/site-packages/setuptools/__init__.py create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/archive_util.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/depends.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/dist.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/extension.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/launch.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/lib2to3_ex.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/msvc9_support.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/package_index.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/py26compat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/py27compat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/py31compat.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/sandbox.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/site-patch.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/ssl_support.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/unicode_utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/utils.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/version.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/__pycache__/windows_support.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/archive_util.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__init__.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/alias.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/bdist_egg.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/bdist_rpm.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/bdist_wininst.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/build_ext.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/build_py.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/develop.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/easy_install.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/egg_info.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/install.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/install_egg_info.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/install_lib.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/install_scripts.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/register.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/rotate.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/saveopts.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/sdist.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/setopt.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/test.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/upload.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/__pycache__/upload_docs.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/command/alias.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/bdist_egg.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/bdist_rpm.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/bdist_wininst.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/build_ext.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/build_py.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/develop.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/easy_install.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/egg_info.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/install.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/install_egg_info.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/install_lib.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/install_scripts.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/register.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/rotate.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/saveopts.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/sdist.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/setopt.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/test.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/upload.py create mode 100644 env/lib/python3.5/site-packages/setuptools/command/upload_docs.py create mode 100644 env/lib/python3.5/site-packages/setuptools/depends.py create mode 100644 env/lib/python3.5/site-packages/setuptools/dist.py create mode 100644 env/lib/python3.5/site-packages/setuptools/extension.py create mode 100644 env/lib/python3.5/site-packages/setuptools/extern/__init__.py create mode 100644 env/lib/python3.5/site-packages/setuptools/extern/__pycache__/__init__.cpython-35.pyc create mode 100644 env/lib/python3.5/site-packages/setuptools/launch.py create mode 100644 env/lib/python3.5/site-packages/setuptools/lib2to3_ex.py create mode 100644 env/lib/python3.5/site-packages/setuptools/msvc9_support.py create mode 100644 env/lib/python3.5/site-packages/setuptools/package_index.py create mode 100644 env/lib/python3.5/site-packages/setuptools/py26compat.py create mode 100644 env/lib/python3.5/site-packages/setuptools/py27compat.py create mode 100644 env/lib/python3.5/site-packages/setuptools/py31compat.py create mode 100644 env/lib/python3.5/site-packages/setuptools/sandbox.py create mode 100644 env/lib/python3.5/site-packages/setuptools/script (dev).tmpl create mode 100644 env/lib/python3.5/site-packages/setuptools/script.tmpl create mode 100644 env/lib/python3.5/site-packages/setuptools/site-patch.py create mode 100644 env/lib/python3.5/site-packages/setuptools/ssl_support.py create mode 100644 env/lib/python3.5/site-packages/setuptools/unicode_utils.py create mode 100644 env/lib/python3.5/site-packages/setuptools/utils.py create mode 100644 env/lib/python3.5/site-packages/setuptools/version.py create mode 100644 env/lib/python3.5/site-packages/setuptools/windows_support.py create mode 120000 env/lib64 create mode 100644 env/pip-selfcheck.json create mode 100644 env/pyvenv.cfg create mode 100644 env/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/chardet-2.3.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/colorama-0.3.7-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/distlib-0.2.2-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/html5lib-0.999-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/ipaddress-0.0.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/lockfile-0.12.2-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/packaging-16.6-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/pkg_resources-0.0.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/progress-1.2-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/pyparsing-2.0.3-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/retrying-1.3.3-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/setuptools-20.7.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/six-1.10.0-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl create mode 100644 env/share/python-wheels/wheel-0.29.0-py2.py3-none-any.whl create mode 100644 hotel/db.sqlite3 create mode 100644 hotel/hotel/__init__.py create mode 100644 hotel/hotel/__pycache__/__init__.cpython-35.pyc create mode 100644 hotel/hotel/__pycache__/settings.cpython-35.pyc create mode 100644 hotel/hotel/__pycache__/urls.cpython-35.pyc create mode 100644 hotel/hotel/__pycache__/wsgi.cpython-35.pyc create mode 100644 hotel/hotel/settings.py create mode 100644 hotel/hotel/urls.py create mode 100644 hotel/hotel/wsgi.py create mode 100755 hotel/manage.py create mode 100644 hotel/rooms/__init__.py create mode 100644 hotel/rooms/__pycache__/__init__.cpython-35.pyc create mode 100644 hotel/rooms/__pycache__/admin.cpython-35.pyc create mode 100644 hotel/rooms/__pycache__/apps.cpython-35.pyc create mode 100644 hotel/rooms/__pycache__/models.cpython-35.pyc create mode 100644 hotel/rooms/__pycache__/urls.cpython-35.pyc create mode 100644 hotel/rooms/__pycache__/views.cpython-35.pyc create mode 100644 hotel/rooms/admin.py create mode 100644 hotel/rooms/apps.py create mode 100644 hotel/rooms/migrations/0001_initial.py create mode 100644 hotel/rooms/migrations/0002_room_reserved.py create mode 100644 hotel/rooms/migrations/0003_auto_20190112_2306.py create mode 100644 hotel/rooms/migrations/0004_auto_20190112_2307.py create mode 100644 hotel/rooms/migrations/__init__.py create mode 100644 hotel/rooms/migrations/__pycache__/0001_initial.cpython-35.pyc create mode 100644 hotel/rooms/migrations/__pycache__/0002_room_reserved.cpython-35.pyc create mode 100644 hotel/rooms/migrations/__pycache__/0003_auto_20190112_2306.cpython-35.pyc create mode 100644 hotel/rooms/migrations/__pycache__/0004_auto_20190112_2307.cpython-35.pyc create mode 100644 hotel/rooms/migrations/__pycache__/__init__.cpython-35.pyc create mode 100644 hotel/rooms/models.py create mode 100644 hotel/rooms/templates/index.html create mode 100644 hotel/rooms/tests.py create mode 100644 hotel/rooms/urls.py create mode 100644 hotel/rooms/views.py diff --git a/.idea/hotel.iml b/.idea/hotel.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/.idea/hotel.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d6b2cff --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..27ca684 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..affb4a8 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ') + + def _get_base_actions(self): + """Return the list of actions, prior to any request-based filtering.""" + actions = [] + + # Gather actions from the admin site first + for (name, func) in self.admin_site.actions: + description = getattr(func, 'short_description', name.replace('_', ' ')) + actions.append((func, name, description)) + + # Then gather them from the model admin and all parent classes, + # starting with self and working back up. + for klass in self.__class__.mro()[::-1]: + class_actions = getattr(klass, 'actions', []) or [] + actions.extend(self.get_action(action) for action in class_actions) + + # get_action might have returned None, so filter any of those out. + return filter(None, actions) + + def _filter_actions_by_permissions(self, request, actions): + """Filter out any actions that the user doesn't have access to.""" + filtered_actions = [] + for action in actions: + callable = action[0] + if not hasattr(callable, 'allowed_permissions'): + filtered_actions.append(action) + continue + permission_checks = ( + getattr(self, 'has_%s_permission' % permission) + for permission in callable.allowed_permissions + ) + if any(has_permission(request) for has_permission in permission_checks): + filtered_actions.append(action) + return filtered_actions + + def get_actions(self, request): + """ + Return a dictionary mapping the names of all actions for this + ModelAdmin to a tuple of (callable, name, description) for each action. + """ + # If self.actions is set to None that means actions are disabled on + # this page. + if self.actions is None or IS_POPUP_VAR in request.GET: + return OrderedDict() + actions = self._filter_actions_by_permissions(request, self._get_base_actions()) + # Convert the actions into an OrderedDict keyed by name. + return OrderedDict( + (name, (func, name, desc)) + for func, name, desc in actions + ) + + def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH): + """ + Return a list of choices for use in a form object. Each choice is a + tuple (name, description). + """ + choices = [] + default_choices + for func, name, description in self.get_actions(request).values(): + choice = (name, description % model_format_dict(self.opts)) + choices.append(choice) + return choices + + def get_action(self, action): + """ + Return a given action from a parameter, which can either be a callable, + or the name of a method on the ModelAdmin. Return is a tuple of + (callable, name, description). + """ + # If the action is a callable, just use it. + if callable(action): + func = action + action = action.__name__ + + # Next, look for a method. Grab it off self.__class__ to get an unbound + # method instead of a bound one; this ensures that the calling + # conventions are the same for functions and methods. + elif hasattr(self.__class__, action): + func = getattr(self.__class__, action) + + # Finally, look for a named method on the admin site + else: + try: + func = self.admin_site.get_action(action) + except KeyError: + return None + + if hasattr(func, 'short_description'): + description = func.short_description + else: + description = capfirst(action.replace('_', ' ')) + return func, action, description + + def get_list_display(self, request): + """ + Return a sequence containing the fields to be displayed on the + changelist. + """ + return self.list_display + + def get_list_display_links(self, request, list_display): + """ + Return a sequence containing the fields to be displayed as links + on the changelist. The list_display parameter is the list of fields + returned by get_list_display(). + """ + if self.list_display_links or self.list_display_links is None or not list_display: + return self.list_display_links + else: + # Use only the first item in list_display as link + return list(list_display)[:1] + + def get_list_filter(self, request): + """ + Return a sequence containing the fields to be displayed as filters in + the right sidebar of the changelist page. + """ + return self.list_filter + + def get_list_select_related(self, request): + """ + Return a list of fields to add to the select_related() part of the + changelist items query. + """ + return self.list_select_related + + def get_search_fields(self, request): + """ + Return a sequence containing the fields to be searched whenever + somebody submits a search query. + """ + return self.search_fields + + def get_search_results(self, request, queryset, search_term): + """ + Return a tuple containing a queryset to implement the search + and a boolean indicating if the results may contain duplicates. + """ + # Apply keyword searches. + def construct_search(field_name): + if field_name.startswith('^'): + return "%s__istartswith" % field_name[1:] + elif field_name.startswith('='): + return "%s__iexact" % field_name[1:] + elif field_name.startswith('@'): + return "%s__search" % field_name[1:] + # Use field_name if it includes a lookup. + opts = queryset.model._meta + lookup_fields = field_name.split(LOOKUP_SEP) + # Go through the fields, following all relations. + prev_field = None + for path_part in lookup_fields: + if path_part == 'pk': + path_part = opts.pk.name + try: + field = opts.get_field(path_part) + except FieldDoesNotExist: + # Use valid query lookups. + if prev_field and prev_field.get_lookup(path_part): + return field_name + else: + prev_field = field + if hasattr(field, 'get_path_info'): + # Update opts to follow the relation. + opts = field.get_path_info()[-1].to_opts + # Otherwise, use the field with icontains. + return "%s__icontains" % field_name + + use_distinct = False + search_fields = self.get_search_fields(request) + if search_fields and search_term: + orm_lookups = [construct_search(str(search_field)) + for search_field in search_fields] + for bit in search_term.split(): + or_queries = [models.Q(**{orm_lookup: bit}) + for orm_lookup in orm_lookups] + queryset = queryset.filter(reduce(operator.or_, or_queries)) + use_distinct |= any(lookup_needs_distinct(self.opts, search_spec) for search_spec in orm_lookups) + + return queryset, use_distinct + + def get_preserved_filters(self, request): + """ + Return the preserved filters querystring. + """ + match = request.resolver_match + if self.preserve_filters and match: + opts = self.model._meta + current_url = '%s:%s' % (match.app_name, match.url_name) + changelist_url = 'admin:%s_%s_changelist' % (opts.app_label, opts.model_name) + if current_url == changelist_url: + preserved_filters = request.GET.urlencode() + else: + preserved_filters = request.GET.get('_changelist_filters') + + if preserved_filters: + return urlencode({'_changelist_filters': preserved_filters}) + return '' + + def construct_change_message(self, request, form, formsets, add=False): + """ + Construct a JSON structure describing changes from a changed object. + """ + return construct_change_message(form, formsets, add) + + def message_user(self, request, message, level=messages.INFO, extra_tags='', + fail_silently=False): + """ + Send a message to the user. The default implementation + posts a message using the django.contrib.messages backend. + + Exposes almost the same API as messages.add_message(), but accepts the + positional arguments in a different order to maintain backwards + compatibility. For convenience, it accepts the `level` argument as + a string rather than the usual level number. + """ + if not isinstance(level, int): + # attempt to get the level if passed a string + try: + level = getattr(messages.constants, level.upper()) + except AttributeError: + levels = messages.constants.DEFAULT_TAGS.values() + levels_repr = ', '.join('`%s`' % l for l in levels) + raise ValueError( + 'Bad message level string: `%s`. Possible values are: %s' + % (level, levels_repr) + ) + + messages.add_message(request, level, message, extra_tags=extra_tags, fail_silently=fail_silently) + + def save_form(self, request, form, change): + """ + Given a ModelForm return an unsaved instance. ``change`` is True if + the object is being changed, and False if it's being added. + """ + return form.save(commit=False) + + def save_model(self, request, obj, form, change): + """ + Given a model instance save it to the database. + """ + obj.save() + + def delete_model(self, request, obj): + """ + Given a model instance delete it from the database. + """ + obj.delete() + + def delete_queryset(self, request, queryset): + """Given a queryset, delete it from the database.""" + queryset.delete() + + def save_formset(self, request, form, formset, change): + """ + Given an inline formset save it to the database. + """ + formset.save() + + def save_related(self, request, form, formsets, change): + """ + Given the ``HttpRequest``, the parent ``ModelForm`` instance, the + list of inline formsets and a boolean value based on whether the + parent is being added or changed, save the related objects to the + database. Note that at this point save_form() and save_model() have + already been called. + """ + form.save_m2m() + for formset in formsets: + self.save_formset(request, form, formset, change=change) + + def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): + opts = self.model._meta + app_label = opts.app_label + preserved_filters = self.get_preserved_filters(request) + form_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, form_url) + view_on_site_url = self.get_view_on_site_url(obj) + has_editable_inline_admin_formsets = False + for inline in context['inline_admin_formsets']: + if inline.has_add_permission or inline.has_change_permission or inline.has_delete_permission: + has_editable_inline_admin_formsets = True + break + context.update({ + 'add': add, + 'change': change, + 'has_view_permission': self.has_view_permission(request, obj), + 'has_add_permission': self.has_add_permission(request), + 'has_change_permission': self.has_change_permission(request, obj), + 'has_delete_permission': self.has_delete_permission(request, obj), + 'has_editable_inline_admin_formsets': has_editable_inline_admin_formsets, + 'has_file_field': context['adminform'].form.is_multipart() or any( + admin_formset.formset.form().is_multipart() + for admin_formset in context['inline_admin_formsets'] + ), + 'has_absolute_url': view_on_site_url is not None, + 'absolute_url': view_on_site_url, + 'form_url': form_url, + 'opts': opts, + 'content_type_id': get_content_type_for_model(self.model).pk, + 'save_as': self.save_as, + 'save_on_top': self.save_on_top, + 'to_field_var': TO_FIELD_VAR, + 'is_popup_var': IS_POPUP_VAR, + 'app_label': app_label, + }) + if add and self.add_form_template is not None: + form_template = self.add_form_template + else: + form_template = self.change_form_template + + request.current_app = self.admin_site.name + + return TemplateResponse(request, form_template or [ + "admin/%s/%s/change_form.html" % (app_label, opts.model_name), + "admin/%s/change_form.html" % app_label, + "admin/change_form.html" + ], context) + + def response_add(self, request, obj, post_url_continue=None): + """ + Determine the HttpResponse for the add_view stage. + """ + opts = obj._meta + preserved_filters = self.get_preserved_filters(request) + obj_url = reverse( + 'admin:%s_%s_change' % (opts.app_label, opts.model_name), + args=(quote(obj.pk),), + current_app=self.admin_site.name, + ) + # Add a link to the object's change form if the user can edit the obj. + if self.has_change_permission(request, obj): + obj_repr = format_html('{}', urlquote(obj_url), obj) + else: + obj_repr = str(obj) + msg_dict = { + 'name': opts.verbose_name, + 'obj': obj_repr, + } + # Here, we distinguish between different save types by checking for + # the presence of keys in request.POST. + + if IS_POPUP_VAR in request.POST: + to_field = request.POST.get(TO_FIELD_VAR) + if to_field: + attr = str(to_field) + else: + attr = obj._meta.pk.attname + value = obj.serializable_value(attr) + popup_response_data = json.dumps({ + 'value': str(value), + 'obj': str(obj), + }) + return TemplateResponse(request, self.popup_response_template or [ + 'admin/%s/%s/popup_response.html' % (opts.app_label, opts.model_name), + 'admin/%s/popup_response.html' % opts.app_label, + 'admin/popup_response.html', + ], { + 'popup_response_data': popup_response_data, + }) + + elif "_continue" in request.POST or ( + # Redirecting after "Save as new". + "_saveasnew" in request.POST and self.save_as_continue and + self.has_change_permission(request, obj) + ): + msg = _('The {name} "{obj}" was added successfully.') + if self.has_change_permission(request, obj): + msg += ' ' + _('You may edit it again below.') + self.message_user(request, format_html(msg, **msg_dict), messages.SUCCESS) + if post_url_continue is None: + post_url_continue = obj_url + post_url_continue = add_preserved_filters( + {'preserved_filters': preserved_filters, 'opts': opts}, + post_url_continue + ) + return HttpResponseRedirect(post_url_continue) + + elif "_addanother" in request.POST: + msg = format_html( + _('The {name} "{obj}" was added successfully. You may add another {name} below.'), + **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = request.path + redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) + return HttpResponseRedirect(redirect_url) + + else: + msg = format_html( + _('The {name} "{obj}" was added successfully.'), + **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + return self.response_post_save_add(request, obj) + + def response_change(self, request, obj): + """ + Determine the HttpResponse for the change_view stage. + """ + + if IS_POPUP_VAR in request.POST: + opts = obj._meta + to_field = request.POST.get(TO_FIELD_VAR) + attr = str(to_field) if to_field else opts.pk.attname + value = request.resolver_match.kwargs['object_id'] + new_value = obj.serializable_value(attr) + popup_response_data = json.dumps({ + 'action': 'change', + 'value': str(value), + 'obj': str(obj), + 'new_value': str(new_value), + }) + return TemplateResponse(request, self.popup_response_template or [ + 'admin/%s/%s/popup_response.html' % (opts.app_label, opts.model_name), + 'admin/%s/popup_response.html' % opts.app_label, + 'admin/popup_response.html', + ], { + 'popup_response_data': popup_response_data, + }) + + opts = self.model._meta + preserved_filters = self.get_preserved_filters(request) + + msg_dict = { + 'name': opts.verbose_name, + 'obj': format_html('{}', urlquote(request.path), obj), + } + if "_continue" in request.POST: + msg = format_html( + _('The {name} "{obj}" was changed successfully. You may edit it again below.'), + **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = request.path + redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) + return HttpResponseRedirect(redirect_url) + + elif "_saveasnew" in request.POST: + msg = format_html( + _('The {name} "{obj}" was added successfully. You may edit it again below.'), + **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = reverse('admin:%s_%s_change' % + (opts.app_label, opts.model_name), + args=(obj.pk,), + current_app=self.admin_site.name) + redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) + return HttpResponseRedirect(redirect_url) + + elif "_addanother" in request.POST: + msg = format_html( + _('The {name} "{obj}" was changed successfully. You may add another {name} below.'), + **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + redirect_url = reverse('admin:%s_%s_add' % + (opts.app_label, opts.model_name), + current_app=self.admin_site.name) + redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) + return HttpResponseRedirect(redirect_url) + + else: + msg = format_html( + _('The {name} "{obj}" was changed successfully.'), + **msg_dict + ) + self.message_user(request, msg, messages.SUCCESS) + return self.response_post_save_change(request, obj) + + def _response_post_save(self, request, obj): + opts = self.model._meta + if self.has_view_or_change_permission(request): + post_url = reverse('admin:%s_%s_changelist' % + (opts.app_label, opts.model_name), + current_app=self.admin_site.name) + preserved_filters = self.get_preserved_filters(request) + post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url) + else: + post_url = reverse('admin:index', + current_app=self.admin_site.name) + return HttpResponseRedirect(post_url) + + def response_post_save_add(self, request, obj): + """ + Figure out where to redirect after the 'Save' button has been pressed + when adding a new object. + """ + return self._response_post_save(request, obj) + + def response_post_save_change(self, request, obj): + """ + Figure out where to redirect after the 'Save' button has been pressed + when editing an existing object. + """ + return self._response_post_save(request, obj) + + def response_action(self, request, queryset): + """ + Handle an admin action. This is called if a request is POSTed to the + changelist; it returns an HttpResponse if the action was handled, and + None otherwise. + """ + + # There can be multiple action forms on the page (at the top + # and bottom of the change list, for example). Get the action + # whose button was pushed. + try: + action_index = int(request.POST.get('index', 0)) + except ValueError: + action_index = 0 + + # Construct the action form. + data = request.POST.copy() + data.pop(helpers.ACTION_CHECKBOX_NAME, None) + data.pop("index", None) + + # Use the action whose button was pushed + try: + data.update({'action': data.getlist('action')[action_index]}) + except IndexError: + # If we didn't get an action from the chosen form that's invalid + # POST data, so by deleting action it'll fail the validation check + # below. So no need to do anything here + pass + + action_form = self.action_form(data, auto_id=None) + action_form.fields['action'].choices = self.get_action_choices(request) + + # If the form's valid we can handle the action. + if action_form.is_valid(): + action = action_form.cleaned_data['action'] + select_across = action_form.cleaned_data['select_across'] + func = self.get_actions(request)[action][0] + + # Get the list of selected PKs. If nothing's selected, we can't + # perform an action on it, so bail. Except we want to perform + # the action explicitly on all objects. + selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) + if not selected and not select_across: + # Reminder that something needs to be selected or nothing will happen + msg = _("Items must be selected in order to perform " + "actions on them. No items have been changed.") + self.message_user(request, msg, messages.WARNING) + return None + + if not select_across: + # Perform the action only on the selected objects + queryset = queryset.filter(pk__in=selected) + + response = func(self, request, queryset) + + # Actions may return an HttpResponse-like object, which will be + # used as the response from the POST. If not, we'll be a good + # little HTTP citizen and redirect back to the changelist page. + if isinstance(response, HttpResponseBase): + return response + else: + return HttpResponseRedirect(request.get_full_path()) + else: + msg = _("No action selected.") + self.message_user(request, msg, messages.WARNING) + return None + + def response_delete(self, request, obj_display, obj_id): + """ + Determine the HttpResponse for the delete_view stage. + """ + opts = self.model._meta + + if IS_POPUP_VAR in request.POST: + popup_response_data = json.dumps({ + 'action': 'delete', + 'value': str(obj_id), + }) + return TemplateResponse(request, self.popup_response_template or [ + 'admin/%s/%s/popup_response.html' % (opts.app_label, opts.model_name), + 'admin/%s/popup_response.html' % opts.app_label, + 'admin/popup_response.html', + ], { + 'popup_response_data': popup_response_data, + }) + + self.message_user( + request, + _('The %(name)s "%(obj)s" was deleted successfully.') % { + 'name': opts.verbose_name, + 'obj': obj_display, + }, + messages.SUCCESS, + ) + + if self.has_change_permission(request, None): + post_url = reverse( + 'admin:%s_%s_changelist' % (opts.app_label, opts.model_name), + current_app=self.admin_site.name, + ) + preserved_filters = self.get_preserved_filters(request) + post_url = add_preserved_filters( + {'preserved_filters': preserved_filters, 'opts': opts}, post_url + ) + else: + post_url = reverse('admin:index', current_app=self.admin_site.name) + return HttpResponseRedirect(post_url) + + def render_delete_form(self, request, context): + opts = self.model._meta + app_label = opts.app_label + + request.current_app = self.admin_site.name + context.update( + to_field_var=TO_FIELD_VAR, + is_popup_var=IS_POPUP_VAR, + media=self.media, + ) + + return TemplateResponse( + request, + self.delete_confirmation_template or [ + "admin/{}/{}/delete_confirmation.html".format(app_label, opts.model_name), + "admin/{}/delete_confirmation.html".format(app_label), + "admin/delete_confirmation.html", + ], + context, + ) + + def get_inline_formsets(self, request, formsets, inline_instances, obj=None): + inline_admin_formsets = [] + for inline, formset in zip(inline_instances, formsets): + fieldsets = list(inline.get_fieldsets(request, obj)) + readonly = list(inline.get_readonly_fields(request, obj)) + has_add_permission = inline._has_add_permission(request, obj) + has_change_permission = inline.has_change_permission(request, obj) + has_delete_permission = inline.has_delete_permission(request, obj) + has_view_permission = inline.has_view_permission(request, obj) + prepopulated = dict(inline.get_prepopulated_fields(request, obj)) + inline_admin_formset = helpers.InlineAdminFormSet( + inline, formset, fieldsets, prepopulated, readonly, model_admin=self, + has_add_permission=has_add_permission, has_change_permission=has_change_permission, + has_delete_permission=has_delete_permission, has_view_permission=has_view_permission, + ) + inline_admin_formsets.append(inline_admin_formset) + return inline_admin_formsets + + def get_changeform_initial_data(self, request): + """ + Get the initial form data from the request's GET params. + """ + initial = dict(request.GET.items()) + for k in initial: + try: + f = self.model._meta.get_field(k) + except FieldDoesNotExist: + continue + # We have to special-case M2Ms as a list of comma-separated PKs. + if isinstance(f, models.ManyToManyField): + initial[k] = initial[k].split(",") + return initial + + def _get_obj_does_not_exist_redirect(self, request, opts, object_id): + """ + Create a message informing the user that the object doesn't exist + and return a redirect to the admin index page. + """ + msg = _("""%(name)s with ID "%(key)s" doesn't exist. Perhaps it was deleted?""") % { + 'name': opts.verbose_name, + 'key': unquote(object_id), + } + self.message_user(request, msg, messages.WARNING) + url = reverse('admin:index', current_app=self.admin_site.name) + return HttpResponseRedirect(url) + + @csrf_protect_m + def changeform_view(self, request, object_id=None, form_url='', extra_context=None): + with transaction.atomic(using=router.db_for_write(self.model)): + return self._changeform_view(request, object_id, form_url, extra_context) + + def _changeform_view(self, request, object_id, form_url, extra_context): + to_field = request.POST.get(TO_FIELD_VAR, request.GET.get(TO_FIELD_VAR)) + if to_field and not self.to_field_allowed(request, to_field): + raise DisallowedModelAdminToField("The field %s cannot be referenced." % to_field) + + model = self.model + opts = model._meta + + if request.method == 'POST' and '_saveasnew' in request.POST: + object_id = None + + add = object_id is None + + if add: + if not self.has_add_permission(request): + raise PermissionDenied + obj = None + + else: + obj = self.get_object(request, unquote(object_id), to_field) + + if not self.has_view_or_change_permission(request, obj): + raise PermissionDenied + + if obj is None: + return self._get_obj_does_not_exist_redirect(request, opts, object_id) + + ModelForm = self.get_form(request, obj, change=not add) + if request.method == 'POST': + form = ModelForm(request.POST, request.FILES, instance=obj) + form_validated = form.is_valid() + if form_validated: + new_object = self.save_form(request, form, change=not add) + else: + new_object = form.instance + formsets, inline_instances = self._create_formsets(request, new_object, change=not add) + if all_valid(formsets) and form_validated: + self.save_model(request, new_object, form, not add) + self.save_related(request, form, formsets, not add) + change_message = self.construct_change_message(request, form, formsets, add) + if add: + self.log_addition(request, new_object, change_message) + return self.response_add(request, new_object) + else: + self.log_change(request, new_object, change_message) + return self.response_change(request, new_object) + else: + form_validated = False + else: + if add: + initial = self.get_changeform_initial_data(request) + form = ModelForm(initial=initial) + formsets, inline_instances = self._create_formsets(request, form.instance, change=False) + else: + form = ModelForm(instance=obj) + formsets, inline_instances = self._create_formsets(request, obj, change=True) + + if not add and not self.has_change_permission(request, obj): + readonly_fields = flatten_fieldsets(self.get_fieldsets(request, obj)) + else: + readonly_fields = self.get_readonly_fields(request, obj) + adminForm = helpers.AdminForm( + form, + list(self.get_fieldsets(request, obj)), + # Clear prepopulated fields on a view-only form to avoid a crash. + self.get_prepopulated_fields(request, obj) if add or self.has_change_permission(request, obj) else {}, + readonly_fields, + model_admin=self) + media = self.media + adminForm.media + + inline_formsets = self.get_inline_formsets(request, formsets, inline_instances, obj) + for inline_formset in inline_formsets: + media = media + inline_formset.media + + if add: + title = _('Add %s') + elif self.has_change_permission(request, obj): + title = _('Change %s') + else: + title = _('View %s') + context = { + **self.admin_site.each_context(request), + 'title': title % opts.verbose_name, + 'adminform': adminForm, + 'object_id': object_id, + 'original': obj, + 'is_popup': IS_POPUP_VAR in request.POST or IS_POPUP_VAR in request.GET, + 'to_field': to_field, + 'media': media, + 'inline_admin_formsets': inline_formsets, + 'errors': helpers.AdminErrorList(form, formsets), + 'preserved_filters': self.get_preserved_filters(request), + } + + # Hide the "Save" and "Save and continue" buttons if "Save as New" was + # previously chosen to prevent the interface from getting confusing. + if request.method == 'POST' and not form_validated and "_saveasnew" in request.POST: + context['show_save'] = False + context['show_save_and_continue'] = False + # Use the change template instead of the add template. + add = False + + context.update(extra_context or {}) + + return self.render_change_form(request, context, add=add, change=not add, obj=obj, form_url=form_url) + + def autocomplete_view(self, request): + return AutocompleteJsonView.as_view(model_admin=self)(request) + + def add_view(self, request, form_url='', extra_context=None): + return self.changeform_view(request, None, form_url, extra_context) + + def change_view(self, request, object_id, form_url='', extra_context=None): + return self.changeform_view(request, object_id, form_url, extra_context) + + def _get_edited_object_pks(self, request, prefix): + """Return POST data values of list_editable primary keys.""" + pk_pattern = re.compile(r'{}-\d+-{}$'.format(prefix, self.model._meta.pk.name)) + return [value for key, value in request.POST.items() if pk_pattern.match(key)] + + def _get_list_editable_queryset(self, request, prefix): + """ + Based on POST data, return a queryset of the objects that were edited + via list_editable. + """ + object_pks = self._get_edited_object_pks(request, prefix) + queryset = self.get_queryset(request) + validate = queryset.model._meta.pk.to_python + try: + for pk in object_pks: + validate(pk) + except ValidationError: + # Disable the optimization if the POST data was tampered with. + return queryset + return queryset.filter(pk__in=object_pks) + + @csrf_protect_m + def changelist_view(self, request, extra_context=None): + """ + The 'change list' admin view for this model. + """ + from django.contrib.admin.views.main import ERROR_FLAG + opts = self.model._meta + app_label = opts.app_label + if not self.has_view_or_change_permission(request): + raise PermissionDenied + + try: + cl = self.get_changelist_instance(request) + except IncorrectLookupParameters: + # Wacky lookup parameters were given, so redirect to the main + # changelist page, without parameters, and pass an 'invalid=1' + # parameter via the query string. If wacky parameters were given + # and the 'invalid=1' parameter was already in the query string, + # something is screwed up with the database, so display an error + # page. + if ERROR_FLAG in request.GET: + return SimpleTemplateResponse('admin/invalid_setup.html', { + 'title': _('Database error'), + }) + return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1') + + # If the request was POSTed, this might be a bulk action or a bulk + # edit. Try to look up an action or confirmation first, but if this + # isn't an action the POST will fall through to the bulk edit check, + # below. + action_failed = False + selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME) + + actions = self.get_actions(request) + # Actions with no confirmation + if (actions and request.method == 'POST' and + 'index' in request.POST and '_save' not in request.POST): + if selected: + response = self.response_action(request, queryset=cl.get_queryset(request)) + if response: + return response + else: + action_failed = True + else: + msg = _("Items must be selected in order to perform " + "actions on them. No items have been changed.") + self.message_user(request, msg, messages.WARNING) + action_failed = True + + # Actions with confirmation + if (actions and request.method == 'POST' and + helpers.ACTION_CHECKBOX_NAME in request.POST and + 'index' not in request.POST and '_save' not in request.POST): + if selected: + response = self.response_action(request, queryset=cl.get_queryset(request)) + if response: + return response + else: + action_failed = True + + if action_failed: + # Redirect back to the changelist page to avoid resubmitting the + # form if the user refreshes the browser or uses the "No, take + # me back" button on the action confirmation page. + return HttpResponseRedirect(request.get_full_path()) + + # If we're allowing changelist editing, we need to construct a formset + # for the changelist given all the fields to be edited. Then we'll + # use the formset to validate/process POSTed data. + formset = cl.formset = None + + # Handle POSTed bulk-edit data. + if request.method == 'POST' and cl.list_editable and '_save' in request.POST: + if not self.has_change_permission(request): + raise PermissionDenied + FormSet = self.get_changelist_formset(request) + modified_objects = self._get_list_editable_queryset(request, FormSet.get_default_prefix()) + formset = cl.formset = FormSet(request.POST, request.FILES, queryset=modified_objects) + if formset.is_valid(): + changecount = 0 + for form in formset.forms: + if form.has_changed(): + obj = self.save_form(request, form, change=True) + self.save_model(request, obj, form, change=True) + self.save_related(request, form, formsets=[], change=True) + change_msg = self.construct_change_message(request, form, None) + self.log_change(request, obj, change_msg) + changecount += 1 + + if changecount: + msg = ngettext( + "%(count)s %(name)s was changed successfully.", + "%(count)s %(name)s were changed successfully.", + changecount + ) % { + 'count': changecount, + 'name': model_ngettext(opts, changecount), + } + self.message_user(request, msg, messages.SUCCESS) + + return HttpResponseRedirect(request.get_full_path()) + + # Handle GET -- construct a formset for display. + elif cl.list_editable and self.has_change_permission(request): + FormSet = self.get_changelist_formset(request) + formset = cl.formset = FormSet(queryset=cl.result_list) + + # Build the list of media to be used by the formset. + if formset: + media = self.media + formset.media + else: + media = self.media + + # Build the action form and populate it with available actions. + if actions: + action_form = self.action_form(auto_id=None) + action_form.fields['action'].choices = self.get_action_choices(request) + media += action_form.media + else: + action_form = None + + selection_note_all = ngettext( + '%(total_count)s selected', + 'All %(total_count)s selected', + cl.result_count + ) + + context = { + **self.admin_site.each_context(request), + 'module_name': str(opts.verbose_name_plural), + 'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)}, + 'selection_note_all': selection_note_all % {'total_count': cl.result_count}, + 'title': cl.title, + 'is_popup': cl.is_popup, + 'to_field': cl.to_field, + 'cl': cl, + 'media': media, + 'has_add_permission': self.has_add_permission(request), + 'opts': cl.opts, + 'action_form': action_form, + 'actions_on_top': self.actions_on_top, + 'actions_on_bottom': self.actions_on_bottom, + 'actions_selection_counter': self.actions_selection_counter, + 'preserved_filters': self.get_preserved_filters(request), + **(extra_context or {}), + } + + request.current_app = self.admin_site.name + + return TemplateResponse(request, self.change_list_template or [ + 'admin/%s/%s/change_list.html' % (app_label, opts.model_name), + 'admin/%s/change_list.html' % app_label, + 'admin/change_list.html' + ], context) + + def get_deleted_objects(self, objs, request): + """ + Hook for customizing the delete process for the delete view and the + "delete selected" action. + """ + return get_deleted_objects(objs, request, self.admin_site) + + @csrf_protect_m + def delete_view(self, request, object_id, extra_context=None): + with transaction.atomic(using=router.db_for_write(self.model)): + return self._delete_view(request, object_id, extra_context) + + def _delete_view(self, request, object_id, extra_context): + "The 'delete' admin view for this model." + opts = self.model._meta + app_label = opts.app_label + + to_field = request.POST.get(TO_FIELD_VAR, request.GET.get(TO_FIELD_VAR)) + if to_field and not self.to_field_allowed(request, to_field): + raise DisallowedModelAdminToField("The field %s cannot be referenced." % to_field) + + obj = self.get_object(request, unquote(object_id), to_field) + + if not self.has_delete_permission(request, obj): + raise PermissionDenied + + if obj is None: + return self._get_obj_does_not_exist_redirect(request, opts, object_id) + + # Populate deleted_objects, a data structure of all related objects that + # will also be deleted. + deleted_objects, model_count, perms_needed, protected = self.get_deleted_objects([obj], request) + + if request.POST and not protected: # The user has confirmed the deletion. + if perms_needed: + raise PermissionDenied + obj_display = str(obj) + attr = str(to_field) if to_field else opts.pk.attname + obj_id = obj.serializable_value(attr) + self.log_deletion(request, obj, obj_display) + self.delete_model(request, obj) + + return self.response_delete(request, obj_display, obj_id) + + object_name = str(opts.verbose_name) + + if perms_needed or protected: + title = _("Cannot delete %(name)s") % {"name": object_name} + else: + title = _("Are you sure?") + + context = { + **self.admin_site.each_context(request), + 'title': title, + 'object_name': object_name, + 'object': obj, + 'deleted_objects': deleted_objects, + 'model_count': dict(model_count).items(), + 'perms_lacking': perms_needed, + 'protected': protected, + 'opts': opts, + 'app_label': app_label, + 'preserved_filters': self.get_preserved_filters(request), + 'is_popup': IS_POPUP_VAR in request.POST or IS_POPUP_VAR in request.GET, + 'to_field': to_field, + **(extra_context or {}), + } + + return self.render_delete_form(request, context) + + def history_view(self, request, object_id, extra_context=None): + "The 'history' admin view for this model." + from django.contrib.admin.models import LogEntry + # First check if the user can see this history. + model = self.model + obj = self.get_object(request, unquote(object_id)) + if obj is None: + return self._get_obj_does_not_exist_redirect(request, model._meta, object_id) + + if not self.has_view_or_change_permission(request, obj): + raise PermissionDenied + + # Then get the history for this object. + opts = model._meta + app_label = opts.app_label + action_list = LogEntry.objects.filter( + object_id=unquote(object_id), + content_type=get_content_type_for_model(model) + ).select_related().order_by('action_time') + + context = { + **self.admin_site.each_context(request), + 'title': _('Change history: %s') % obj, + 'action_list': action_list, + 'module_name': str(capfirst(opts.verbose_name_plural)), + 'object': obj, + 'opts': opts, + 'preserved_filters': self.get_preserved_filters(request), + **(extra_context or {}), + } + + request.current_app = self.admin_site.name + + return TemplateResponse(request, self.object_history_template or [ + "admin/%s/%s/object_history.html" % (app_label, opts.model_name), + "admin/%s/object_history.html" % app_label, + "admin/object_history.html" + ], context) + + def _create_formsets(self, request, obj, change): + "Helper function to generate formsets for add/change_view." + formsets = [] + inline_instances = [] + prefixes = {} + get_formsets_args = [request] + if change: + get_formsets_args.append(obj) + for FormSet, inline in self.get_formsets_with_inlines(*get_formsets_args): + prefix = FormSet.get_default_prefix() + prefixes[prefix] = prefixes.get(prefix, 0) + 1 + if prefixes[prefix] != 1 or not prefix: + prefix = "%s-%s" % (prefix, prefixes[prefix]) + formset_params = { + 'instance': obj, + 'prefix': prefix, + 'queryset': inline.get_queryset(request), + } + if request.method == 'POST': + formset_params.update({ + 'data': request.POST.copy(), + 'files': request.FILES, + 'save_as_new': '_saveasnew' in request.POST + }) + formset = FormSet(**formset_params) + + def user_deleted_form(request, obj, formset, index): + """Return whether or not the user deleted the form.""" + return ( + inline.has_delete_permission(request, obj) and + '{}-{}-DELETE'.format(formset.prefix, index) in request.POST + ) + + # Bypass validation of each view-only inline form (since the form's + # data won't be in request.POST), unless the form was deleted. + if not inline.has_change_permission(request, obj if change else None): + for index, form in enumerate(formset.initial_forms): + if user_deleted_form(request, obj, formset, index): + continue + form._errors = {} + form.cleaned_data = form.initial + formsets.append(formset) + inline_instances.append(inline) + return formsets, inline_instances + + +class InlineModelAdmin(BaseModelAdmin): + """ + Options for inline editing of ``model`` instances. + + Provide ``fk_name`` to specify the attribute name of the ``ForeignKey`` + from ``model`` to its parent. This is required if ``model`` has more than + one ``ForeignKey`` to its parent. + """ + model = None + fk_name = None + formset = BaseInlineFormSet + extra = 3 + min_num = None + max_num = None + template = None + verbose_name = None + verbose_name_plural = None + can_delete = True + show_change_link = False + checks_class = InlineModelAdminChecks + classes = None + + def __init__(self, parent_model, admin_site): + self.admin_site = admin_site + self.parent_model = parent_model + self.opts = self.model._meta + self.has_registered_model = admin_site.is_registered(self.model) + super().__init__() + if self.verbose_name is None: + self.verbose_name = self.model._meta.verbose_name + if self.verbose_name_plural is None: + self.verbose_name_plural = self.model._meta.verbose_name_plural + + @property + def media(self): + extra = '' if settings.DEBUG else '.min' + js = ['vendor/jquery/jquery%s.js' % extra, 'jquery.init.js', + 'inlines%s.js' % extra] + if self.filter_vertical or self.filter_horizontal: + js.extend(['SelectBox.js', 'SelectFilter2.js']) + if self.classes and 'collapse' in self.classes: + js.append('collapse%s.js' % extra) + return forms.Media(js=['admin/js/%s' % url for url in js]) + + def _has_add_permission(self, request, obj): + # RemovedInDjango30Warning: obj will be a required argument. + args = get_func_args(self.has_add_permission) + return self.has_add_permission(request, obj) if 'obj' in args else self.has_add_permission(request) + + def get_extra(self, request, obj=None, **kwargs): + """Hook for customizing the number of extra inline forms.""" + return self.extra + + def get_min_num(self, request, obj=None, **kwargs): + """Hook for customizing the min number of inline forms.""" + return self.min_num + + def get_max_num(self, request, obj=None, **kwargs): + """Hook for customizing the max number of extra inline forms.""" + return self.max_num + + def get_formset(self, request, obj=None, **kwargs): + """Return a BaseInlineFormSet class for use in admin add/change views.""" + if 'fields' in kwargs: + fields = kwargs.pop('fields') + else: + fields = flatten_fieldsets(self.get_fieldsets(request, obj)) + excluded = self.get_exclude(request, obj) + exclude = [] if excluded is None else list(excluded) + exclude.extend(self.get_readonly_fields(request, obj)) + if excluded is None and hasattr(self.form, '_meta') and self.form._meta.exclude: + # Take the custom ModelForm's Meta.exclude into account only if the + # InlineModelAdmin doesn't define its own. + exclude.extend(self.form._meta.exclude) + # If exclude is an empty list we use None, since that's the actual + # default. + exclude = exclude or None + can_delete = self.can_delete and self.has_delete_permission(request, obj) + defaults = { + 'form': self.form, + 'formset': self.formset, + 'fk_name': self.fk_name, + 'fields': fields, + 'exclude': exclude, + 'formfield_callback': partial(self.formfield_for_dbfield, request=request), + 'extra': self.get_extra(request, obj, **kwargs), + 'min_num': self.get_min_num(request, obj, **kwargs), + 'max_num': self.get_max_num(request, obj, **kwargs), + 'can_delete': can_delete, + **kwargs, + } + + base_model_form = defaults['form'] + can_change = self.has_change_permission(request, obj) if request else True + can_add = self._has_add_permission(request, obj) if request else True + + class DeleteProtectedModelForm(base_model_form): + + def hand_clean_DELETE(self): + """ + We don't validate the 'DELETE' field itself because on + templates it's not rendered using the field information, but + just using a generic "deletion_field" of the InlineModelAdmin. + """ + if self.cleaned_data.get(DELETION_FIELD_NAME, False): + using = router.db_for_write(self._meta.model) + collector = NestedObjects(using=using) + if self.instance._state.adding: + return + collector.collect([self.instance]) + if collector.protected: + objs = [] + for p in collector.protected: + objs.append( + # Translators: Model verbose name and instance representation, + # suitable to be an item in a list. + _('%(class_name)s %(instance)s') % { + 'class_name': p._meta.verbose_name, + 'instance': p} + ) + params = {'class_name': self._meta.model._meta.verbose_name, + 'instance': self.instance, + 'related_objects': get_text_list(objs, _('and'))} + msg = _("Deleting %(class_name)s %(instance)s would require " + "deleting the following protected related objects: " + "%(related_objects)s") + raise ValidationError(msg, code='deleting_protected', params=params) + + def is_valid(self): + result = super().is_valid() + self.hand_clean_DELETE() + return result + + def has_changed(self): + # Protect against unauthorized edits. + if not can_change and not self.instance._state.adding: + return False + if not can_add and self.instance._state.adding: + return False + return super().has_changed() + + defaults['form'] = DeleteProtectedModelForm + + if defaults['fields'] is None and not modelform_defines_fields(defaults['form']): + defaults['fields'] = forms.ALL_FIELDS + + return inlineformset_factory(self.parent_model, self.model, **defaults) + + def _get_form_for_get_fields(self, request, obj=None): + return self.get_formset(request, obj, fields=None).form + + def get_queryset(self, request): + queryset = super().get_queryset(request) + if not self.has_view_or_change_permission(request): + queryset = queryset.none() + return queryset + + def has_add_permission(self, request, obj): + if self.opts.auto_created: + # We're checking the rights to an auto-created intermediate model, + # which doesn't have its own individual permissions. The user needs + # to have the view permission for the related model in order to + # be able to do anything with the intermediate model. + return self.has_view_permission(request, obj) + return super().has_add_permission(request) + + def has_change_permission(self, request, obj=None): + if self.opts.auto_created: + # We're checking the rights to an auto-created intermediate model, + # which doesn't have its own individual permissions. The user needs + # to have the view permission for the related model in order to + # be able to do anything with the intermediate model. + return self.has_view_permission(request, obj) + return super().has_change_permission(request) + + def has_delete_permission(self, request, obj=None): + if self.opts.auto_created: + # We're checking the rights to an auto-created intermediate model, + # which doesn't have its own individual permissions. The user needs + # to have the view permission for the related model in order to + # be able to do anything with the intermediate model. + return self.has_view_permission(request, obj) + return super().has_delete_permission(request, obj) + + def has_view_permission(self, request, obj=None): + if self.opts.auto_created: + opts = self.opts + # The model was auto-created as intermediary for a many-to-many + # Many-relationship; find the target model. + for field in opts.fields: + if field.remote_field and field.remote_field.model != self.parent_model: + opts = field.remote_field.model._meta + break + return ( + request.user.has_perm('%s.%s' % (opts.app_label, get_permission_codename('view', opts))) or + request.user.has_perm('%s.%s' % (opts.app_label, get_permission_codename('change', opts))) + ) + return super().has_view_permission(request) + + +class StackedInline(InlineModelAdmin): + template = 'admin/edit_inline/stacked.html' + + +class TabularInline(InlineModelAdmin): + template = 'admin/edit_inline/tabular.html' diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/sites.py b/env/lib/python3.5/site-packages/django/contrib/admin/sites.py new file mode 100644 index 0000000..0dafe97 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/sites.py @@ -0,0 +1,534 @@ +from functools import update_wrapper +from weakref import WeakSet + +from django.apps import apps +from django.contrib.admin import ModelAdmin, actions +from django.contrib.auth import REDIRECT_FIELD_NAME +from django.core.exceptions import ImproperlyConfigured +from django.db.models.base import ModelBase +from django.http import Http404, HttpResponseRedirect +from django.template.response import TemplateResponse +from django.urls import NoReverseMatch, reverse +from django.utils.functional import LazyObject +from django.utils.module_loading import import_string +from django.utils.text import capfirst +from django.utils.translation import gettext as _, gettext_lazy +from django.views.decorators.cache import never_cache +from django.views.decorators.csrf import csrf_protect +from django.views.i18n import JavaScriptCatalog + +all_sites = WeakSet() + + +class AlreadyRegistered(Exception): + pass + + +class NotRegistered(Exception): + pass + + +class AdminSite: + """ + An AdminSite object encapsulates an instance of the Django admin application, ready + to be hooked in to your URLconf. Models are registered with the AdminSite using the + register() method, and the get_urls() method can then be used to access Django view + functions that present a full admin interface for the collection of registered + models. + """ + + # Text to put at the end of each page's . + site_title = gettext_lazy('Django site admin') + + # Text to put in each page's <h1>. + site_header = gettext_lazy('Django administration') + + # Text to put at the top of the admin index page. + index_title = gettext_lazy('Site administration') + + # URL for the "View site" link at the top of each admin page. + site_url = '/' + + _empty_value_display = '-' + + login_form = None + index_template = None + app_index_template = None + login_template = None + logout_template = None + password_change_template = None + password_change_done_template = None + + def __init__(self, name='admin'): + self._registry = {} # model_class class -> admin_class instance + self.name = name + self._actions = {'delete_selected': actions.delete_selected} + self._global_actions = self._actions.copy() + all_sites.add(self) + + def check(self, app_configs): + """ + Run the system checks on all ModelAdmins, except if they aren't + customized at all. + """ + if app_configs is None: + app_configs = apps.get_app_configs() + app_configs = set(app_configs) # Speed up lookups below + + errors = [] + modeladmins = (o for o in self._registry.values() if o.__class__ is not ModelAdmin) + for modeladmin in modeladmins: + if modeladmin.model._meta.app_config in app_configs: + errors.extend(modeladmin.check()) + return errors + + def register(self, model_or_iterable, admin_class=None, **options): + """ + Register the given model(s) with the given admin class. + + The model(s) should be Model classes, not instances. + + If an admin class isn't given, use ModelAdmin (the default admin + options). If keyword arguments are given -- e.g., list_display -- + apply them as options to the admin class. + + If a model is already registered, raise AlreadyRegistered. + + If a model is abstract, raise ImproperlyConfigured. + """ + admin_class = admin_class or ModelAdmin + if isinstance(model_or_iterable, ModelBase): + model_or_iterable = [model_or_iterable] + for model in model_or_iterable: + if model._meta.abstract: + raise ImproperlyConfigured( + 'The model %s is abstract, so it cannot be registered with admin.' % model.__name__ + ) + + if model in self._registry: + raise AlreadyRegistered('The model %s is already registered' % model.__name__) + + # Ignore the registration if the model has been + # swapped out. + if not model._meta.swapped: + # If we got **options then dynamically construct a subclass of + # admin_class with those **options. + if options: + # For reasons I don't quite understand, without a __module__ + # the created class appears to "live" in the wrong place, + # which causes issues later on. + options['__module__'] = __name__ + admin_class = type("%sAdmin" % model.__name__, (admin_class,), options) + + # Instantiate the admin class to save in the registry + self._registry[model] = admin_class(model, self) + + def unregister(self, model_or_iterable): + """ + Unregister the given model(s). + + If a model isn't already registered, raise NotRegistered. + """ + if isinstance(model_or_iterable, ModelBase): + model_or_iterable = [model_or_iterable] + for model in model_or_iterable: + if model not in self._registry: + raise NotRegistered('The model %s is not registered' % model.__name__) + del self._registry[model] + + def is_registered(self, model): + """ + Check if a model class is registered with this `AdminSite`. + """ + return model in self._registry + + def add_action(self, action, name=None): + """ + Register an action to be available globally. + """ + name = name or action.__name__ + self._actions[name] = action + self._global_actions[name] = action + + def disable_action(self, name): + """ + Disable a globally-registered action. Raise KeyError for invalid names. + """ + del self._actions[name] + + def get_action(self, name): + """ + Explicitly get a registered global action whether it's enabled or + not. Raise KeyError for invalid names. + """ + return self._global_actions[name] + + @property + def actions(self): + """ + Get all the enabled actions as an iterable of (name, func). + """ + return self._actions.items() + + @property + def empty_value_display(self): + return self._empty_value_display + + @empty_value_display.setter + def empty_value_display(self, empty_value_display): + self._empty_value_display = empty_value_display + + def has_permission(self, request): + """ + Return True if the given HttpRequest has permission to view + *at least one* page in the admin site. + """ + return request.user.is_active and request.user.is_staff + + def admin_view(self, view, cacheable=False): + """ + Decorator to create an admin view attached to this ``AdminSite``. This + wraps the view and provides permission checking by calling + ``self.has_permission``. + + You'll want to use this from within ``AdminSite.get_urls()``: + + class MyAdminSite(AdminSite): + + def get_urls(self): + from django.urls import path + + urls = super().get_urls() + urls += [ + path('my_view/', self.admin_view(some_view)) + ] + return urls + + By default, admin_views are marked non-cacheable using the + ``never_cache`` decorator. If the view can be safely cached, set + cacheable=True. + """ + def inner(request, *args, **kwargs): + if not self.has_permission(request): + if request.path == reverse('admin:logout', current_app=self.name): + index_path = reverse('admin:index', current_app=self.name) + return HttpResponseRedirect(index_path) + # Inner import to prevent django.contrib.admin (app) from + # importing django.contrib.auth.models.User (unrelated model). + from django.contrib.auth.views import redirect_to_login + return redirect_to_login( + request.get_full_path(), + reverse('admin:login', current_app=self.name) + ) + return view(request, *args, **kwargs) + if not cacheable: + inner = never_cache(inner) + # We add csrf_protect here so this function can be used as a utility + # function for any view, without having to repeat 'csrf_protect'. + if not getattr(view, 'csrf_exempt', False): + inner = csrf_protect(inner) + return update_wrapper(inner, view) + + def get_urls(self): + from django.urls import include, path, re_path + # Since this module gets imported in the application's root package, + # it cannot import models from other applications at the module level, + # and django.contrib.contenttypes.views imports ContentType. + from django.contrib.contenttypes import views as contenttype_views + + def wrap(view, cacheable=False): + def wrapper(*args, **kwargs): + return self.admin_view(view, cacheable)(*args, **kwargs) + wrapper.admin_site = self + return update_wrapper(wrapper, view) + + # Admin-site-wide views. + urlpatterns = [ + path('', wrap(self.index), name='index'), + path('login/', self.login, name='login'), + path('logout/', wrap(self.logout), name='logout'), + path('password_change/', wrap(self.password_change, cacheable=True), name='password_change'), + path( + 'password_change/done/', + wrap(self.password_change_done, cacheable=True), + name='password_change_done', + ), + path('jsi18n/', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'), + path( + 'r/<int:content_type_id>/<path:object_id>/', + wrap(contenttype_views.shortcut), + name='view_on_site', + ), + ] + + # Add in each model's views, and create a list of valid URLS for the + # app_index + valid_app_labels = [] + for model, model_admin in self._registry.items(): + urlpatterns += [ + path('%s/%s/' % (model._meta.app_label, model._meta.model_name), include(model_admin.urls)), + ] + if model._meta.app_label not in valid_app_labels: + valid_app_labels.append(model._meta.app_label) + + # If there were ModelAdmins registered, we should have a list of app + # labels for which we need to allow access to the app_index view, + if valid_app_labels: + regex = r'^(?P<app_label>' + '|'.join(valid_app_labels) + ')/$' + urlpatterns += [ + re_path(regex, wrap(self.app_index), name='app_list'), + ] + return urlpatterns + + @property + def urls(self): + return self.get_urls(), 'admin', self.name + + def each_context(self, request): + """ + Return a dictionary of variables to put in the template context for + *every* page in the admin site. + + For sites running on a subpath, use the SCRIPT_NAME value if site_url + hasn't been customized. + """ + script_name = request.META['SCRIPT_NAME'] + site_url = script_name if self.site_url == '/' and script_name else self.site_url + return { + 'site_title': self.site_title, + 'site_header': self.site_header, + 'site_url': site_url, + 'has_permission': self.has_permission(request), + 'available_apps': self.get_app_list(request), + } + + def password_change(self, request, extra_context=None): + """ + Handle the "change password" task -- both form display and validation. + """ + from django.contrib.admin.forms import AdminPasswordChangeForm + from django.contrib.auth.views import PasswordChangeView + url = reverse('admin:password_change_done', current_app=self.name) + defaults = { + 'form_class': AdminPasswordChangeForm, + 'success_url': url, + 'extra_context': {**self.each_context(request), **(extra_context or {})}, + } + if self.password_change_template is not None: + defaults['template_name'] = self.password_change_template + request.current_app = self.name + return PasswordChangeView.as_view(**defaults)(request) + + def password_change_done(self, request, extra_context=None): + """ + Display the "success" page after a password change. + """ + from django.contrib.auth.views import PasswordChangeDoneView + defaults = { + 'extra_context': {**self.each_context(request), **(extra_context or {})}, + } + if self.password_change_done_template is not None: + defaults['template_name'] = self.password_change_done_template + request.current_app = self.name + return PasswordChangeDoneView.as_view(**defaults)(request) + + def i18n_javascript(self, request, extra_context=None): + """ + Display the i18n JavaScript that the Django admin requires. + + `extra_context` is unused but present for consistency with the other + admin views. + """ + return JavaScriptCatalog.as_view(packages=['django.contrib.admin'])(request) + + @never_cache + def logout(self, request, extra_context=None): + """ + Log out the user for the given HttpRequest. + + This should *not* assume the user is already logged in. + """ + from django.contrib.auth.views import LogoutView + defaults = { + 'extra_context': { + **self.each_context(request), + # Since the user isn't logged out at this point, the value of + # has_permission must be overridden. + 'has_permission': False, + **(extra_context or {}) + }, + } + if self.logout_template is not None: + defaults['template_name'] = self.logout_template + request.current_app = self.name + return LogoutView.as_view(**defaults)(request) + + @never_cache + def login(self, request, extra_context=None): + """ + Display the login form for the given HttpRequest. + """ + if request.method == 'GET' and self.has_permission(request): + # Already logged-in, redirect to admin index + index_path = reverse('admin:index', current_app=self.name) + return HttpResponseRedirect(index_path) + + from django.contrib.auth.views import LoginView + # Since this module gets imported in the application's root package, + # it cannot import models from other applications at the module level, + # and django.contrib.admin.forms eventually imports User. + from django.contrib.admin.forms import AdminAuthenticationForm + context = { + **self.each_context(request), + 'title': _('Log in'), + 'app_path': request.get_full_path(), + 'username': request.user.get_username(), + } + if (REDIRECT_FIELD_NAME not in request.GET and + REDIRECT_FIELD_NAME not in request.POST): + context[REDIRECT_FIELD_NAME] = reverse('admin:index', current_app=self.name) + context.update(extra_context or {}) + + defaults = { + 'extra_context': context, + 'authentication_form': self.login_form or AdminAuthenticationForm, + 'template_name': self.login_template or 'admin/login.html', + } + request.current_app = self.name + return LoginView.as_view(**defaults)(request) + + def _build_app_dict(self, request, label=None): + """ + Build the app dictionary. The optional `label` parameter filters models + of a specific app. + """ + app_dict = {} + + if label: + models = { + m: m_a for m, m_a in self._registry.items() + if m._meta.app_label == label + } + else: + models = self._registry + + for model, model_admin in models.items(): + app_label = model._meta.app_label + + has_module_perms = model_admin.has_module_permission(request) + if not has_module_perms: + continue + + perms = model_admin.get_model_perms(request) + + # Check whether user has any perm for this module. + # If so, add the module to the model_list. + if True not in perms.values(): + continue + + info = (app_label, model._meta.model_name) + model_dict = { + 'name': capfirst(model._meta.verbose_name_plural), + 'object_name': model._meta.object_name, + 'perms': perms, + } + if perms.get('change') or perms.get('view'): + model_dict['view_only'] = not perms.get('change') + try: + model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name) + except NoReverseMatch: + pass + if perms.get('add'): + try: + model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name) + except NoReverseMatch: + pass + + if app_label in app_dict: + app_dict[app_label]['models'].append(model_dict) + else: + app_dict[app_label] = { + 'name': apps.get_app_config(app_label).verbose_name, + 'app_label': app_label, + 'app_url': reverse( + 'admin:app_list', + kwargs={'app_label': app_label}, + current_app=self.name, + ), + 'has_module_perms': has_module_perms, + 'models': [model_dict], + } + + if label: + return app_dict.get(label) + return app_dict + + def get_app_list(self, request): + """ + Return a sorted list of all the installed apps that have been + registered in this site. + """ + app_dict = self._build_app_dict(request) + + # Sort the apps alphabetically. + app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower()) + + # Sort the models alphabetically within each app. + for app in app_list: + app['models'].sort(key=lambda x: x['name']) + + return app_list + + @never_cache + def index(self, request, extra_context=None): + """ + Display the main admin index page, which lists all of the installed + apps that have been registered in this site. + """ + app_list = self.get_app_list(request) + + context = { + **self.each_context(request), + 'title': self.index_title, + 'app_list': app_list, + **(extra_context or {}), + } + + request.current_app = self.name + + return TemplateResponse(request, self.index_template or 'admin/index.html', context) + + def app_index(self, request, app_label, extra_context=None): + app_dict = self._build_app_dict(request, app_label) + if not app_dict: + raise Http404('The requested admin page does not exist.') + # Sort the models alphabetically within each app. + app_dict['models'].sort(key=lambda x: x['name']) + app_name = apps.get_app_config(app_label).verbose_name + context = { + **self.each_context(request), + 'title': _('%(app)s administration') % {'app': app_name}, + 'app_list': [app_dict], + 'app_label': app_label, + **(extra_context or {}), + } + + request.current_app = self.name + + return TemplateResponse(request, self.app_index_template or [ + 'admin/%s/app_index.html' % app_label, + 'admin/app_index.html' + ], context) + + +class DefaultAdminSite(LazyObject): + def _setup(self): + AdminSiteClass = import_string(apps.get_app_config('admin').default_site) + self._wrapped = AdminSiteClass() + + +# This global object represents the default admin site, for the common case. +# You can provide your own AdminSite using the (Simple)AdminConfig.default_site +# attribute. You can also instantiate AdminSite in your own code to create a +# custom admin site. +site = DefaultAdminSite() diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/autocomplete.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/autocomplete.css new file mode 100644 index 0000000..3ef95d1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/autocomplete.css @@ -0,0 +1,260 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: #999; + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: #fff; + border: 1px solid #ccc; + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: #999; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: white; + border: 1px solid #ccc; + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: #999; + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #ccc; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid #999 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + border: 1px solid #ccc; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: #999; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: #ddd; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: #79aec8; + color: white; +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/base.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/base.css new file mode 100644 index 0000000..6551e23 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/base.css @@ -0,0 +1,983 @@ +/* + DJANGO Admin styles +*/ + +@import url(fonts.css); + +body { + margin: 0; + padding: 0; + font-size: 14px; + font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; + color: #333; + background: #fff; +} + +/* LINKS */ + +a:link, a:visited { + color: #447e9b; + text-decoration: none; +} + +a:focus, a:hover { + color: #036; +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: #fff; + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 20px; + color: #666; +} + +h2 { + font-size: 16px; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 14px; + margin: .8em 0 .3em 0; + color: #666; + font-weight: bold; +} + +h4 { + font-size: 12px; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 10px; + margin: 1.5em 0 .5em 0; + color: #666; + text-transform: uppercase; + letter-spacing: 1px; +} + +ul li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 13px; + line-height: 20px; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + padding: 0; + border: none; + border-top: 1px solid #eee; +} + +blockquote { + font-size: 11px; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; + color: #666; + font-size: 12px; +} + +pre.literal-block { + margin: 10px; + background: #eee; + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: #eee; + background-color: #eee; + height: 1px; + border: none; + margin: 0; + padding: 0; + font-size: 1px; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 11px; +} + +.tiny { + font-size: 10px; +} + +p.tiny { + margin-top: -2px; +} + +.mini { + font-size: 10px; +} + +p.mini { + margin-top: -3px; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 11px; + color: #999; +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: #999; + font-weight: normal; +} + +.float-right { + float: right; +} + +.float-left { + float: left; +} + +.clear { + clear: both; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.example { + margin: 10px 0; + padding: 5px 10px; + background: #efefef; +} + +.nowrap { + white-space: nowrap; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: #ccc; +} + +td, th { + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid #eee; + vertical-align: top; + padding: 8px; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: #666; + padding: 5px 10px; + font-size: 11px; + background: #fff; + border: none; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +tfoot td { + border-bottom: none; + border-top: 1px solid #eee; +} + +thead th.required { + color: #000; +} + +tr.alt { + background: #f6f6f6; +} + +.row1 { + background: #fff; +} + +.row2 { + background: #f9f9f9; +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: #f6f6f6; +} + +thead th a:link, thead th a:visited { + color: #666; +} + +thead th.sorted { + background: #eee; +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: #eee; +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 18px; + color: #999; +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: #447e9b; +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; + font-weight: normal; + font-size: 13px; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid #ccc; + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: #999; +} + +select { + height: 30px; +} + +select[multiple] { + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: #79aec8; + padding: 10px 15px; + border: none; + border-radius: 4px; + color: #fff; + cursor: pointer; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: #609ab6; +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + float: right; + border: none; + font-weight: 400; + background: #417690; +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: #205067; +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: #fff; +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 13px; + text-align: left; + background: #79aec8; + color: #fff; +} + +.module caption, +.inline-group h2 { + font-size: 12px; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 13px; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: #333; +} + +ul.messagelist li.warning { + background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 14px; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: #ba2121; + border: 1px solid #ba2121; + border-radius: 4px; + background-color: #fff; + background-position: 5px 12px; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: #ba2121; + background: #fff; +} + +ul.errorlist li { + font-size: 13px; + display: block; + margin-bottom: 4px; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid #eee; + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea { + border: 1px solid #ba2121; +} + +div.system-message { + background: #ffc; + margin: 10px; + padding: 6px 8px; + font-size: .8em; +} + +div.system-message p.system-message-title { + padding: 4px 5px 4px 25px; + margin: 0; + color: #c11; + background: #ffefef url(../img/icon-no.svg) 5px 5px no-repeat; +} + +.description { + font-size: 12px; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: #79aec8; + padding: 10px 40px; + border: none; + font-size: 14px; + color: #c4dce8; + text-align: left; +} + +div.breadcrumbs a { + color: #fff; +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: #c4dce8; +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 10px; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.form-row .object-tools { + margin-top: 5px; + margin-bottom: 5px; + float: none; + height: 2em; + padding-left: 3.5em; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 16px; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: #999; + font-weight: 400; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + color: #fff; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: #417690; +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink, .object-tools a.golink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +table#change-history { + width: 100%; +} + +table#change-history tbody th { + width: 16em; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: 40px; + padding: 10px 40px; + background: #417690; + line-height: 40px; + color: #ffc; + overflow: hidden; +} + +#header a:link, #header a:visited { + color: #fff; +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + float: left; +} + +#branding h1 { + padding: 0; + margin: 0 20px 0 0; + font-weight: 300; + font-size: 24px; + color: #f5dd5d; +} + +#branding h1, #branding h1 a:link, #branding h1 a:visited { + color: #f5dd5d; +} + +#branding h2 { + padding: 0 10px; + font-size: 14px; + margin: -8px 0 8px 0; + font-weight: normal; + color: #ffc; +} + +#branding a:hover { + text-decoration: none; +} + +#user-tools { + float: right; + padding: 0; + margin: 0 0 0 20px; + font-weight: 300; + font-size: 11px; + letter-spacing: 0.5px; + text-transform: uppercase; + text-align: right; +} + +#user-tools a { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover { + text-decoration: none; + border-bottom-color: #79aec8; + color: #79aec8; +} + +/* SIDEBAR */ + +#content-related { + background: #f8f8f8; +} + +#content-related .module { + background: none; +} + +#content-related h3 { + font-size: 14px; + color: #666; + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 13px; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid #eaeaea; + font-size: 18px; + color: #333; +} + +.delete-confirmation form input[type="submit"] { + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + color: #fff; +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: #a41515; +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 15px; + line-height: 15px; + background: #ddd; + border-radius: 4px; + padding: 10px 15px; + color: #333; + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: #ccc; +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/changelists.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/changelists.css new file mode 100644 index 0000000..17690a3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/changelists.css @@ -0,0 +1,344 @@ +/* CHANGELISTS */ + +#changelist { + position: relative; + width: 100%; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + margin-right: 280px; + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; +} + +#changelist .toplinks { + border-bottom: 1px solid #ddd; +} + +#changelist .paginator { + color: #666; + border-bottom: 1px solid #eee; + background: #fff; + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: #666; +} + +/* TOOLBAR */ + +#changelist #toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; + background: #f8f8f8; + color: #666; +} + +#changelist #toolbar form input { + border-radius: 4px; + font-size: 14px; + padding: 5px; + color: #333; +} + +#changelist #toolbar form #searchbar { + height: 19px; + border: 1px solid #ccc; + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 13px; +} + +#changelist #toolbar form #searchbar:focus { + border-color: #999; +} + +#changelist #toolbar form input[type="submit"] { + border: 1px solid #ccc; + padding: 2px 10px; + margin: 0; + vertical-align: middle; + background: #fff; + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: #333; +} + +#changelist #toolbar form input[type="submit"]:focus, +#changelist #toolbar form input[type="submit"]:hover { + border-color: #999; +} + +#changelist #changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +/* FILTER COLUMN */ + +#changelist-filter { + position: absolute; + top: 0; + right: 0; + z-index: 1000; + width: 240px; + background: #f8f8f8; + border-left: none; + margin: 0; +} + +#changelist-filter h2 { + font-size: 14px; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3 { + font-weight: 400; + font-size: 14px; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid #eaeaea; +} + +#changelist-filter ul:last-child { + border-bottom: none; + padding-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: #999; + text-overflow: ellipsis; + overflow-x: hidden; +} + +#changelist-filter li.selected { + border-left: 5px solid #eaeaea; + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: #5b80b2; +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: #036; +} + +/* DATE DRILLDOWN */ + +.change-list ul.toplinks { + display: block; + float: left; + padding: 0; + margin: 0; + width: 100%; +} + +.change-list ul.toplinks li { + padding: 3px 6px; + font-weight: bold; + list-style-type: none; + display: inline-block; +} + +.change-list ul.toplinks .date-back a { + color: #999; +} + +.change-list ul.toplinks .date-back a:focus, +.change-list ul.toplinks .date-back a:hover { + color: #036; +} + +/* PAGINATOR */ + +.paginator { + font-size: 13px; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid #ddd; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: #79aec8; + text-decoration: none; + color: #fff; +} + +.paginator a.showall { + padding: 0; + border: none; + background: none; + color: #5b80b2; +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: #036; +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 13px; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: #036; +} + +/* ACTIONS */ + +.filtered .actions { + margin-right: 280px; + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +#changelist table tbody tr.selected { + background-color: #FFFFCC; +} + +#changelist .actions { + padding: 10px; + background: #fff; + border-top: none; + border-bottom: none; + line-height: 24px; + color: #999; +} + +#changelist .actions.selected { + background: #fffccf; + border-top: 1px solid #fffee8; + border-bottom: 1px solid #edecd6; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 13px; + margin: 0 0.5em; + display: none; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 24px; + background: none; + color: #000; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: #999; +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 13px; +} + +#changelist .actions .button { + font-size: 13px; + border: 1px solid #ccc; + border-radius: 4px; + background: #fff; + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 24px; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: #333; +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: #999; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/dashboard.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/dashboard.css new file mode 100644 index 0000000..1560c7b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/dashboard.css @@ -0,0 +1,27 @@ +/* DASHBOARD */ + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/fonts.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/fonts.css new file mode 100644 index 0000000..c837e01 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/fonts.css @@ -0,0 +1,20 @@ +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Bold-webfont.woff'); + font-weight: 700; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Regular-webfont.woff'); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: 'Roboto'; + src: url('../fonts/Roboto-Light-webfont.woff'); + font-weight: 300; + font-style: normal; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/forms.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/forms.css new file mode 100644 index 0000000..5db927d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/forms.css @@ -0,0 +1,532 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 13px; + border-bottom: 1px solid #eee; +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +.hidden { + display: none; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: #666; + font-size: 13px; +} + +.required label, label.required { + font-weight: bold; + color: #333; +} + +/* RADIO BUTTONS */ + +form ul.radiolist li { + list-style-type: none; +} + +form ul.radiolist label { + float: none; + display: inline; +} + +form ul.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + float: left; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 26px; +} + +.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 170px; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + clear: left; + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned label + p.help, +form .aligned label + div.help { + margin-left: 0; + padding-left: 0; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +.checkbox-row p.help, +.checkbox-row div.help { + margin-left: 0; + padding-left: 0; +} + +fieldset .fieldBox { + float: left; + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 38px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid #eee; + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: #f8f8f8; + color: #666; +} + +fieldset .collapse-toggle { + color: #fff; +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: #447e9b; +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px; + margin: 0 0 20px; + background: #f8f8f8; + border: 1px solid #eee; + border-radius: 4px; + text-align: right; + overflow: hidden; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 35px; + line-height: 15px; + margin: 0 0 0 5px; +} + +.submit-row input.default { + margin: 0 0 0 8px; + text-transform: uppercase; +} + +.submit-row p { + margin: 0.3em; +} + +.submit-row p.deletelink-box { + float: left; + margin: 0; +} + +.submit-row a.deletelink { + display: block; + background: #ba2121; + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + color: #fff; +} + +.submit-row a.closelink { + display: inline-block; + background: #bbbbbb; + border-radius: 4px; + padding: 10px 15px; + height: 15px; + line-height: 15px; + margin: 0 0 0 5px; + color: #fff; +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: #a41515; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: #aaaaaa; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vTextField { + width: 20em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: #666; + padding: 5px; + font-size: 13px; + background: #f8f8f8; + border-top: 1px solid #eee; + border-bottom: 1px solid #eee; +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 11px; +} + +.inline-related fieldset { + margin: 0; + background: #fff; + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 11px; + text-align: left; + font-weight: bold; + background: #bcd; + color: #fff; +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 9px; + font-weight: bold; + color: #666; + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: #666; + background: #f8f8f8; + padding: 8px 10px; + border-bottom: 1px solid #eee; +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid #eee; +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 12px; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.add-another, .related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.add-another { + width: 16px; + height: 16px; + background-image: url(../img/icon-addlink.svg); +} + +.related-lookup { + width: 16px; + height: 16px; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/login.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/login.css new file mode 100644 index 0000000..cab3bbf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/login.css @@ -0,0 +1,78 @@ +/* LOGIN FORM */ + +body.login { + background: #f8f8f8; +} + +.login #header { + height: auto; + padding: 5px 16px; +} + +.login #header h1 { + font-size: 18px; +} + +.login #header h1 a { + color: #fff; +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: #fff; + border: 1px solid #eaeaea; + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; +} + +.login #content-main { + width: 100%; +} + +.login .form-row { + padding: 4px 0; + float: left; + width: 100%; + border-bottom: none; +} + +.login .form-row label { + padding-right: 0.5em; + line-height: 2em; + font-size: 1em; + clear: both; + color: #333; +} + +.login .form-row #id_username, .login .form-row #id_password { + clear: both; + padding: 8px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.login span.help { + font-size: 10px; + display: block; +} + +.login .submit-row { + clear: both; + padding: 1em 0 0 9.4em; + margin: 0; + border: none; + background: none; + text-align: left; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive.css new file mode 100644 index 0000000..05fd2c5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive.css @@ -0,0 +1,994 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 14px; + } + + .small { + font-size: 12px; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 20px 30px 30px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + display: flex; + flex-direction: column; + padding: 15px 30px; + height: auto; + line-height: 1; + } + + #branding h1 { + margin: 0 0 8px; + font-size: 20px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 13px; + } + + /* Changelist */ + + #changelist #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 22px; + } + + #changelist #toolbar form #searchbar { + -webkit-flex: 1 0 auto; + flex: 1 0 auto; + width: 0; + height: 22px; + margin: 0 10px 0 6px; + } + + #changelist-search .quiet { + width: 100%; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions.selected { + border: none; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: #fff; + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 11px; + margin: 0 10px 0 0; + } + + #changelist-filter { + width: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + .filtered div.xfull { + margin-right: 230px; + } + + #changelist .paginator { + border-top-color: #eee; + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 14px; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 36px; + font-size: 14px; + } + + .form-row select { + height: 36px; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox { + float: none; + margin: 0 -10px; + padding: 0 10px; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid #eee; + } + + textarea { + max-width: 518px; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .add-another, + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned ul.radiolist { + margin-left: 2px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + form .form-row p.datetime { + width: 100%; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 13px; + } + + .datetime .timezonewarning { + display: block; + font-size: 11px; + color: #999; + } + + .datetimeshortcuts { + color: #ccc; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 16px; + } + + /* Changelist */ + + #changelist { + display: flex; + flex-direction: column; + } + + #changelist #toolbar { + order: 1; + padding: 10px; + } + + #changelist .xfull { + order: 2; + } + + #changelist-form { + order: 3; + } + + #changelist-filter { + order: 4; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + .change-list .filtered .results, .change-list .filtered .paginator, + .filtered #toolbar, .filtered .actions, .filtered div.xfull { + margin-right: 0; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + display: flex; + flex-wrap: wrap; + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row { + align-items: center; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + margin-left: 0; + font-size: 13px; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 13px; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul { + margin-left: 0; + padding-left: 0; + } + + form .aligned ul.radiolist { + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned ul.radiolist li + li { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .selector-add { + background-position: 0 -40px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 2px solid #eee; + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related + .inline-related { + margin-top: 30px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child { + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid #eee; + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px 10px 0; + margin: 0 0 15px; + display: flex; + flex-direction: column; + } + + .submit-row > * { + width: 100%; + } + + .submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink { + float: none; + margin: 0 0 10px; + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + } + + .submit-row p.deletelink-box { + order: 4; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + display: block; + margin: 0 0 5px; + padding: 0; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br, .login .submit-row label { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 13px; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 12px; + line-height: 12px; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: #fff; + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 13px; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 13px; + word-break: break-word; + } +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css new file mode 100644 index 0000000..aaffa91 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css @@ -0,0 +1,80 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions { + margin-right: 0; + margin-left: 230px; + } + + [dir="rtl"] .inline-group ul.tools a.add, + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .related-widget-wrapper-link + .selector { + margin-right: 0; + margin-left: 15px; + } + + [dir="rtl"] .selector .selector-filter label { + margin-right: 0; + margin-left: 8px; + } + + [dir="rtl"] .object-tools li { + float: right; + } + + [dir="rtl"] .object-tools li + li { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions { + margin-left: 0; + } + + [dir="rtl"] .aligned .add-another, + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/rtl.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/rtl.css new file mode 100644 index 0000000..d998e7c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/rtl.css @@ -0,0 +1,264 @@ +body { + direction: rtl; +} + +/* LOGIN */ + +.login .form-row { + float: right; +} + +.login .form-row label { + float: right; + padding-left: 0.5em; + padding-right: 0; + text-align: left; +} + +.login .submit-row { + clear: both; + padding: 1em 9.4em 0 0; +} + +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + right: auto; + left: 0; + border-left: none; + border-right: none; +} + +.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { + margin-right: 0; + margin-left: 280px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid #eaeaea; + padding-right: 10px; + margin-right: -15px; +} + +.filtered .actions { + margin-left: 280px; + margin-right: 0; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; + float: right; +} + +.submit-row { + text-align: left +} + +.submit-row p.deletelink-box { + float: right; +} + +.submit-row input.default { + margin-left: 0; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned p.help, form .aligned div.help { + clear: right; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +input[type=submit].default, .submit-row input.default { + float: left; +} + +fieldset .fieldBox { + float: right; + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} + +/* IE7 specific bug fixes */ + +div.colM { + position: relative; +} + +.submit-row input { + float: left; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 0000000..86c7c29 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2015 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css new file mode 100644 index 0000000..447b2b8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css @@ -0,0 +1,484 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + height: 1px !important; + margin: -1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__placeholder { + color: #999; + margin-top: 5px; + float: left; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css new file mode 100644 index 0000000..76de04d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/widgets.css b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/widgets.css new file mode 100644 index 0000000..d3bd67a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/css/widgets.css @@ -0,0 +1,565 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + width: 800px; + float: left; +} + +.selector select { + width: 380px; + height: 17.2em; +} + +.selector-available, .selector-chosen { + float: left; + width: 380px; + text-align: center; + margin-bottom: 5px; +} + +.selector-chosen select { + border-top: none; +} + +.selector-available h2, .selector-chosen h2 { + border: 1px solid #ccc; + border-radius: 4px 4px 0 0; +} + +.selector-chosen h2 { + background: #79aec8; + color: #fff; +} + +.selector .selector-available h2 { + background: #f8f8f8; + color: #666; +} + +.selector .selector-filter { + background: white; + border: 1px solid #ccc; + border-width: 0 1px; + padding: 8px; + color: #999; + font-size: 10px; + margin: 0; + text-align: left; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; +} + +.selector .selector-available input { + width: 320px; + margin-left: 8px; +} + +.selector ul.selector-chooser { + float: left; + width: 22px; + background-color: #eee; + border-radius: 10px; + margin: 10em 5px 0 5px; + padding: 0; +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} + +.selector-add, .selector-remove { + width: 16px; + height: 16px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.3; +} + +.active.selector-add, .active.selector-remove { + opacity: 1; +} + +.active.selector-add:hover, .active.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -112px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -80px; +} + +a.selector-chooseall, a.selector-clearall { + display: inline-block; + height: 16px; + text-align: left; + margin: 1px auto 3px; + overflow: hidden; + font-weight: bold; + line-height: 16px; + color: #666; + text-decoration: none; + opacity: 0.3; +} + +a.active.selector-chooseall:focus, a.active.selector-clearall:focus, +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + color: #447e9b; +} + +a.active.selector-chooseall, a.active.selector-clearall { + opacity: 1; +} + +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + cursor: pointer; +} + +a.selector-chooseall { + padding: 0 18px 0 0; + background: url(../img/selector-icons.svg) right -160px no-repeat; + cursor: default; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -176px; +} + +a.selector-clearall { + padding: 0 0 0 18px; + background: url(../img/selector-icons.svg) 0 -128px no-repeat; + cursor: default; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + height: 22px; + width: 50px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -32px no-repeat; + cursor: default; +} + +.stacked .active.selector-add { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + cursor: default; +} + +.stacked .active.selector-remove { + background-position: 0 -16px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 18px; + width: 18px; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-weight: bold; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 11px; + color: #ccc; +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + min-width: 0; + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 11px; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 16px; + width: 16px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -16px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -16px; +} + +.timezonewarning { + font-size: 11px; + color: #999; +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-size: 11px; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: #666; + font-size: 11px; + font-weight: bold; +} + +.aligned p.file-upload { + margin-left: 170px; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: #333; + font-size: 11px; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 12px; + width: 19em; + text-align: center; + background: white; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + background: #f5dd5d; + font-weight: 700; + font-size: 12px; + color: #333; +} + +.calendar th { + padding: 8px 5px; + background: #f8f8f8; + border-bottom: 1px solid #ddd; + font-weight: 400; + font-size: 12px; + text-align: center; + color: #666; +} + +.calendar td { + font-weight: 400; + font-size: 12px; + text-align: center; + padding: 0; + border-top: 1px solid #eee; + border-bottom: none; +} + +.calendar td.selected a { + background: #79aec8; + color: #fff; +} + +.calendar td.nonday { + background: #f8f8f8; +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: #444; +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: #79aec8; + color: white; +} + +.calendar td a:active, .timelist a:active { + background: #417690; + color: white; +} + +.calendarnav { + font-size: 10px; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: #999; +} + +.calendar-shortcuts { + background: white; + font-size: 11px; + line-height: 11px; + border-top: 1px solid #eee; + padding: 8px 0; + color: #ccc; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -15px; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -45px; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 12px; + background: #eee; + border-top: 1px solid #ddd; + color: #333; +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: #ddd; +} + +.calendar-cancel a { + color: black; + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) 0 0 no-repeat; + width: 16px; + height: 16px; + border: 0px none; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + float: left; /* display properly in form rows with multiple fields */ + overflow: hidden; /* clear floated contents */ +} + +.related-widget-wrapper-link { + opacity: 0.3; +} + +.related-widget-wrapper-link:link { + opacity: .8; +} + +.related-widget-wrapper-link:link:focus, +.related-widget-wrapper-link:link:hover { + opacity: 1; +} + +select + .related-widget-wrapper-link, +.related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 7px; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt new file mode 100644 index 0000000..75b5248 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/README.txt b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/README.txt new file mode 100644 index 0000000..cc2135a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/README.txt @@ -0,0 +1,2 @@ +Roboto webfont source: https://www.google.com/fonts/specimen/Roboto +Weights used in this project: Light (300), Regular (400), Bold (700) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..03357ce4f5833006114f2e790a7b89dbf69d4f90 GIT binary patch literal 82564 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..f6abd871351b74882016af8e796aa6566803035b GIT binary patch literal 81348 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6ff6afd8c863f4ee4a2bd032a93c5dde5bf15f0d GIT binary patch literal 80304 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 U5+{zuf?@lC+j6Kse)s?X0ZPdgP5=M^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/LICENSE b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/LICENSE new file mode 100644 index 0000000..a4faaa1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Code Charm Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/README.txt b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/README.txt new file mode 100644 index 0000000..4eb2e49 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/README.txt @@ -0,0 +1,7 @@ +All icons are taken from Font Awesome (http://fontawesome.io/) project. +The Font Awesome font is licensed under the SIL OFL 1.1: +- https://scripts.sil.org/OFL + +SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG +Font-Awesome-SVG-PNG is licensed under the MIT license (see file license +in current folder). diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg new file mode 100644 index 0000000..dbf21c3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg @@ -0,0 +1,14 @@ +<svg width="15" height="60" viewBox="0 0 1792 7168" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="previous"> + <path d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="next"> + <path d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#previous" x="0" y="0" fill="#333333" /> + <use xlink:href="#previous" x="0" y="1792" fill="#000000" /> + <use xlink:href="#next" x="0" y="3584" fill="#333333" /> + <use xlink:href="#next" x="0" y="5376" fill="#000000" /> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg new file mode 100644 index 0000000..228854f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ +<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#EBECE6" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9C9C9" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg> \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg new file mode 100644 index 0000000..96b87fd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ +<svg width="24" height="22" viewBox="0 0 847 779" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F1C02A" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120z"/><path fill="#9E9E93" d="M120 1h607c66 0 120 54 120 120v536c0 66-54 120-120 120h-607c-66 0-120-54-120-120v-536c0-66 54-120 120-120zm607 25h-607c-26 0-50 11-67 28-17 18-28 41-28 67v536c0 27 11 50 28 68 17 17 41 27 67 27h607c26 0 49-10 67-27 17-18 28-41 28-68v-536c0-26-11-49-28-67-18-17-41-28-67-28z"/><path stroke="#A9A8A4" stroke-width="20" d="M706 295l-68 281"/><path stroke="#E47474" stroke-width="20" d="M316 648l390-353M141 435l175 213"/><path stroke="#C9A741" stroke-width="20" d="M319 151l-178 284M706 295l-387-144"/><g fill="#040405"><path d="M319 111c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40zM141 395c22 0 40 18 40 40s-18 40-40 40c-23 0-41-18-41-40s18-40 41-40zM316 608c22 0 40 18 40 40 0 23-18 41-40 41s-40-18-40-41c0-22 18-40 40-40zM706 254c22 0 40 18 40 41 0 22-18 40-40 40s-40-18-40-40c0-23 18-41 40-41zM638 536c22 0 40 18 40 40s-18 40-40 40-40-18-40-40 18-40 40-40z"/></g></g></svg> \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg new file mode 100644 index 0000000..e004fb1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#70bf2b" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg new file mode 100644 index 0000000..e51ea83 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg @@ -0,0 +1,3 @@ +<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#efb80b" d="M1024 1375v-190q0-14-9.5-23.5t-22.5-9.5h-192q-13 0-22.5 9.5t-9.5 23.5v190q0 14 9.5 23.5t22.5 9.5h192q13 0 22.5-9.5t9.5-23.5zm-2-374l18-459q0-12-10-19-13-11-24-11h-220q-11 0-24 11-10 7-10 21l17 457q0 10 10 16.5t24 6.5h185q14 0 23.5-6.5t10.5-16.5zm-14-934l768 1408q35 63-2 126-17 29-46.5 46t-63.5 17h-1536q-34 0-63.5-17t-46.5-46q-37-63-2-126l768-1408q17-31 47-49t65-18 65 18 47 49z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg new file mode 100644 index 0000000..97910a9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg @@ -0,0 +1,9 @@ +<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="icon"> + <path d="M192 1664h288v-288h-288v288zm352 0h320v-288h-320v288zm-352-352h288v-320h-288v320zm352 0h320v-320h-320v320zm-352-384h288v-288h-288v288zm736 736h320v-288h-320v288zm-384-736h320v-288h-320v288zm768 736h288v-288h-288v288zm-384-352h320v-320h-320v320zm-352-864v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm736 864h288v-320h-288v320zm-384-384h320v-288h-320v288zm384 0h288v-288h-288v288zm32-480v-288q0-13-9.5-22.5t-22.5-9.5h-64q-13 0-22.5 9.5t-9.5 22.5v288q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5-9.5t9.5-22.5zm384-64v1280q0 52-38 90t-90 38h-1408q-52 0-90-38t-38-90v-1280q0-52 38-90t90-38h128v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h384v-96q0-66 47-113t113-47h64q66 0 113 47t47 113v96h128q52 0 90 38t38 90z"/> + </g> + </defs> + <use xlink:href="#icon" x="0" y="0" fill="#447e9b" /> + <use xlink:href="#icon" x="0" y="1792" fill="#003366" /> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg new file mode 100644 index 0000000..bbb137a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#efb80b" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg new file mode 100644 index 0000000..bf9985d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg @@ -0,0 +1,9 @@ +<svg width="16" height="32" viewBox="0 0 1792 3584" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="icon"> + <path d="M1024 544v448q0 14-9 23t-23 9h-320q-14 0-23-9t-9-23v-64q0-14 9-23t23-9h224v-352q0-14 9-23t23-9h64q14 0 23 9t9 23zm416 352q0-148-73-273t-198-198-273-73-273 73-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273zm224 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#icon" x="0" y="0" fill="#447e9b" /> + <use xlink:href="#icon" x="0" y="1792" fill="#003366" /> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg new file mode 100644 index 0000000..4059b15 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg @@ -0,0 +1,3 @@ +<svg width="14" height="14" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#dd4646" d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-no.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-no.svg new file mode 100644 index 0000000..2e0d383 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-no.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#dd4646" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg new file mode 100644 index 0000000..1c6b99f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg new file mode 100644 index 0000000..50b4f97 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#666666" d="M1024 1376v-192q0-14-9-23t-23-9h-192q-14 0-23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23-9t9-23zm256-672q0-88-55.5-163t-138.5-116-170-41q-243 0-371 213-15 24 8 42l132 100q7 6 19 6 16 0 25-12 53-68 86-92 34-24 86-24 48 0 85.5 26t37.5 59q0 38-20 61t-68 45q-63 28-115.5 86.5t-52.5 125.5v36q0 14 9 23t23 9h192q14 0 23-9t9-23q0-19 21.5-49.5t54.5-49.5q32-18 49-28.5t46-35 44.5-48 28-60.5 12.5-81zm384 192q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg new file mode 100644 index 0000000..a1ca1d3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-viewlink.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#2b70bf" d="M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg new file mode 100644 index 0000000..5883d87 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#70bf2b" d="M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg new file mode 100644 index 0000000..17d1ad6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/search.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/search.svg new file mode 100644 index 0000000..c8c69b2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/search.svg @@ -0,0 +1,3 @@ +<svg width="15" height="15" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#555555" d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg new file mode 100644 index 0000000..926b8e2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg @@ -0,0 +1,34 @@ +<svg width="16" height="192" viewBox="0 0 1792 21504" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="up"> + <path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="down"> + <path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="left"> + <path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="right"> + <path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="clearall"> + <path transform="translate(336, 336) scale(0.75)" d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + <g id="chooseall"> + <path transform="translate(336, 336) scale(0.75)" d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/> + </g> + </defs> + <use xlink:href="#up" x="0" y="0" fill="#666666" /> + <use xlink:href="#up" x="0" y="1792" fill="#447e9b" /> + <use xlink:href="#down" x="0" y="3584" fill="#666666" /> + <use xlink:href="#down" x="0" y="5376" fill="#447e9b" /> + <use xlink:href="#left" x="0" y="7168" fill="#666666" /> + <use xlink:href="#left" x="0" y="8960" fill="#447e9b" /> + <use xlink:href="#right" x="0" y="10752" fill="#666666" /> + <use xlink:href="#right" x="0" y="12544" fill="#447e9b" /> + <use xlink:href="#clearall" x="0" y="14336" fill="#666666" /> + <use xlink:href="#clearall" x="0" y="16128" fill="#447e9b" /> + <use xlink:href="#chooseall" x="0" y="17920" fill="#666666" /> + <use xlink:href="#chooseall" x="0" y="19712" fill="#447e9b" /> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg new file mode 100644 index 0000000..7c31ec9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg @@ -0,0 +1,19 @@ +<svg width="14" height="84" viewBox="0 0 1792 10752" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <g id="sort"> + <path d="M1408 1088q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45zm0-384q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/> + </g> + <g id="ascending"> + <path d="M1408 1216q0 26-19 45t-45 19h-896q-26 0-45-19t-19-45 19-45l448-448q19-19 45-19t45 19l448 448q19 19 19 45z"/> + </g> + <g id="descending"> + <path d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/> + </g> + </defs> + <use xlink:href="#sort" x="0" y="0" fill="#999999" /> + <use xlink:href="#sort" x="0" y="1792" fill="#447e9b" /> + <use xlink:href="#ascending" x="0" y="3584" fill="#999999" /> + <use xlink:href="#ascending" x="0" y="5376" fill="#447e9b" /> + <use xlink:href="#descending" x="0" y="7168" fill="#999999" /> + <use xlink:href="#descending" x="0" y="8960" fill="#447e9b" /> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg new file mode 100644 index 0000000..1ca64ae --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1600 736v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg new file mode 100644 index 0000000..b664d61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ +<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"> + <path fill="#ffffff" d="M1363 877l-742 742q-19 19-45 19t-45-19l-166-166q-19-19-19-45t19-45l531-531-531-531q-19-19-19-45t19-45l166-166q19-19 45-19t45 19l742 742q19 19 19 45t-19 45z"/> +</svg> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectBox.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectBox.js new file mode 100644 index 0000000..1a14959 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectBox.js @@ -0,0 +1,144 @@ +(function($) { + 'use strict'; + var SelectBox = { + cache: {}, + init: function(id) { + var box = document.getElementById(id); + var node; + SelectBox.cache[id] = []; + var cache = SelectBox.cache[id]; + var boxOptions = box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0, j = boxOptionsLength; i < j; i++) { + node = boxOptions[i]; + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + var box = document.getElementById(id); + var node; + $(box).empty(); // clear all options + var new_options = box.outerHTML.slice(0, -9); // grab just the opening tag + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.displayed) { + var new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.setAttribute("title", node.text); + new_options += new_option.outerHTML; + } + } + new_options += '</select>'; + box.outerHTML = new_options; + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + var tokens = text.toLowerCase().split(/\s+/); + var node, token; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + node.displayed = 1; + var node_text = node.text.toLowerCase(); + var numTokens = tokens.length; + for (var k = 0; k < numTokens; k++) { + token = tokens[k]; + if (node_text.indexOf(token) === -1) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + delete_from_cache: function(id, value) { + var node, delete_index = null; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + var node; + var cache = SelectBox.cache[id]; + for (var i = 0, j = cache.length; i < j; i++) { + node = cache[i]; + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + var from_box = document.getElementById(from); + var option; + var boxOptions = from_box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0, j = boxOptionsLength; i < j; i++) { + option = boxOptions[i]; + var option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + var from_box = document.getElementById(from); + var option; + var boxOptions = from_box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0, j = boxOptionsLength; i < j; i++) { + option = boxOptions[i]; + var option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + try { + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + } + catch (e) { + // silently fail on IE 'unknown' exception + } + return 0; + } ); + }, + select_all: function(id) { + var box = document.getElementById(id); + var boxOptions = box.options; + var boxOptionsLength = boxOptions.length; + for (var i = 0; i < boxOptionsLength; i++) { + boxOptions[i].selected = 'selected'; + } + } + }; + window.SelectBox = SelectBox; +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js new file mode 100644 index 0000000..b6bcda0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js @@ -0,0 +1,252 @@ +/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires jQuery, core.js, and SelectBox.js. +*/ +(function($) { + 'use strict'; + function findForm(node) { + // returns the node of the form containing the given node + if (node.tagName.toLowerCase() !== 'form') { + return findForm(node.parentNode); + } + return node; + } + + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + var from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + + var ps = from_box.parentNode.getElementsByTagName('p'); + for (var i = 0; i < ps.length; i++) { + if (ps[i].className.indexOf("info") !== -1) { + // Remove <p class="info">, because it just gets in the way. + from_box.parentNode.removeChild(ps[i]); + } else if (ps[i].className.indexOf("help") !== -1) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(ps[i], from_box.parentNode.firstChild); + } + } + + // <div class="selector"> or <div class="selector stacked"> + var selector_div = quickElement('div', from_box.parentNode); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + // <div class="selector-available"> + var selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + var title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); + quickElement( + 'span', title_available, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of available %s. You may choose some by ' + + 'selecting them in the box below and then clicking the ' + + '"Choose" arrow between the two boxes.' + ), + [field_name] + ) + ); + + var filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + var filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); + choose_all.className = 'selector-chooseall'; + + // <ul class="selector-chooser"> + var selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + var add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); + add_link.className = 'selector-add'; + var remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); + remove_link.className = 'selector-remove'; + + // <div class="selector-chosen"> + var selector_chosen = quickElement('div', selector_div); + selector_chosen.className = 'selector-chosen'; + var title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); + quickElement( + 'span', title_chosen, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of chosen %s. You may remove some by ' + + 'selecting them in the box below and then clicking the ' + + '"Remove" arrow between the two boxes.' + ), + [field_name] + ) + ); + + var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name')); + to_box.className = 'filtered'; + var clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); + clear_all.className = 'selector-clearall'; + + from_box.setAttribute('name', from_box.getAttribute('name') + '_old'); + + // Set up the JavaScript event handlers for the select box filter interface + var move_selection = function(e, elem, move_func, from, to) { + if (elem.className.indexOf('active') !== -1) { + move_func(from, to); + SelectFilter.refresh_icons(field_id); + } + e.preventDefault(); + }; + choose_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); + }); + add_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); + }); + remove_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); + }); + clear_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); + }); + filter_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id); + }); + filter_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id); + }); + filter_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id); + }); + selector_div.addEventListener('change', function(e) { + if (e.target.tagName === 'SELECT') { + SelectFilter.refresh_icons(field_id); + } + }); + selector_div.addEventListener('dblclick', function(e) { + if (e.target.tagName === 'OPTION') { + if (e.target.closest('select').id === field_id + '_to') { + SelectBox.move(field_id + '_to', field_id + '_from'); + } else { + SelectBox.move(field_id + '_from', field_id + '_to'); + } + SelectFilter.refresh_icons(field_id); + } + }); + findForm(from_box).addEventListener('submit', function() { + SelectBox.select_all(field_id + '_to'); + }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + if (!is_stacked) { + // In horizontal mode, give the same height to the two boxes. + var j_from_box = $('#' + field_id + '_from'); + var j_to_box = $('#' + field_id + '_to'); + var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); }; + if (j_from_box.outerHeight() > 0) { + resize_filters(); // This fieldset is already open. Resize now. + } else { + // This fieldset is probably collapsed. Wait for its 'show' event. + j_to_box.closest('fieldset').one('show.fieldset', resize_filters); + } + } + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + any_selected: function(field) { + var any_selected = false; + try { + // Temporarily add the required attribute and check validity. + // This is much faster in WebKit browsers than the fallback. + field.attr('required', 'required'); + any_selected = field.is(':valid'); + field.removeAttr('required'); + } catch (e) { + // Browsers that don't support :valid (IE < 10) + any_selected = field.find('option:selected').length > 0; + } + return any_selected; + }, + refresh_icons: function(field_id) { + var from = $('#' + field_id + '_from'); + var to = $('#' + field_id + '_to'); + // Active if at least one item is selected + $('#' + field_id + '_add_link').toggleClass('active', SelectFilter.any_selected(from)); + $('#' + field_id + '_remove_link').toggleClass('active', SelectFilter.any_selected(to)); + // Active if the corresponding box isn't empty + $('#' + field_id + '_add_all_link').toggleClass('active', from.find('option').length > 0); + $('#' + field_id + '_remove_all_link').toggleClass('active', to.find('option').length > 0); + }, + filter_key_press: function(event, field_id) { + var from = document.getElementById(field_id + '_from'); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + from.selectedIndex = 0; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = 0; + event.preventDefault(); + return false; + } + }, + filter_key_up: function(event, field_id) { + var from = document.getElementById(field_id + '_from'); + var temp = from.selectedIndex; + SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); + from.selectedIndex = temp; + return true; + }, + filter_key_down: function(event, field_id) { + var from = document.getElementById(field_id + '_from'); + // right arrow -- move across + if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { + var old_index = from.selectedIndex; + SelectBox.move(field_id + '_from', field_id + '_to'); + from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; + return false; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; + } + return true; + } + }; + + window.addEventListener('load', function(e) { + $('select.selectfilter, select.selectfilterstacked').each(function() { + var $el = $(this), + data = $el.data(); + SelectFilter.init($el.attr('id'), data.fieldName, parseInt(data.isStacked, 10)); + }); + }); + +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.js new file mode 100644 index 0000000..524616f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.js @@ -0,0 +1,153 @@ +/*global gettext, interpolate, ngettext*/ +(function($) { + 'use strict'; + var lastChecked; + + $.fn.actions = function(opts) { + var options = $.extend({}, $.fn.actions.defaults, opts); + var actionCheckboxes = $(this); + var list_editable_changed = false; + var showQuestion = function() { + $(options.acrossClears).hide(); + $(options.acrossQuestions).show(); + $(options.allContainer).hide(); + }, + showClear = function() { + $(options.acrossClears).show(); + $(options.acrossQuestions).hide(); + $(options.actionContainer).toggleClass(options.selectedClass); + $(options.allContainer).show(); + $(options.counterContainer).hide(); + }, + reset = function() { + $(options.acrossClears).hide(); + $(options.acrossQuestions).hide(); + $(options.allContainer).hide(); + $(options.counterContainer).show(); + }, + clearAcross = function() { + reset(); + $(options.acrossInput).val(0); + $(options.actionContainer).removeClass(options.selectedClass); + }, + checker = function(checked) { + if (checked) { + showQuestion(); + } else { + reset(); + } + $(actionCheckboxes).prop("checked", checked) + .parent().parent().toggleClass(options.selectedClass, checked); + }, + updateCounter = function() { + var sel = $(actionCheckboxes).filter(":checked").length; + // data-actions-icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + var actions_icnt = $('.action-counter').data('actionsIcnt'); + $(options.counterContainer).html(interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: actions_icnt + }, true)); + $(options.allToggle).prop("checked", function() { + var value; + if (sel === actionCheckboxes.length) { + value = true; + showQuestion(); + } else { + value = false; + clearAcross(); + } + return value; + }); + }; + // Show counter by default + $(options.counterContainer).show(); + // Check state of checkboxes and reinit state if needed + $(this).filter(":checked").each(function(i) { + $(this).parent().parent().toggleClass(options.selectedClass); + updateCounter(); + if ($(options.acrossInput).val() === 1) { + showClear(); + } + }); + $(options.allToggle).show().on('click', function() { + checker($(this).prop("checked")); + updateCounter(); + }); + $("a", options.acrossQuestions).on('click', function(event) { + event.preventDefault(); + $(options.acrossInput).val(1); + showClear(); + }); + $("a", options.acrossClears).on('click', function(event) { + event.preventDefault(); + $(options.allToggle).prop("checked", false); + clearAcross(); + checker(0); + updateCounter(); + }); + lastChecked = null; + $(actionCheckboxes).on('click', function(event) { + if (!event) { event = window.event; } + var target = event.target ? event.target : event.srcElement; + if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { + var inrange = false; + $(lastChecked).prop("checked", target.checked) + .parent().parent().toggleClass(options.selectedClass, target.checked); + $(actionCheckboxes).each(function() { + if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { + inrange = (inrange) ? false : true; + } + if (inrange) { + $(this).prop("checked", target.checked) + .parent().parent().toggleClass(options.selectedClass, target.checked); + } + }); + } + $(target).parent().parent().toggleClass(options.selectedClass, target.checked); + lastChecked = target; + updateCounter(); + }); + $('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() { + list_editable_changed = true; + }); + $('form#changelist-form button[name="index"]').on('click', function(event) { + if (list_editable_changed) { + return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + } + }); + $('form#changelist-form input[name="_save"]').on('click', function(event) { + var action_changed = false; + $('select option:selected', options.actionContainer).each(function() { + if ($(this).val()) { + action_changed = true; + } + }); + if (action_changed) { + if (list_editable_changed) { + return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")); + } else { + return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.")); + } + } + }); + }; + /* Setup plugin defaults */ + $.fn.actions.defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggle: "#action-toggle", + selectedClass: "selected" + }; + $(document).ready(function() { + var $actionsEls = $('tr input.action-select'); + if ($actionsEls.length > 0) { + $actionsEls.actions(); + } + }); +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.min.js new file mode 100644 index 0000000..31e83c1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/actions.min.js @@ -0,0 +1,7 @@ +(function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n(); +a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){if(c===g.length){var a=!0;l()}else a=!1,p();return a})};a(b.counterContainer).show(); +a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().on("click",function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).on("click",function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).on("click",function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).on("click",function(c){c||(c=window.event);var d=c.target?c.target: +c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input",function(){k=!0}); +a('form#changelist-form button[name="index"]').on("click",function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').on("click",function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")): +confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e= +a("tr input.action-select");0<e.length&&e.actions()})})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js new file mode 100644 index 0000000..b7ca95b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js @@ -0,0 +1,426 @@ +/*global Calendar, findPosX, findPosY, getStyle, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ +// Inserts shortcut buttons after all of the following: +// <input type="text" class="vDateField"> +// <input type="text" class="vTimeField"> +(function() { + 'use strict'; + var DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + clockHours: { + default_: [ + [gettext_noop('Now'), -1], + [gettext_noop('Midnight'), 0], + [gettext_noop('6 a.m.'), 6], + [gettext_noop('Noon'), 12], + [gettext_noop('6 p.m.'), 18] + ] + }, + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled + calendarDivName2: 'calendarin', // name of <div> that contains calendar + calendarLinkName: 'calendarlink',// name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock <div> that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + var body = document.getElementsByTagName('body')[0]; + var serverOffset = body.getAttribute('data-admin-utc-offset'); + if (serverOffset) { + var localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + var inputs = document.getElementsByTagName('input'); + for (var i = 0; i < inputs.length; i++) { + var inp = inputs[i]; + if (inp.getAttribute('type') === 'text' && inp.className.match(/vTimeField/)) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.getAttribute('type') === 'text' && inp.className.match(/vDateField/)) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + var body = document.getElementsByTagName('body')[0]; + var serverOffset = body.getAttribute('data-admin-utc-offset'); + if (serverOffset) { + var localNow = new Date(); + var localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + var $ = django.jQuery; + var warningClass = DateTimeShortcuts.timezoneWarningClass; + var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if ($(inp).siblings('.' + warningClass).length) { + return; + } + + var message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + var $warning = $('<span>'); + $warning.attr('class', warningClass); + $warning.text(message); + + $(inp).parent() + .append($('<br>')) + .append($warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + var num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + var shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + var now_link = document.createElement('a'); + now_link.setAttribute('href', "#"); + now_link.appendChild(document.createTextNode(gettext('Now'))); + now_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, -1); + }); + var clock_link = document.createElement('a'); + clock_link.setAttribute('href', '#'); + clock_link.id = DateTimeShortcuts.clockLinkName + num; + clock_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the clock + e.stopPropagation(); + DateTimeShortcuts.openClock(num); + }); + + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + // <div id="clockbox1" class="clockbox module"> + // <h2>Choose a time</h2> + // <ul class="timelist"> + // <li><a href="#">Now</a></li> + // <li><a href="#">Midnight</a></li> + // <li><a href="#">6 a.m.</a></li> + // <li><a href="#">Noon</a></li> + // <li><a href="#">6 p.m.</a></li> + // </ul> + // <p class="calendar-cancel"><a href="#">Cancel</a></p> + // </div> + + var clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num); + document.body.appendChild(clock_box); + clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + quickElement('h2', clock_box, gettext('Choose a time')); + var time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the <input>. + var name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + var time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); + time_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); + }); + + var cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + var cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissClock(num); + }); + + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + var clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (getStyle(document.body, 'direction') !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + // TODO: IE returns wrong value for findPosX when in rtl mode + // (it returns as it was left aligned), needs to be fixed. + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + var d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + var num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + var shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + var today_link = document.createElement('a'); + today_link.setAttribute('href', '#'); + today_link.appendChild(document.createTextNode(gettext('Today'))); + today_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + var cal_link = document.createElement('a'); + cal_link.setAttribute('href', '#'); + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + cal_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the calendar + e.stopPropagation(); + DateTimeShortcuts.openCalendar(num); + }); + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + // <div id="calendarbox3" class="calendarbox module"> + // <h2> + // <a href="#" class="link-previous">‹</a> + // <a href="#" class="link-next">›</a> February 2003 + // </h2> + // <div class="calendar" id="calendarin3"> + // <!-- (cal) --> + // </div> + // <div class="calendar-shortcuts"> + // <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a> + // </div> + // <p class="calendar-cancel"><a href="#">Cancel</a></p> + // </div> + var cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num); + document.body.appendChild(cal_box); + cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + // next-prev links + var cal_nav = quickElement('div', cal_box); + var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); + cal_nav_prev.className = 'calendarnav-previous'; + cal_nav_prev.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawPrev(num); + }); + + var cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); + cal_nav_next.className = 'calendarnav-next'; + cal_nav_next.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawNext(num); + }); + + // main box + var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + var shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + var day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, -1); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, +1); + }); + + // cancel bar + var cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + var cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissCalendar(num); + }); + django.jQuery(document).on('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + var inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + var format = get_format('DATE_INPUT_FORMATS')[0]; + var selected = inp.value.strptime(format); + var year = selected.getUTCFullYear(); + var month = selected.getUTCMonth() + 1; + var re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (getStyle(document.body, 'direction') !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + // TODO: IE returns wrong value for findPosX when in rtl mode + // (it returns as it was left aligned), needs to be fixed. + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + var format = get_format('DATE_INPUT_FORMATS')[0]; + // the format needs to be escaped a little + format = format.replace('\\', '\\\\'); + format = format.replace('\r', '\\r'); + format = format.replace('\n', '\\n'); + format = format.replace('\t', '\\t'); + format = format.replace("'", "\\'"); + return function(y, m, d) { + DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); + DateTimeShortcuts.calendarInputs[num].focus(); + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + }; + }, + handleCalendarQuickLink: function(num, offset) { + var d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + window.addEventListener('load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +})(); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000..f4c57c4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js @@ -0,0 +1,181 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. + +(function($) { + 'use strict'; + + // IE doesn't accept periods or dashes in the window name, but the element IDs + // we use to generate popup window names may contain them, therefore we map them + // to allowed characters in a reversible way so that we can locate the correct + // element when the popup window is dismissed. + function id_to_windowname(text) { + text = text.replace(/\./g, '__dot__'); + text = text.replace(/\-/g, '__dash__'); + return text; + } + + function windowname_to_id(text) { + text = text.replace(/__dot__/g, '.'); + text = text.replace(/__dash__/g, '-'); + return text; + } + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + var name = triggeringLink.id.replace(name_regexp, ''); + name = id_to_windowname(name); + var href = triggeringLink.href; + if (add_popup) { + if (href.indexOf('?') === -1) { + href += '?_popup=1'; + } else { + href += '&_popup=1'; + } + } + var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + var name = windowname_to_id(win.name); + var elem = document.getElementById(name); + if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { + elem.value += ',' + chosenId; + } else { + document.getElementById(name).value = chosenId; + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + var $this = $(triggeringLink); + var siblings = $this.nextAll('.view-related, .change-related, .delete-related'); + if (!siblings.length) { + return; + } + var value = $this.val(); + if (value) { + siblings.each(function() { + var elm = $(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + }); + } else { + siblings.removeAttr('href'); + } + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + var name = windowname_to_id(win.name); + var elem = document.getElementById(name); + if (elem) { + var elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + } else if (elemName === 'INPUT') { + if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + $(elem).trigger('change'); + } else { + var toId = name + "_to"; + var o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + var id = windowname_to_id(win.name).replace(/^edit_/, ''); + var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + var selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.textContent = newRepr; + this.value = newId; + } + }); + selects.next().find('.select2-selection__rendered').each(function() { + // The element can have a clear button as a child. + // Use the lastChild to modify only the displayed value. + this.lastChild.textContent = newRepr; + this.title = newRepr; + }); + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + var id = windowname_to_id(win.name).replace(/^delete_/, ''); + var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + var selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + $(this).remove(); + } + }).trigger('change'); + win.close(); + } + + // Global for testing purposes + window.id_to_windowname = id_to_windowname; + window.windowname_to_id = windowname_to_id; + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + + $(document).ready(function() { + $("a[data-popup-opener]").on('click', function(event) { + event.preventDefault(); + opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); + }); + $('body').on('click', '.related-widget-wrapper-link', function(e) { + e.preventDefault(); + if (this.href) { + var event = $.Event('django:show-related', {href: this.href}); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectPopup(this); + } + } + }); + $('body').on('change', '.related-widget-wrapper select', function(e) { + var event = $.Event('django:update-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + updateRelatedObjectLinks(this); + } + }); + $('.related-widget-wrapper select').trigger('change'); + $('body').on('click', '.related-lookup', function(e) { + e.preventDefault(); + var event = $.Event('django:lookup-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectLookupPopup(this); + } + }); + }); + +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/autocomplete.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/autocomplete.js new file mode 100644 index 0000000..65c0702 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/autocomplete.js @@ -0,0 +1,37 @@ +(function($) { + 'use strict'; + var init = function($element, options) { + var settings = $.extend({ + ajax: { + data: function(params) { + return { + term: params.term, + page: params.page + }; + } + } + }, options); + $element.select2(settings); + }; + + $.fn.djangoAdminSelect2 = function(options) { + var settings = $.extend({}, options); + $.each(this, function(i, element) { + var $element = $(element); + init($element, settings); + }); + return this; + }; + + $(function() { + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); + }); + + $(document).on('formset:added', (function() { + return function(event, $newFormset) { + return $newFormset.find('.admin-autocomplete').djangoAdminSelect2(); + }; + })(this)); +}(django.jQuery)); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/calendar.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/calendar.js new file mode 100644 index 0000000..a4c047a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/calendar.js @@ -0,0 +1,208 @@ +/*global gettext, pgettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ + +(function() { + 'use strict'; + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + var CalendarNamespace = { + monthsOfYear: [ + gettext('January'), + gettext('February'), + gettext('March'), + gettext('April'), + gettext('May'), + gettext('June'), + gettext('July'), + gettext('August'), + gettext('September'), + gettext('October'), + gettext('November'), + gettext('December') + ], + daysOfWeek: [ + pgettext('one letter Sunday', 'S'), + pgettext('one letter Monday', 'M'), + pgettext('one letter Tuesday', 'T'), + pgettext('one letter Wednesday', 'W'), + pgettext('one letter Thursday', 'T'), + pgettext('one letter Friday', 'F'), + pgettext('one letter Saturday', 'S') + ], + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + var days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + var today = new Date(); + var todayDay = today.getDate(); + var todayMonth = today.getMonth() + 1; + var todayYear = today.getFullYear(); + var todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + var isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + var calDiv = document.getElementById(div_id); + removeChildren(calDiv); + var calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + var tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + var tableRow = quickElement('tr', tableBody); + for (var i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + var startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + var days = CalendarNamespace.getDaysInMonth(month, year); + + var nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + function calendarMonth(y, m) { + function onClick(e) { + e.preventDefault(); + callback(y, m, this.textContent); + } + return onClick; + } + + // Draw days of month + var currentDay = 1; + for (i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + var cell = quickElement('td', tableRow, '', 'class', todayClass); + var link = quickElement('a', cell, currentDay, 'href', '#'); + link.addEventListener('click', calendarMonth(year, month)); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; + window.CalendarNamespace = CalendarNamespace; +})(); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/cancel.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/cancel.js new file mode 100644 index 0000000..04ec812 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/cancel.js @@ -0,0 +1,13 @@ +(function($) { + 'use strict'; + $(function() { + $('.cancel-link').on('click', function(e) { + e.preventDefault(); + if (window.location.search.indexOf('&_popup=1') === -1) { + window.history.back(); // Go back if not a popup. + } else { + window.close(); // Otherwise, close the popup. + } + }); + }); +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/change_form.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/change_form.js new file mode 100644 index 0000000..4797383 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/change_form.js @@ -0,0 +1,20 @@ +/*global showAddAnotherPopup, showRelatedObjectLookupPopup showRelatedObjectPopup updateRelatedObjectLinks*/ + +(function($) { + 'use strict'; + $(document).ready(function() { + var modelName = $('#django-admin-form-add-constants').data('modelName'); + $('body').on('click', '.add-another', function(e) { + e.preventDefault(); + var event = $.Event('django:add-another-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showAddAnotherPopup(this); + } + }); + + if (modelName) { + $('form#' + modelName + '_form :input:visible:enabled:first').focus(); + } + }); +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.js new file mode 100644 index 0000000..4b29689 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.js @@ -0,0 +1,26 @@ +/*global gettext*/ +(function($) { + 'use strict'; + $(document).ready(function() { + // Add anchor tag for Show/Hide link + $("fieldset.collapse").each(function(i, elem) { + // Don't hide if fields in this fieldset have errors + if ($(elem).find("div.errors").length === 0) { + $(elem).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser' + + i + '" class="collapse-toggle" href="#">' + gettext("Show") + + '</a>)'); + } + }); + // Add toggle to anchor tag + $("fieldset.collapse a.collapse-toggle").on('click', function(ev) { + if ($(this).closest("fieldset").hasClass("collapsed")) { + // Show + $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]); + } else { + // Hide + $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]); + } + return false; + }); + }); +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.min.js new file mode 100644 index 0000000..6e1a06d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/collapse.min.js @@ -0,0 +1,5 @@ +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)}; +$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}}; +$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3"); +(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){0===a(b).find("div.errors").length&&a(b).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")});a("fieldset.collapse a.collapse-toggle").on("click",function(c){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]): +a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",[a(this).attr("id")]);return!1})})})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/core.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/core.js new file mode 100644 index 0000000..591394e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/core.js @@ -0,0 +1,212 @@ +// Core javascript helper functions + +// basic browser identification & version +var isOpera = (navigator.userAgent.indexOf("Opera") >= 0) && parseFloat(navigator.appVersion); +var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]); + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + 'use strict'; + var obj = document.createElement(arguments[0]); + if (arguments[2]) { + var textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + var len = arguments.length; + for (var i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + 'use strict'; + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See https://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + 'use strict'; + var curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft); + obj = obj.offsetParent; + } + // IE offsetParent does not include the top-level + if (isIE && obj.parentElement) { + curleft += obj.offsetLeft - obj.scrollLeft; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + 'use strict'; + var curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop); + obj = obj.offsetParent; + } + // IE offsetParent does not include the top-level + if (isIE && obj.parentElement) { + curtop += obj.offsetTop - obj.scrollTop; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +(function() { + 'use strict'; + Date.prototype.getTwelveHours = function() { + var hours = this.getHours(); + if (hours === 0) { + return 12; + } + else { + return hours <= 12 ? hours : hours - 12; + } + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getHourMinute = function() { + return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); + }; + + Date.prototype.getHourMinuteSecond = function() { + return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); + }; + + Date.prototype.getFullMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYear[this.getMonth()]; + }; + + Date.prototype.strftime = function(format) { + var fields = { + B: this.getFullMonthName(), + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + var result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result = result + fields[format.charAt(i + 1)]; + ++i; + } + else { + result = result + format.charAt(i); + } + ++i; + } + return result; + }; + +// ---------------------------------------------------------------------------- +// String object extensions +// ---------------------------------------------------------------------------- + String.prototype.pad_left = function(pad_length, pad_string) { + var new_string = this; + for (var i = 0; new_string.length < pad_length; i++) { + new_string = pad_string + new_string; + } + return new_string; + }; + + String.prototype.strptime = function(format) { + var split_format = format.split(/[.\-/]/); + var date = this.split(/[.\-/]/); + var i = 0; + var day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + year = date[i]; + break; + } + ++i; + } + // Create Date object from UTC since the parsed value is supposed to be + // in UTC, not local time. Also, the calendar uses UTC functions for + // date extraction. + return new Date(Date.UTC(year, month, day)); + }; + +})(); +// ---------------------------------------------------------------------------- +// Get the computed style for and element +// ---------------------------------------------------------------------------- +function getStyle(oElm, strCssRule) { + 'use strict'; + var strValue = ""; + if(document.defaultView && document.defaultView.getComputedStyle) { + strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); + } + else if(oElm.currentStyle) { + strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { + return p1.toUpperCase(); + }); + strValue = oElm.currentStyle[strCssRule]; + } + return strValue; +} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.js new file mode 100644 index 0000000..045ef1e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.js @@ -0,0 +1,298 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: https://opensource.org/licenses/bsd-license.php + */ +(function($) { + 'use strict'; + $.fn.formset = function(opts) { + var options = $.extend({}, $.fn.formset.defaults, opts); + var $this = $(this); + var $parent = $this.parent(); + var updateElementIndex = function(el, prefix, ndx) { + var id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + var replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + var nextIndex = parseInt(totalForms.val(), 10); + var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + // only show the add button if we are allowed to add more items, + // note that max_num = None translates to a blank string. + var showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + if ($this.length && showAddButton) { + var addButton = options.addButton; + if (addButton === null) { + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + var numCols = this.eq(-1).children().length; + $parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="#">' + options.addText + "</a></tr>"); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('<div class="' + options.addCssClass + '"><a href="#">' + options.addText + "</a></div>"); + addButton = $this.filter(":last").next().find("a"); + } + } + addButton.on('click', function(e) { + e.preventDefault(); + var template = $("#" + options.prefix + "-empty"); + var row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('<div><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></div>"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an <li> after the last list item: + row.append('<li><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></li>"); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></span>"); + } + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited + row.insertBefore($(template)); + // Update number of total forms + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide add button in case we've hit the max, except we want to add infinitely + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // The delete button of each row triggers a bunch of other things + row.find("a." + options.deleteCssClass).on('click', function(e1) { + e1.preventDefault(); + // Remove the parent form containing this button: + row.remove(); + nextIndex -= 1; + // If a post-delete callback was provided, call it with the deleted form: + if (options.removed) { + options.removed(row); + } + $(document).trigger('formset:removed', [row, options.prefix]); + // Update the TOTAL_FORMS form count. + var forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once we drop below max + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Also, update names and ids for all remaining form controls + // so they remain in sequence: + var i, formCount; + var updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }); + // If a post-add callback was supplied, call it with the added form: + if (options.added) { + options.added(row); + } + $(document).trigger('formset:added', [row, options.prefix]); + }); + } + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null, // Function called each time a form is deleted + addButton: null // Existing add button to use + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(selector, options) { + var $rows = $(this); + var alternatingRows = function(row) { + $(selector).not(".add-row").removeClass("row1 row2") + .filter(":even").addClass("row1").end() + .filter(":odd").addClass("row2"); + }; + + var reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + var updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], false); + }); + $('.selectfilterstacked').each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], true); + }); + } + }; + + var initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + var field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: alternatingRows, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + alternatingRows(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(selector, options) { + var $rows = $(this); + var updateInlineLabel = function(row) { + $(selector).find(".inline_label").each(function(i) { + var count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + var reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + var updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], false); + }); + $(".selectfilterstacked").each(function(index, value) { + var namearr = value.name.split('-'); + SelectFilter.init(value.id, namearr[namearr.length - 1], true); + }); + } + }; + + var initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + var field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + $(document).ready(function() { + $(".js-inline-admin-formset").each(function() { + var data = $(this).data(), + inlineOptions = data.inlineFormset, + selector; + switch(data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options); + break; + case "tabular": + selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr"; + $(selector).tabularFormset(selector, inlineOptions.options); + break; + } + }); + }); +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.min.js new file mode 100644 index 0000000..65af8eb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/inlines.min.js @@ -0,0 +1,13 @@ +var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(b,d,a){b instanceof String&&(b=String(b));for(var c=b.length,f=0;f<c;f++){var g=b[f];if(d.call(a,g,f,b))return{i:f,v:g}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(b,d,a){b!=Array.prototype&&b!=Object.prototype&&(b[d]=a.value)}; +$jscomp.getGlobal=function(b){return"undefined"!=typeof window&&window===b?b:"undefined"!=typeof global&&null!=global?global:b};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(b,d,a,c){if(d){a=$jscomp.global;b=b.split(".");for(c=0;c<b.length-1;c++){var f=b[c];f in a||(a[f]={});a=a[f]}b=b[b.length-1];c=a[b];d=d(c);d!=c&&null!=d&&$jscomp.defineProperty(a,b,{configurable:!0,writable:!0,value:d})}}; +$jscomp.polyfill("Array.prototype.find",function(b){return b?b:function(b,a){return $jscomp.findInternal(this,b,a).v}},"es6","es3"); +(function(b){b.fn.formset=function(d){var a=b.extend({},b.fn.formset.defaults,d),c=b(this);d=c.parent();var f=function(a,e,d){var c=new RegExp("("+e+"-(\\d+|__prefix__))");e=e+"-"+d;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(c,e));a.id&&(a.id=a.id.replace(c,e));a.name&&(a.name=a.name.replace(c,e))},g=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),h=parseInt(g.val(),10),e=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),m=""===e.val()||0<e.val()-g.val(); +c.each(function(e){b(this).not("."+a.emptyCssClass).addClass(a.formCssClass)});if(c.length&&m){var l=a.addButton;null===l&&("TR"===c.prop("tagName")?(c=this.eq(-1).children().length,d.append('<tr class="'+a.addCssClass+'"><td colspan="'+c+'"><a href="#">'+a.addText+"</a></tr>"),l=d.find("tr:last a")):(c.filter(":last").after('<div class="'+a.addCssClass+'"><a href="#">'+a.addText+"</a></div>"),l=c.filter(":last").next().find("a")));l.on("click",function(d){d.preventDefault();d=b("#"+a.prefix+"-empty"); +var c=d.clone(!0);c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+h);c.is("tr")?c.children(":last").append('<div><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></div>"):c.is("ul")||c.is("ol")?c.append('<li><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></li>"):c.children(":first").append('<span><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></span>");c.find("*").each(function(){f(this,a.prefix,g.val())});c.insertBefore(b(d)); +b(g).val(parseInt(g.val(),10)+1);h+=1;""!==e.val()&&0>=e.val()-g.val()&&l.parent().hide();c.find("a."+a.deleteCssClass).on("click",function(d){d.preventDefault();c.remove();--h;a.removed&&a.removed(c);b(document).trigger("formset:removed",[c,a.prefix]);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(""===e.val()||0<e.val()-d.length)&&l.parent().show();var m,g=function(){f(this,a.prefix,k)};var k=0;for(m=d.length;k<m;k++)f(b(d).get(k),a.prefix,k),b(d.get(k)).find("*").each(g)}); +a.added&&a.added(c);b(document).trigger("formset:added",[c,a.prefix])})}return this};b.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null,addButton:null};b.fn.tabularFormset=function(d,a){var c=b(this),f=function(a){b(d).not(".add-row").removeClass("row1 row2").filter(":even").addClass("row1").end().filter(":odd").addClass("row2")},g=function(){"undefined"!== +typeof SelectFilter&&(b(".selectfilter").each(function(b,a){b=a.name.split("-");SelectFilter.init(a.id,b[b.length-1],!1)}),b(".selectfilterstacked").each(function(b,a){b=a.name.split("-");SelectFilter.init(a.id,b[b.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var c=b(this).find("input, select, textarea"),d=c.data("dependency_list")||[],e=[];b.each(d,function(b,c){e.push("#"+a.find(".field-"+c).find("input, select, textarea").attr("id"))});e.length&&c.prepopulate(e, +c.attr("maxlength"))})};c.formset({prefix:a.prefix,addText:a.addText,formCssClass:"dynamic-"+a.prefix,deleteCssClass:"inline-deletelink",deleteText:a.deleteText,emptyCssClass:"empty-form",removed:f,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());g();f(a)},addButton:a.addButton});return c};b.fn.stackedFormset=function(d,a){var c=b(this),f=function(a){b(d).find(".inline_label").each(function(a){a+=1;b(this).html(b(this).html().replace(/(#\d+)/g, +"#"+a))})},g=function(){"undefined"!==typeof SelectFilter&&(b(".selectfilter").each(function(a,b){a=b.name.split("-");SelectFilter.init(b.id,a[a.length-1],!1)}),b(".selectfilterstacked").each(function(a,b){a=b.name.split("-");SelectFilter.init(b.id,a[a.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var c=b(this).find("input, select, textarea"),d=c.data("dependency_list")||[],e=[];b.each(d,function(b,c){e.push("#"+a.find(".form-row .field-"+c).find("input, select, textarea").attr("id"))}); +e.length&&c.prepopulate(e,c.attr("maxlength"))})};c.formset({prefix:a.prefix,addText:a.addText,formCssClass:"dynamic-"+a.prefix,deleteCssClass:"inline-deletelink",deleteText:a.deleteText,emptyCssClass:"empty-form",removed:f,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());g();f(a)},addButton:a.addButton});return c};b(document).ready(function(){b(".js-inline-admin-formset").each(function(){var d=b(this).data(),a=d.inlineFormset; +switch(d.inlineType){case "stacked":d=a.name+"-group .inline-related";b(d).stackedFormset(d,a.options);break;case "tabular":d=a.name+"-group .tabular.inline-related tbody:first > tr",b(d).tabularFormset(d,a.options)}})})})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/jquery.init.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/jquery.init.js new file mode 100644 index 0000000..f3ac162 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global django:true, jQuery:false*/ +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +var django = django || {}; +django.jQuery = jQuery.noConflict(true); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/popup_response.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/popup_response.js new file mode 100644 index 0000000..b4a07e7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/popup_response.js @@ -0,0 +1,16 @@ +/*global opener */ +(function() { + 'use strict'; + var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +})(); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.js new file mode 100644 index 0000000..bef45a3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.js @@ -0,0 +1,42 @@ +/*global URLify*/ +(function($) { + 'use strict'; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + var prepopulatedField = $(this); + + var populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + var values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.on('change', function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).on('keyup change focus', populate); + } + }); + }; +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.min.js new file mode 100644 index 0000000..43c1b79 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate.min.js @@ -0,0 +1 @@ +(function(b){b.fn.prepopulate=function(d,f,g){return this.each(function(){var a=b(this),h=function(){if(!a.data("_changed")){var e=[];b.each(d,function(a,c){c=b(c);0<c.val().length&&e.push(c.val())});a.val(URLify(e.join(" "),f,g))}};a.data("_changed",!1);a.on("change",function(){a.data("_changed",!0)});if(!a.val())b(d.join(",")).on("keyup change focus",h)})}})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js new file mode 100644 index 0000000..184df92 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js @@ -0,0 +1,10 @@ +(function($) { + 'use strict'; + var fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); + $.each(fields, function(index, field) { + $('.empty-form .form-row .field-' + field.name + ', .empty-form.form-row .field-' + field.name).addClass('prepopulated_field'); + $(field.id).data('dependency_list', field.dependency_list).prepopulate( + field.dependency_ids, field.maxLength, field.allowUnicode + ); + }); +})(django.jQuery); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/timeparse.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/timeparse.js new file mode 100644 index 0000000..3cdc7ec --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/timeparse.js @@ -0,0 +1,106 @@ +(function() { + 'use strict'; + var timeParsePatterns = [ + // 9 + { + re: /^\d{1,2}$/i, + handler: function(bits) { + if (bits[0].length === 1) { + return '0' + bits[0] + ':00'; + } else { + return bits[0] + ':00'; + } + } + }, + // 13:00 + { + re: /^\d{2}[:.]\d{2}$/i, + handler: function(bits) { + return bits[0].replace('.', ':'); + } + }, + // 9:00 + { + re: /^\d[:.]\d{2}$/i, + handler: function(bits) { + return '0' + bits[0].replace('.', ':'); + } + }, + // 3 am / 3 a.m. / 3am + { + re: /^(\d+)\s*([ap])(?:.?m.?)?$/i, + handler: function(bits) { + var hour = parseInt(bits[1]); + if (hour === 12) { + hour = 0; + } + if (bits[2].toLowerCase() === 'p') { + if (hour === 12) { + hour = 0; + } + return (hour + 12) + ':00'; + } else { + if (hour < 10) { + return '0' + hour + ':00'; + } else { + return hour + ':00'; + } + } + } + }, + // 3.30 am / 3:15 a.m. / 3.00am + { + re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i, + handler: function(bits) { + var hour = parseInt(bits[1]); + var mins = parseInt(bits[2]); + if (mins < 10) { + mins = '0' + mins; + } + if (hour === 12) { + hour = 0; + } + if (bits[3].toLowerCase() === 'p') { + if (hour === 12) { + hour = 0; + } + return (hour + 12) + ':' + mins; + } else { + if (hour < 10) { + return '0' + hour + ':' + mins; + } else { + return hour + ':' + mins; + } + } + } + }, + // noon + { + re: /^no/i, + handler: function(bits) { + return '12:00'; + } + }, + // midnight + { + re: /^mid/i, + handler: function(bits) { + return '00:00'; + } + } + ]; + + function parseTimeString(s) { + for (var i = 0; i < timeParsePatterns.length; i++) { + var re = timeParsePatterns[i].re; + var handler = timeParsePatterns[i].handler; + var bits = re.exec(s); + if (bits) { + return handler(bits); + } + } + return s; + } + + window.parseTimeString = parseTimeString; +})(); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/urlify.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/urlify.js new file mode 100644 index 0000000..2d70dcd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/urlify.js @@ -0,0 +1,195 @@ +/*global XRegExp*/ +(function() { + 'use strict'; + + var LATIN_MAP = { + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', + 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', + 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', + 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', + 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' + }; + var LATIN_SYMBOLS_MAP = { + '©': '(c)' + }; + var GREEK_MAP = { + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', + 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', + 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', + 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', + 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', + 'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', + 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', + 'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', + 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', + 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' + }; + var TURKISH_MAP = { + 'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', + 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' + }; + var ROMANIAN_MAP = { + 'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', + 'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' + }; + var RUSSIAN_MAP = { + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', + 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', + 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', + 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', + 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', + 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', + 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', + 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', + 'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', + 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' + }; + var UKRAINIAN_MAP = { + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', + 'ї': 'yi', 'ґ': 'g' + }; + var CZECH_MAP = { + 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', + 'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', + 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' + }; + var SLOVAK_MAP = { + 'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', + 'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', + 'ú': 'u', 'ý': 'y', 'ž': 'z', + 'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', + 'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', + 'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' + }; + var POLISH_MAP = { + 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', + 'ź': 'z', 'ż': 'z', + 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', + 'Ź': 'Z', 'Ż': 'Z' + }; + var LATVIAN_MAP = { + 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', + 'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', + 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', + 'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' + }; + var ARABIC_MAP = { + 'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', + 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', + 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', + 'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' + }; + var LITHUANIAN_MAP = { + 'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', + 'ū': 'u', 'ž': 'z', + 'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', + 'Ū': 'U', 'Ž': 'Z' + }; + var SERBIAN_MAP = { + 'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', + 'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', + 'Џ': 'Dz', 'Đ': 'Dj' + }; + var AZERBAIJANI_MAP = { + 'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', + 'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' + }; + var GEORGIAN_MAP = { + 'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', + 'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', + 'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', + 'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', + 'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' + }; + + var ALL_DOWNCODE_MAPS = [ + LATIN_MAP, + LATIN_SYMBOLS_MAP, + GREEK_MAP, + TURKISH_MAP, + ROMANIAN_MAP, + RUSSIAN_MAP, + UKRAINIAN_MAP, + CZECH_MAP, + SLOVAK_MAP, + POLISH_MAP, + LATVIAN_MAP, + ARABIC_MAP, + LITHUANIAN_MAP, + SERBIAN_MAP, + AZERBAIJANI_MAP, + GEORGIAN_MAP + ]; + + var Downcoder = { + 'Initialize': function() { + if (Downcoder.map) { // already made + return; + } + Downcoder.map = {}; + Downcoder.chars = []; + for (var i = 0; i < ALL_DOWNCODE_MAPS.length; i++) { + var lookup = ALL_DOWNCODE_MAPS[i]; + for (var c in lookup) { + if (lookup.hasOwnProperty(c)) { + Downcoder.map[c] = lookup[c]; + } + } + } + for (var k in Downcoder.map) { + if (Downcoder.map.hasOwnProperty(k)) { + Downcoder.chars.push(k); + } + } + Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g'); + } + }; + + function downcode(slug) { + Downcoder.Initialize(); + return slug.replace(Downcoder.regex, function(m) { + return Downcoder.map[m]; + }); + } + + + function URLify(s, num_chars, allowUnicode) { + // changes, e.g., "Petty theft" to "petty-theft" + // remove all these words from the string before urlifying + if (!allowUnicode) { + s = downcode(s); + } + var hasUnicodeChars = /[^\u0000-\u007f]/.test(s); + // Remove English words only if the string contains ASCII (English) + // characters. + if (!hasUnicodeChars) { + var removeList = [ + "a", "an", "as", "at", "before", "but", "by", "for", "from", + "is", "in", "into", "like", "of", "off", "on", "onto", "per", + "since", "than", "the", "this", "that", "to", "up", "via", + "with" + ]; + var r = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi'); + s = s.replace(r, ''); + } + // if downcode doesn't hit, the char will be stripped here + if (allowUnicode) { + // Keep Unicode letters including both lowercase and uppercase + // characters, whitespace, and dash; remove other characters. + s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); + } else { + s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars + } + s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.substring(0, num_chars); // trim to first num_chars chars + s = s.replace(/-+$/g, ''); // trim any trailing hyphens + return s.toLowerCase(); // convert to lowercase + } + window.URLify = URLify; +})(); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt new file mode 100644 index 0000000..d930e62 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js new file mode 100644 index 0000000..9b5206b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js @@ -0,0 +1,10364 @@ +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML <object> elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + + "<select id='" + expando + "-\r\\' msallowcapture=''>" + + "<option selected=''></option></select>"; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "<a href='' disabled='disabled'></a>" + + "<select disabled='disabled'><option/></select>"; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = "<a href='#'></a>"; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = "<input/>"; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "<select multiple='multiple'>", "</select>" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. + thead: [ 1, "<table>", "</table>" ], + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], + tr: [ 2, "<table><tbody>", "</tbody></table>" ], + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG <use> instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /<script|<style|<link/i, + + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1></$2>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "<script>" ).prop( { + charset: s.scriptCharset, + src: s.url + } ).on( + "load error", + callback = function( evt ) { + script.remove(); + callback = null; + if ( evt ) { + complete( evt.type === "error" ? 404 : 200, evt.type ); + } + } + ); + + // Use native DOM manipulation to avoid our domManip AJAX trickery + document.head.appendChild( script[ 0 ] ); + }, + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +var oldCallbacks = [], + rjsonp = /(=)\?(?=&|$)|\?\?/; + +// Default jsonp settings +jQuery.ajaxSetup( { + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +} ); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? + "url" : + typeof s.data === "string" && + ( s.contentType || "" ) + .indexOf( "application/x-www-form-urlencoded" ) === 0 && + rjsonp.test( s.data ) && "data" + ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + + // Insert callback into url or form data + if ( jsonProp ) { + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); + } else if ( s.jsonp !== false ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters[ "script json" ] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // Force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + overwritten = window[ callbackName ]; + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always( function() { + + // If previous value didn't exist - remove it + if ( overwritten === undefined ) { + jQuery( window ).removeProp( callbackName ); + + // Otherwise restore preexisting value + } else { + window[ callbackName ] = overwritten; + } + + // Save back as free + if ( s[ callbackName ] ) { + + // Make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // Save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + } ); + + // Delegate to script + return "script"; + } +} ); + + + + +// Support: Safari 8 only +// In Safari 8 documents created via document.implementation.createHTMLDocument +// collapse sibling forms: the second one becomes a child of the first one. +// Because of that, this security measure has to be disabled in Safari 8. +// https://bugs.webkit.org/show_bug.cgi?id=137337 +support.createHTMLDocument = ( function() { + var body = document.implementation.createHTMLDocument( "" ).body; + body.innerHTML = "<form></form><form></form>"; + return body.childNodes.length === 2; +} )(); + + +// Argument "data" should be string of html +// context (optional): If specified, the fragment will be created in this context, +// defaults to document +// keepScripts (optional): If true, will include scripts passed in the html string +jQuery.parseHTML = function( data, context, keepScripts ) { + if ( typeof data !== "string" ) { + return []; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + + var base, parsed, scripts; + + if ( !context ) { + + // Stop scripts or inline event handlers from being executed immediately + // by using document.implementation + if ( support.createHTMLDocument ) { + context = document.implementation.createHTMLDocument( "" ); + + // Set the base href for the created document + // so any parsed elements with URLs + // are based on the document's URL (gh-2965) + base = context.createElement( "base" ); + base.href = document.location.href; + context.head.appendChild( base ); + } else { + context = document; + } + } + + parsed = rsingleTag.exec( data ); + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[ 1 ] ) ]; + } + + parsed = buildFragment( [ data ], context, scripts ); + + if ( scripts && scripts.length ) { + jQuery( scripts ).remove(); + } + + return jQuery.merge( [], parsed.childNodes ); +}; + + +/** + * Load a url into a page + */ +jQuery.fn.load = function( url, params, callback ) { + var selector, type, response, + self = this, + off = url.indexOf( " " ); + + if ( off > -1 ) { + selector = stripAndCollapse( url.slice( off ) ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // If we have elements to modify, make the request + if ( self.length > 0 ) { + jQuery.ajax( { + url: url, + + // If "type" variable is undefined, then "GET" method will be used. + // Make value of this field explicit since + // user can override it through ajaxSetup method + type: type || "GET", + dataType: "html", + data: params + } ).done( function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + self.html( selector ? + + // If a selector was specified, locate the right elements in a dummy div + // Exclude scripts to avoid IE 'Permission Denied' errors + jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : + + // Otherwise use the full result + responseText ); + + // If the request succeeds, this function gets "data", "status", "jqXHR" + // but they are ignored because response was set above. + // If it fails, this function gets "jqXHR", "status", "error" + } ).always( callback && function( jqXHR, status ) { + self.each( function() { + callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); + } ); + } ); + } + + return this; +}; + + + + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" +], function( i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); + }; +} ); + + + + +jQuery.expr.pseudos.animated = function( elem ) { + return jQuery.grep( jQuery.timers, function( fn ) { + return elem === fn.elem; + } ).length; +}; + + + + +jQuery.offset = { + setOffset: function( elem, options, i ) { + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, + position = jQuery.css( elem, "position" ), + curElem = jQuery( elem ), + props = {}; + + // Set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + curOffset = curElem.offset(); + curCSSTop = jQuery.css( elem, "top" ); + curCSSLeft = jQuery.css( elem, "left" ); + calculatePosition = ( position === "absolute" || position === "fixed" ) && + ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; + + // Need to be able to calculate position if either + // top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( isFunction( options ) ) { + + // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) + options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + + } else { + curElem.css( props ); + } + } +}; + +jQuery.fn.extend( { + + // offset() relates an element's border box to the document origin + offset: function( options ) { + + // Preserve chaining for setter + if ( arguments.length ) { + return options === undefined ? + this : + this.each( function( i ) { + jQuery.offset.setOffset( this, options, i ); + } ); + } + + var rect, win, + elem = this[ 0 ]; + + if ( !elem ) { + return; + } + + // Return zeros for disconnected and hidden (display: none) elements (gh-2310) + // Support: IE <=11 only + // Running getBoundingClientRect on a + // disconnected node in IE throws an error + if ( !elem.getClientRects().length ) { + return { top: 0, left: 0 }; + } + + // Get document-relative position by adding viewport scroll to viewport-relative gBCR + rect = elem.getBoundingClientRect(); + win = elem.ownerDocument.defaultView; + return { + top: rect.top + win.pageYOffset, + left: rect.left + win.pageXOffset + }; + }, + + // position() relates an element's margin box to its offset parent's padding box + // This corresponds to the behavior of CSS absolute positioning + position: function() { + if ( !this[ 0 ] ) { + return; + } + + var offsetParent, offset, doc, + elem = this[ 0 ], + parentOffset = { top: 0, left: 0 }; + + // position:fixed elements are offset from the viewport, which itself always has zero offset + if ( jQuery.css( elem, "position" ) === "fixed" ) { + + // Assume position:fixed implies availability of getBoundingClientRect + offset = elem.getBoundingClientRect(); + + } else { + offset = this.offset(); + + // Account for the *real* offset parent, which can be the document or its root element + // when a statically positioned element is identified + doc = elem.ownerDocument; + offsetParent = elem.offsetParent || doc.documentElement; + while ( offsetParent && + ( offsetParent === doc.body || offsetParent === doc.documentElement ) && + jQuery.css( offsetParent, "position" ) === "static" ) { + + offsetParent = offsetParent.parentNode; + } + if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { + + // Incorporate borders into its offset, since they are outside its content origin + parentOffset = jQuery( offsetParent ).offset(); + parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); + parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); + } + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) + }; + }, + + // This method will return documentElement in the following cases: + // 1) For the element inside the iframe without offsetParent, this method will return + // documentElement of the parent window + // 2) For the hidden or detached element + // 3) For body or html element, i.e. in case of the html node - it will return itself + // + // but those exceptions were never presented as a real life use-cases + // and might be considered as more preferable results. + // + // This logic, however, is not guaranteed and can change at any point in the future + offsetParent: function() { + return this.map( function() { + var offsetParent = this.offsetParent; + + while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || documentElement; + } ); + } +} ); + +// Create scrollLeft and scrollTop methods +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { + var top = "pageYOffset" === prop; + + jQuery.fn[ method ] = function( val ) { + return access( this, function( elem, method, val ) { + + // Coalesce documents and windows + var win; + if ( isWindow( elem ) ) { + win = elem; + } else if ( elem.nodeType === 9 ) { + win = elem.defaultView; + } + + if ( val === undefined ) { + return win ? win[ prop ] : elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : win.pageXOffset, + top ? val : win.pageYOffset + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length ); + }; +} ); + +// Support: Safari <=7 - 9.1, Chrome <=37 - 49 +// Add the top/left cssHooks using jQuery.fn.position +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 +// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 +// getComputedStyle returns percent when specified for top/left/bottom/right; +// rather than make the css module depend on the offset module, just check for it here +jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, + function( elem, computed ) { + if ( computed ) { + computed = curCSS( elem, prop ); + + // If curCSS returns percentage, fallback to offset + return rnumnonpx.test( computed ) ? + jQuery( elem ).position()[ prop ] + "px" : + computed; + } + } + ); +} ); + + +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, + function( defaultExtra, funcName ) { + + // Margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return access( this, function( elem, type, value ) { + var doc; + + if ( isWindow( elem ) ) { + + // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) + return funcName.indexOf( "outer" ) === 0 ? + elem[ "inner" + name ] : + elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], + // whichever is greatest + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable ); + }; + } ); +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +jQuery.fn.extend( { + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + } +} ); + +// Bind a function to a context, optionally partially applying any +// arguments. +// jQuery.proxy is deprecated to promote standards (specifically Function#bind) +// However, it is not slated for removal any time soon +jQuery.proxy = function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; +}; + +jQuery.holdReady = function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } +}; +jQuery.isArray = Array.isArray; +jQuery.parseJSON = JSON.parse; +jQuery.nodeName = nodeName; +jQuery.isFunction = isFunction; +jQuery.isWindow = isWindow; +jQuery.camelCase = camelCase; +jQuery.type = toType; + +jQuery.now = Date.now; + +jQuery.isNumeric = function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); +}; + + + + +// Register as a named AMD module, since jQuery can be concatenated with other +// files that may use define, but not via a proper concatenation script that +// understands anonymous AMD modules. A named AMD is safest and most robust +// way to register. Lowercase jquery is used because AMD module names are +// derived from file names, and jQuery is normally delivered in a lowercase +// file name. Do this after creating the global so that if an AMD module wants +// to call noConflict to hide this version of jQuery, it will work. + +// Note that for maximum portability, libraries that are not jQuery should +// declare themselves as anonymous modules, and avoid setting a global if an +// AMD loader is present. jQuery is a special case. For more information, see +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon + +if ( typeof define === "function" && define.amd ) { + define( "jquery", [], function() { + return jQuery; + } ); +} + + + + +var + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$; + +jQuery.noConflict = function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; +}; + +// Expose jQuery and $ identifiers, even in AMD +// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (#13566) +if ( !noGlobal ) { + window.jQuery = window.$ = jQuery; +} + + + + +return jQuery; +} ); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js new file mode 100644 index 0000000..4d9b3a2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w}); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md new file mode 100644 index 0000000..86c7c29 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2015 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js new file mode 100644 index 0000000..01a6882 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="الرجاء حذف "+t+" عناصر";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="الرجاء إضافة "+t+" عناصر";return n},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){var t="تستطيع إختيار "+e.maximum+" بنود فقط";return t},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js new file mode 100644 index 0000000..2accb97 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js new file mode 100644 index 0000000..35ae989 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js new file mode 100644 index 0000000..fdb5f3d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js new file mode 100644 index 0000000..9651378 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js new file mode 100644 index 0000000..501c51e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js new file mode 100644 index 0000000..9a6d553 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js new file mode 100644 index 0000000..4735d14 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js new file mode 100644 index 0000000..8e80ede --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js new file mode 100644 index 0000000..0a09650 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js new file mode 100644 index 0000000..c70f4a5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js new file mode 100644 index 0000000..9336053 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js new file mode 100644 index 0000000..5118cd2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها می‌توانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js new file mode 100644 index 0000000..9e60f26 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js new file mode 100644 index 0000000..e4a6650 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js new file mode 100644 index 0000000..02f258f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js new file mode 100644 index 0000000..881f8d3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js new file mode 100644 index 0000000..e829684 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js new file mode 100644 index 0000000..89f7b12 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js new file mode 100644 index 0000000..74c8a90 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js new file mode 100644 index 0000000..9586782 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js new file mode 100644 index 0000000..ab97a14 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js new file mode 100644 index 0000000..7796b9f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js new file mode 100644 index 0000000..9f4fff6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js new file mode 100644 index 0000000..8e94adc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js new file mode 100644 index 0000000..4ed0321 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js new file mode 100644 index 0000000..05f3a6e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js new file mode 100644 index 0000000..df8ee94 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js new file mode 100644 index 0000000..319ecca --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js new file mode 100644 index 0000000..4258f12 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js new file mode 100644 index 0000000..6770087 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js new file mode 100644 index 0000000..8bd5e3c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js new file mode 100644 index 0000000..54ba28e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js new file mode 100644 index 0000000..a6629c8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js new file mode 100644 index 0000000..0cbda56 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js new file mode 100644 index 0000000..788a263 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js new file mode 100644 index 0000000..9ecab80 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js new file mode 100644 index 0000000..82f2941 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js new file mode 100644 index 0000000..e945394 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js new file mode 100644 index 0000000..ac0cc72 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js new file mode 100644 index 0000000..bedac08 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js new file mode 100644 index 0000000..097a86c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js new file mode 100644 index 0000000..25d27a8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js new file mode 100644 index 0000000..eb3ca89 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js new file mode 100644 index 0000000..8975b8a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js new file mode 100644 index 0000000..2ed9597 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js new file mode 100644 index 0000000..ea0812e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */ + +(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js new file mode 100644 index 0000000..e750834 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js @@ -0,0 +1,6436 @@ +/*! + * Select2 4.0.3 + * https://select2.github.io + * + * Released under the MIT license + * https://github.com/select2/select2/blob/master/LICENSE.md + */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function (jQuery) { + // This is needed so we can catch the AMD loader configuration and use it + // The inner file should be wrapped (by `banner.start.js`) in a function that + // returns the AMD loader references. + var S2 = +(function () { + // Restore the Select2 AMD loader so it can be used + // Needed mostly in the language files, where the loader is not inserted + if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { + var S2 = jQuery.fn.select2.amd; + } +var S2;(function () { if (!S2 || !S2.requirejs) { +if (!S2) { S2 = {}; } else { require = S2; } +/** + * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/almond for details + */ +//Going sloppy to avoid 'use strict' string cost, but strict practices should +//be followed. +/*jslint sloppy: true */ +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + var main, req, makeMap, handlers, + defined = {}, + waiting = {}, + config = {}, + defining = {}, + hasOwn = Object.prototype.hasOwnProperty, + aps = [].slice, + jsSuffixRegExp = /\.js$/; + + function hasProp(obj, prop) { + return hasOwn.call(obj, prop); + } + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + var nameParts, nameSegment, mapValue, foundMap, lastIndex, + foundI, foundStarMap, starI, i, j, part, + baseParts = baseName && baseName.split("/"), + map = config.map, + starMap = (map && map['*']) || {}; + + //Adjust any relative paths. + if (name && name.charAt(0) === ".") { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + name = name.split('/'); + lastIndex = name.length - 1; + + // Node .js allowance: + if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { + name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); + } + + //Lop off the last part of baseParts, so that . matches the + //"directory" and not name of the baseName's module. For instance, + //baseName of "one/two/three", maps to "one/two/three.js", but we + //want the directory, "one/two" for this normalization. + name = baseParts.slice(0, baseParts.length - 1).concat(name); + + //start trimDots + for (i = 0; i < name.length; i += 1) { + part = name[i]; + if (part === ".") { + name.splice(i, 1); + i -= 1; + } else if (part === "..") { + if (i === 1 && (name[2] === '..' || name[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join("/"); + } else if (name.indexOf('./') === 0) { + // No baseName, so this is ID is resolved relative + // to baseUrl, pull off the leading dot. + name = name.substring(2); + } + } + + //Apply map config if available. + if ((baseParts || starMap) && map) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join("/"); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = map[baseParts.slice(0, j).join('/')]; + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = mapValue[nameSegment]; + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && starMap[nameSegment]) { + foundStarMap = starMap[nameSegment]; + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + var args = aps.call(arguments, 0); + + //If first arg is not require('string'), and there is only + //one arg, it is the array form without a callback. Insert + //a null so that the following concat is correct. + if (typeof args[0] !== 'string' && args.length === 1) { + args.push(null); + } + return req.apply(undef, args.concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (hasProp(waiting, name)) { + var args = waiting[name]; + delete waiting[name]; + defining[name] = true; + main.apply(undef, args); + } + + if (!hasProp(defined, name) && !hasProp(defining, name)) { + throw new Error('No ' + name); + } + return defined[name]; + } + + //Turns a plugin!resource to [plugin, resource] + //with the plugin being undefined if the name + //did not have a plugin prefix. + function splitPrefix(name) { + var prefix, + index = name ? name.indexOf('!') : -1; + if (index > -1) { + prefix = name.substring(0, index); + name = name.substring(index + 1, name.length); + } + return [prefix, name]; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + makeMap = function (name, relName) { + var plugin, + parts = splitPrefix(name), + prefix = parts[0]; + + name = parts[1]; + + if (prefix) { + prefix = normalize(prefix, relName); + plugin = callDep(prefix); + } + + //Normalize according + if (prefix) { + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relName)); + } else { + name = normalize(name, relName); + } + } else { + name = normalize(name, relName); + parts = splitPrefix(name); + prefix = parts[0]; + name = parts[1]; + if (prefix) { + plugin = callDep(prefix); + } + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + pr: prefix, + p: plugin + }; + }; + + function makeConfig(name) { + return function () { + return (config && config.config && config.config[name]) || {}; + }; + } + + handlers = { + require: function (name) { + return makeRequire(name); + }, + exports: function (name) { + var e = defined[name]; + if (typeof e !== 'undefined') { + return e; + } else { + return (defined[name] = {}); + } + }, + module: function (name) { + return { + id: name, + uri: '', + exports: defined[name], + config: makeConfig(name) + }; + } + }; + + main = function (name, deps, callback, relName) { + var cjsModule, depName, ret, map, i, + args = [], + callbackType = typeof callback, + usingExports; + + //Use name if no relName + relName = relName || name; + + //Call the callback to define the module, if necessary. + if (callbackType === 'undefined' || callbackType === 'function') { + //Pull out the defined dependencies and pass the ordered + //values to the callback. + //Default to [require, exports, module] if no deps + deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; + for (i = 0; i < deps.length; i += 1) { + map = makeMap(deps[i], relName); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = handlers.require(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = handlers.exports(name); + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = handlers.module(name); + } else if (hasProp(defined, depName) || + hasProp(waiting, depName) || + hasProp(defining, depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else { + throw new Error(name + ' missing ' + depName); + } + } + + ret = callback ? callback.apply(defined[name], args) : undefined; + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef && + cjsModule.exports !== defined[name]) { + defined[name] = cjsModule.exports; + } else if (ret !== undef || !usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = require = req = function (deps, callback, relName, forceSync, alt) { + if (typeof deps === "string") { + if (handlers[deps]) { + //callback in this case is really relName + return handlers[deps](callback); + } + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, callback).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + config = deps; + if (config.deps) { + req(config.deps, config.callback); + } + if (!callback) { + return; + } + + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = relName; + relName = null; + } else { + deps = undef; + } + } + + //Support require(['a']) + callback = callback || function () {}; + + //If relName is a function, it is an errback handler, + //so remove it. + if (typeof relName === 'function') { + relName = forceSync; + forceSync = alt; + } + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + //Using a non-zero value because of concern for what old browsers + //do, and latest browsers "upgrade" to 4 if lower value is used: + //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: + //If want a value immediately, use require('id') instead -- something + //that works in almond on the global level, but not guaranteed and + //unlikely to work in other AMD implementations. + setTimeout(function () { + main(undef, deps, callback, relName); + }, 4); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function (cfg) { + return req(cfg); + }; + + /** + * Expose module registry for debugging and tooling + */ + requirejs._defined = defined; + + define = function (name, deps, callback) { + if (typeof name !== 'string') { + throw new Error('See almond README: incorrect module build, no module name'); + } + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + if (!hasProp(defined, name) && !hasProp(waiting, name)) { + waiting[name] = [name, deps, callback]; + } + }; + + define.amd = { + jQuery: true + }; +}()); + +S2.requirejs = requirejs;S2.require = require;S2.define = define; +} +}()); +S2.define("almond", function(){}); + +/* global jQuery:false, $:false */ +S2.define('jquery',[],function () { + var _$ = jQuery || $; + + if (_$ == null && console && console.error) { + console.error( + 'Select2: An instance of jQuery or a jQuery-compatible library was not ' + + 'found. Make sure that you are including jQuery before Select2 on your ' + + 'web page.' + ); + } + + return _$; +}); + +S2.define('select2/utils',[ + 'jquery' +], function ($) { + var Utils = {}; + + Utils.Extend = function (ChildClass, SuperClass) { + var __hasProp = {}.hasOwnProperty; + + function BaseConstructor () { + this.constructor = ChildClass; + } + + for (var key in SuperClass) { + if (__hasProp.call(SuperClass, key)) { + ChildClass[key] = SuperClass[key]; + } + } + + BaseConstructor.prototype = SuperClass.prototype; + ChildClass.prototype = new BaseConstructor(); + ChildClass.__super__ = SuperClass.prototype; + + return ChildClass; + }; + + function getMethods (theClass) { + var proto = theClass.prototype; + + var methods = []; + + for (var methodName in proto) { + var m = proto[methodName]; + + if (typeof m !== 'function') { + continue; + } + + if (methodName === 'constructor') { + continue; + } + + methods.push(methodName); + } + + return methods; + } + + Utils.Decorate = function (SuperClass, DecoratorClass) { + var decoratedMethods = getMethods(DecoratorClass); + var superMethods = getMethods(SuperClass); + + function DecoratedClass () { + var unshift = Array.prototype.unshift; + + var argCount = DecoratorClass.prototype.constructor.length; + + var calledConstructor = SuperClass.prototype.constructor; + + if (argCount > 0) { + unshift.call(arguments, SuperClass.prototype.constructor); + + calledConstructor = DecoratorClass.prototype.constructor; + } + + calledConstructor.apply(this, arguments); + } + + DecoratorClass.displayName = SuperClass.displayName; + + function ctr () { + this.constructor = DecoratedClass; + } + + DecoratedClass.prototype = new ctr(); + + for (var m = 0; m < superMethods.length; m++) { + var superMethod = superMethods[m]; + + DecoratedClass.prototype[superMethod] = + SuperClass.prototype[superMethod]; + } + + var calledMethod = function (methodName) { + // Stub out the original method if it's not decorating an actual method + var originalMethod = function () {}; + + if (methodName in DecoratedClass.prototype) { + originalMethod = DecoratedClass.prototype[methodName]; + } + + var decoratedMethod = DecoratorClass.prototype[methodName]; + + return function () { + var unshift = Array.prototype.unshift; + + unshift.call(arguments, originalMethod); + + return decoratedMethod.apply(this, arguments); + }; + }; + + for (var d = 0; d < decoratedMethods.length; d++) { + var decoratedMethod = decoratedMethods[d]; + + DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod); + } + + return DecoratedClass; + }; + + var Observable = function () { + this.listeners = {}; + }; + + Observable.prototype.on = function (event, callback) { + this.listeners = this.listeners || {}; + + if (event in this.listeners) { + this.listeners[event].push(callback); + } else { + this.listeners[event] = [callback]; + } + }; + + Observable.prototype.trigger = function (event) { + var slice = Array.prototype.slice; + var params = slice.call(arguments, 1); + + this.listeners = this.listeners || {}; + + // Params should always come in as an array + if (params == null) { + params = []; + } + + // If there are no arguments to the event, use a temporary object + if (params.length === 0) { + params.push({}); + } + + // Set the `_type` of the first object to the event + params[0]._type = event; + + if (event in this.listeners) { + this.invoke(this.listeners[event], slice.call(arguments, 1)); + } + + if ('*' in this.listeners) { + this.invoke(this.listeners['*'], arguments); + } + }; + + Observable.prototype.invoke = function (listeners, params) { + for (var i = 0, len = listeners.length; i < len; i++) { + listeners[i].apply(this, params); + } + }; + + Utils.Observable = Observable; + + Utils.generateChars = function (length) { + var chars = ''; + + for (var i = 0; i < length; i++) { + var randomChar = Math.floor(Math.random() * 36); + chars += randomChar.toString(36); + } + + return chars; + }; + + Utils.bind = function (func, context) { + return function () { + func.apply(context, arguments); + }; + }; + + Utils._convertData = function (data) { + for (var originalKey in data) { + var keys = originalKey.split('-'); + + var dataLevel = data; + + if (keys.length === 1) { + continue; + } + + for (var k = 0; k < keys.length; k++) { + var key = keys[k]; + + // Lowercase the first letter + // By default, dash-separated becomes camelCase + key = key.substring(0, 1).toLowerCase() + key.substring(1); + + if (!(key in dataLevel)) { + dataLevel[key] = {}; + } + + if (k == keys.length - 1) { + dataLevel[key] = data[originalKey]; + } + + dataLevel = dataLevel[key]; + } + + delete data[originalKey]; + } + + return data; + }; + + Utils.hasScroll = function (index, el) { + // Adapted from the function created by @ShadowScripter + // and adapted by @BillBarry on the Stack Exchange Code Review website. + // The original code can be found at + // http://codereview.stackexchange.com/q/13338 + // and was designed to be used with the Sizzle selector engine. + + var $el = $(el); + var overflowX = el.style.overflowX; + var overflowY = el.style.overflowY; + + //Check both x and y declarations + if (overflowX === overflowY && + (overflowY === 'hidden' || overflowY === 'visible')) { + return false; + } + + if (overflowX === 'scroll' || overflowY === 'scroll') { + return true; + } + + return ($el.innerHeight() < el.scrollHeight || + $el.innerWidth() < el.scrollWidth); + }; + + Utils.escapeMarkup = function (markup) { + var replaceMap = { + '\\': '\', + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''', + '/': '/' + }; + + // Do not try to escape the markup if it's not a string + if (typeof markup !== 'string') { + return markup; + } + + return String(markup).replace(/[&<>"'\/\\]/g, function (match) { + return replaceMap[match]; + }); + }; + + // Append an array of jQuery nodes to a given element. + Utils.appendMany = function ($element, $nodes) { + // jQuery 1.7.x does not support $.fn.append() with an array + // Fall back to a jQuery object collection using $.fn.add() + if ($.fn.jquery.substr(0, 3) === '1.7') { + var $jqNodes = $(); + + $.map($nodes, function (node) { + $jqNodes = $jqNodes.add(node); + }); + + $nodes = $jqNodes; + } + + $element.append($nodes); + }; + + return Utils; +}); + +S2.define('select2/results',[ + 'jquery', + './utils' +], function ($, Utils) { + function Results ($element, options, dataAdapter) { + this.$element = $element; + this.data = dataAdapter; + this.options = options; + + Results.__super__.constructor.call(this); + } + + Utils.Extend(Results, Utils.Observable); + + Results.prototype.render = function () { + var $results = $( + '<ul class="select2-results__options" role="tree"></ul>' + ); + + if (this.options.get('multiple')) { + $results.attr('aria-multiselectable', 'true'); + } + + this.$results = $results; + + return $results; + }; + + Results.prototype.clear = function () { + this.$results.empty(); + }; + + Results.prototype.displayMessage = function (params) { + var escapeMarkup = this.options.get('escapeMarkup'); + + this.clear(); + this.hideLoading(); + + var $message = $( + '<li role="treeitem" aria-live="assertive"' + + ' class="select2-results__option"></li>' + ); + + var message = this.options.get('translations').get(params.message); + + $message.append( + escapeMarkup( + message(params.args) + ) + ); + + $message[0].className += ' select2-results__message'; + + this.$results.append($message); + }; + + Results.prototype.hideMessages = function () { + this.$results.find('.select2-results__message').remove(); + }; + + Results.prototype.append = function (data) { + this.hideLoading(); + + var $options = []; + + if (data.results == null || data.results.length === 0) { + if (this.$results.children().length === 0) { + this.trigger('results:message', { + message: 'noResults' + }); + } + + return; + } + + data.results = this.sort(data.results); + + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; + + var $option = this.option(item); + + $options.push($option); + } + + this.$results.append($options); + }; + + Results.prototype.position = function ($results, $dropdown) { + var $resultsContainer = $dropdown.find('.select2-results'); + $resultsContainer.append($results); + }; + + Results.prototype.sort = function (data) { + var sorter = this.options.get('sorter'); + + return sorter(data); + }; + + Results.prototype.highlightFirstItem = function () { + var $options = this.$results + .find('.select2-results__option[aria-selected]'); + + var $selected = $options.filter('[aria-selected=true]'); + + // Check if there are any selected options + if ($selected.length > 0) { + // If there are selected options, highlight the first + $selected.first().trigger('mouseenter'); + } else { + // If there are no selected options, highlight the first option + // in the dropdown + $options.first().trigger('mouseenter'); + } + + this.ensureHighlightVisible(); + }; + + Results.prototype.setClasses = function () { + var self = this; + + this.data.current(function (selected) { + var selectedIds = $.map(selected, function (s) { + return s.id.toString(); + }); + + var $options = self.$results + .find('.select2-results__option[aria-selected]'); + + $options.each(function () { + var $option = $(this); + + var item = $.data(this, 'data'); + + // id needs to be converted to a string when comparing + var id = '' + item.id; + + if ((item.element != null && item.element.selected) || + (item.element == null && $.inArray(id, selectedIds) > -1)) { + $option.attr('aria-selected', 'true'); + } else { + $option.attr('aria-selected', 'false'); + } + }); + + }); + }; + + Results.prototype.showLoading = function (params) { + this.hideLoading(); + + var loadingMore = this.options.get('translations').get('searching'); + + var loading = { + disabled: true, + loading: true, + text: loadingMore(params) + }; + var $loading = this.option(loading); + $loading.className += ' loading-results'; + + this.$results.prepend($loading); + }; + + Results.prototype.hideLoading = function () { + this.$results.find('.loading-results').remove(); + }; + + Results.prototype.option = function (data) { + var option = document.createElement('li'); + option.className = 'select2-results__option'; + + var attrs = { + 'role': 'treeitem', + 'aria-selected': 'false' + }; + + if (data.disabled) { + delete attrs['aria-selected']; + attrs['aria-disabled'] = 'true'; + } + + if (data.id == null) { + delete attrs['aria-selected']; + } + + if (data._resultId != null) { + option.id = data._resultId; + } + + if (data.title) { + option.title = data.title; + } + + if (data.children) { + attrs.role = 'group'; + attrs['aria-label'] = data.text; + delete attrs['aria-selected']; + } + + for (var attr in attrs) { + var val = attrs[attr]; + + option.setAttribute(attr, val); + } + + if (data.children) { + var $option = $(option); + + var label = document.createElement('strong'); + label.className = 'select2-results__group'; + + var $label = $(label); + this.template(data, label); + + var $children = []; + + for (var c = 0; c < data.children.length; c++) { + var child = data.children[c]; + + var $child = this.option(child); + + $children.push($child); + } + + var $childrenContainer = $('<ul></ul>', { + 'class': 'select2-results__options select2-results__options--nested' + }); + + $childrenContainer.append($children); + + $option.append(label); + $option.append($childrenContainer); + } else { + this.template(data, option); + } + + $.data(option, 'data', data); + + return option; + }; + + Results.prototype.bind = function (container, $container) { + var self = this; + + var id = container.id + '-results'; + + this.$results.attr('id', id); + + container.on('results:all', function (params) { + self.clear(); + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + self.highlightFirstItem(); + } + }); + + container.on('results:append', function (params) { + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + } + }); + + container.on('query', function (params) { + self.hideMessages(); + self.showLoading(params); + }); + + container.on('select', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + self.highlightFirstItem(); + }); + + container.on('unselect', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + self.highlightFirstItem(); + }); + + container.on('open', function () { + // When the dropdown is open, aria-expended="true" + self.$results.attr('aria-expanded', 'true'); + self.$results.attr('aria-hidden', 'false'); + + self.setClasses(); + self.ensureHighlightVisible(); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expended="false" + self.$results.attr('aria-expanded', 'false'); + self.$results.attr('aria-hidden', 'true'); + self.$results.removeAttr('aria-activedescendant'); + }); + + container.on('results:toggle', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + $highlighted.trigger('mouseup'); + }); + + container.on('results:select', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var data = $highlighted.data('data'); + + if ($highlighted.attr('aria-selected') == 'true') { + self.trigger('close', {}); + } else { + self.trigger('select', { + data: data + }); + } + }); + + container.on('results:previous', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + // If we are already at te top, don't move further + if (currentIndex === 0) { + return; + } + + var nextIndex = currentIndex - 1; + + // If none are highlighted, highlight the first + if ($highlighted.length === 0) { + nextIndex = 0; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top; + var nextTop = $next.offset().top; + var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextTop - currentOffset < 0) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:next', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var nextIndex = currentIndex + 1; + + // If we are at the last option, stay there + if (nextIndex >= $options.length) { + return; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top + + self.$results.outerHeight(false); + var nextBottom = $next.offset().top + $next.outerHeight(false); + var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextBottom > currentOffset) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:focus', function (params) { + params.element.addClass('select2-results__option--highlighted'); + }); + + container.on('results:message', function (params) { + self.displayMessage(params); + }); + + if ($.fn.mousewheel) { + this.$results.on('mousewheel', function (e) { + var top = self.$results.scrollTop(); + + var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; + + var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; + var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); + + if (isAtTop) { + self.$results.scrollTop(0); + + e.preventDefault(); + e.stopPropagation(); + } else if (isAtBottom) { + self.$results.scrollTop( + self.$results.get(0).scrollHeight - self.$results.height() + ); + + e.preventDefault(); + e.stopPropagation(); + } + }); + } + + this.$results.on('mouseup', '.select2-results__option[aria-selected]', + function (evt) { + var $this = $(this); + + var data = $this.data('data'); + + if ($this.attr('aria-selected') === 'true') { + if (self.options.get('multiple')) { + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } else { + self.trigger('close', {}); + } + + return; + } + + self.trigger('select', { + originalEvent: evt, + data: data + }); + }); + + this.$results.on('mouseenter', '.select2-results__option[aria-selected]', + function (evt) { + var data = $(this).data('data'); + + self.getHighlightedResults() + .removeClass('select2-results__option--highlighted'); + + self.trigger('results:focus', { + data: data, + element: $(this) + }); + }); + }; + + Results.prototype.getHighlightedResults = function () { + var $highlighted = this.$results + .find('.select2-results__option--highlighted'); + + return $highlighted; + }; + + Results.prototype.destroy = function () { + this.$results.remove(); + }; + + Results.prototype.ensureHighlightVisible = function () { + var $highlighted = this.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var $options = this.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var currentOffset = this.$results.offset().top; + var nextTop = $highlighted.offset().top; + var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); + + var offsetDelta = nextTop - currentOffset; + nextOffset -= $highlighted.outerHeight(false) * 2; + + if (currentIndex <= 2) { + this.$results.scrollTop(0); + } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { + this.$results.scrollTop(nextOffset); + } + }; + + Results.prototype.template = function (result, container) { + var template = this.options.get('templateResult'); + var escapeMarkup = this.options.get('escapeMarkup'); + + var content = template(result, container); + + if (content == null) { + container.style.display = 'none'; + } else if (typeof content === 'string') { + container.innerHTML = escapeMarkup(content); + } else { + $(container).append(content); + } + }; + + return Results; +}); + +S2.define('select2/keys',[ + +], function () { + var KEYS = { + BACKSPACE: 8, + TAB: 9, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + ESC: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + DELETE: 46 + }; + + return KEYS; +}); + +S2.define('select2/selection/base',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function BaseSelection ($element, options) { + this.$element = $element; + this.options = options; + + BaseSelection.__super__.constructor.call(this); + } + + Utils.Extend(BaseSelection, Utils.Observable); + + BaseSelection.prototype.render = function () { + var $selection = $( + '<span class="select2-selection" role="combobox" ' + + ' aria-haspopup="true" aria-expanded="false">' + + '</span>' + ); + + this._tabindex = 0; + + if (this.$element.data('old-tabindex') != null) { + this._tabindex = this.$element.data('old-tabindex'); + } else if (this.$element.attr('tabindex') != null) { + this._tabindex = this.$element.attr('tabindex'); + } + + $selection.attr('title', this.$element.attr('title')); + $selection.attr('tabindex', this._tabindex); + + this.$selection = $selection; + + return $selection; + }; + + BaseSelection.prototype.bind = function (container, $container) { + var self = this; + + var id = container.id + '-container'; + var resultsId = container.id + '-results'; + + this.container = container; + + this.$selection.on('focus', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('blur', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', function (evt) { + self.trigger('keypress', evt); + + if (evt.which === KEYS.SPACE) { + evt.preventDefault(); + } + }); + + container.on('results:focus', function (params) { + self.$selection.attr('aria-activedescendant', params.data._resultId); + }); + + container.on('selection:update', function (params) { + self.update(params.data); + }); + + container.on('open', function () { + // When the dropdown is open, aria-expanded="true" + self.$selection.attr('aria-expanded', 'true'); + self.$selection.attr('aria-owns', resultsId); + + self._attachCloseHandler(container); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expanded="false" + self.$selection.attr('aria-expanded', 'false'); + self.$selection.removeAttr('aria-activedescendant'); + self.$selection.removeAttr('aria-owns'); + + self.$selection.focus(); + + self._detachCloseHandler(container); + }); + + container.on('enable', function () { + self.$selection.attr('tabindex', self._tabindex); + }); + + container.on('disable', function () { + self.$selection.attr('tabindex', '-1'); + }); + }; + + BaseSelection.prototype._handleBlur = function (evt) { + var self = this; + + // This needs to be delayed as the active element is the body when the tab + // key is pressed, possibly along with others. + window.setTimeout(function () { + // Don't trigger `blur` if the focus is still in the selection + if ( + (document.activeElement == self.$selection[0]) || + ($.contains(self.$selection[0], document.activeElement)) + ) { + return; + } + + self.trigger('blur', evt); + }, 1); + }; + + BaseSelection.prototype._attachCloseHandler = function (container) { + var self = this; + + $(document.body).on('mousedown.select2.' + container.id, function (e) { + var $target = $(e.target); + + var $select = $target.closest('.select2'); + + var $all = $('.select2.select2-container--open'); + + $all.each(function () { + var $this = $(this); + + if (this == $select[0]) { + return; + } + + var $element = $this.data('element'); + + $element.select2('close'); + }); + }); + }; + + BaseSelection.prototype._detachCloseHandler = function (container) { + $(document.body).off('mousedown.select2.' + container.id); + }; + + BaseSelection.prototype.position = function ($selection, $container) { + var $selectionContainer = $container.find('.selection'); + $selectionContainer.append($selection); + }; + + BaseSelection.prototype.destroy = function () { + this._detachCloseHandler(this.container); + }; + + BaseSelection.prototype.update = function (data) { + throw new Error('The `update` method must be defined in child classes.'); + }; + + return BaseSelection; +}); + +S2.define('select2/selection/single',[ + 'jquery', + './base', + '../utils', + '../keys' +], function ($, BaseSelection, Utils, KEYS) { + function SingleSelection () { + SingleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(SingleSelection, BaseSelection); + + SingleSelection.prototype.render = function () { + var $selection = SingleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--single'); + + $selection.html( + '<span class="select2-selection__rendered"></span>' + + '<span class="select2-selection__arrow" role="presentation">' + + '<b role="presentation"></b>' + + '</span>' + ); + + return $selection; + }; + + SingleSelection.prototype.bind = function (container, $container) { + var self = this; + + SingleSelection.__super__.bind.apply(this, arguments); + + var id = container.id + '-container'; + + this.$selection.find('.select2-selection__rendered').attr('id', id); + this.$selection.attr('aria-labelledby', id); + + this.$selection.on('mousedown', function (evt) { + // Only respond to left clicks + if (evt.which !== 1) { + return; + } + + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on('focus', function (evt) { + // User focuses on the container + }); + + this.$selection.on('blur', function (evt) { + // User exits the container + }); + + container.on('focus', function (evt) { + if (!container.isOpen()) { + self.$selection.focus(); + } + }); + + container.on('selection:update', function (params) { + self.update(params.data); + }); + }; + + SingleSelection.prototype.clear = function () { + this.$selection.find('.select2-selection__rendered').empty(); + }; + + SingleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + SingleSelection.prototype.selectionContainer = function () { + return $('<span></span>'); + }; + + SingleSelection.prototype.update = function (data) { + if (data.length === 0) { + this.clear(); + return; + } + + var selection = data[0]; + + var $rendered = this.$selection.find('.select2-selection__rendered'); + var formatted = this.display(selection, $rendered); + + $rendered.empty().append(formatted); + $rendered.prop('title', selection.title || selection.text); + }; + + return SingleSelection; +}); + +S2.define('select2/selection/multiple',[ + 'jquery', + './base', + '../utils' +], function ($, BaseSelection, Utils) { + function MultipleSelection ($element, options) { + MultipleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(MultipleSelection, BaseSelection); + + MultipleSelection.prototype.render = function () { + var $selection = MultipleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--multiple'); + + $selection.html( + '<ul class="select2-selection__rendered"></ul>' + ); + + return $selection; + }; + + MultipleSelection.prototype.bind = function (container, $container) { + var self = this; + + MultipleSelection.__super__.bind.apply(this, arguments); + + this.$selection.on('click', function (evt) { + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on( + 'click', + '.select2-selection__choice__remove', + function (evt) { + // Ignore the event if it is disabled + if (self.options.get('disabled')) { + return; + } + + var $remove = $(this); + var $selection = $remove.parent(); + + var data = $selection.data('data'); + + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } + ); + }; + + MultipleSelection.prototype.clear = function () { + this.$selection.find('.select2-selection__rendered').empty(); + }; + + MultipleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + MultipleSelection.prototype.selectionContainer = function () { + var $container = $( + '<li class="select2-selection__choice">' + + '<span class="select2-selection__choice__remove" role="presentation">' + + '×' + + '</span>' + + '</li>' + ); + + return $container; + }; + + MultipleSelection.prototype.update = function (data) { + this.clear(); + + if (data.length === 0) { + return; + } + + var $selections = []; + + for (var d = 0; d < data.length; d++) { + var selection = data[d]; + + var $selection = this.selectionContainer(); + var formatted = this.display(selection, $selection); + + $selection.append(formatted); + $selection.prop('title', selection.title || selection.text); + + $selection.data('data', selection); + + $selections.push($selection); + } + + var $rendered = this.$selection.find('.select2-selection__rendered'); + + Utils.appendMany($rendered, $selections); + }; + + return MultipleSelection; +}); + +S2.define('select2/selection/placeholder',[ + '../utils' +], function (Utils) { + function Placeholder (decorated, $element, options) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options); + } + + Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { + var $placeholder = this.selectionContainer(); + + $placeholder.html(this.display(placeholder)); + $placeholder.addClass('select2-selection__placeholder') + .removeClass('select2-selection__choice'); + + return $placeholder; + }; + + Placeholder.prototype.update = function (decorated, data) { + var singlePlaceholder = ( + data.length == 1 && data[0].id != this.placeholder.id + ); + var multipleSelections = data.length > 1; + + if (multipleSelections || singlePlaceholder) { + return decorated.call(this, data); + } + + this.clear(); + + var $placeholder = this.createPlaceholder(this.placeholder); + + this.$selection.find('.select2-selection__rendered').append($placeholder); + }; + + return Placeholder; +}); + +S2.define('select2/selection/allowClear',[ + 'jquery', + '../keys' +], function ($, KEYS) { + function AllowClear () { } + + AllowClear.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + if (this.placeholder == null) { + if (this.options.get('debug') && window.console && console.error) { + console.error( + 'Select2: The `allowClear` option should be used in combination ' + + 'with the `placeholder` option.' + ); + } + } + + this.$selection.on('mousedown', '.select2-selection__clear', + function (evt) { + self._handleClear(evt); + }); + + container.on('keypress', function (evt) { + self._handleKeyboardClear(evt, container); + }); + }; + + AllowClear.prototype._handleClear = function (_, evt) { + // Ignore the event if it is disabled + if (this.options.get('disabled')) { + return; + } + + var $clear = this.$selection.find('.select2-selection__clear'); + + // Ignore the event if nothing has been selected + if ($clear.length === 0) { + return; + } + + evt.stopPropagation(); + + var data = $clear.data('data'); + + for (var d = 0; d < data.length; d++) { + var unselectData = { + data: data[d] + }; + + // Trigger the `unselect` event, so people can prevent it from being + // cleared. + this.trigger('unselect', unselectData); + + // If the event was prevented, don't clear it out. + if (unselectData.prevented) { + return; + } + } + + this.$element.val(this.placeholder.id).trigger('change'); + + this.trigger('toggle', {}); + }; + + AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { + if (container.isOpen()) { + return; + } + + if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { + this._handleClear(evt); + } + }; + + AllowClear.prototype.update = function (decorated, data) { + decorated.call(this, data); + + if (this.$selection.find('.select2-selection__placeholder').length > 0 || + data.length === 0) { + return; + } + + var $remove = $( + '<span class="select2-selection__clear">' + + '×' + + '</span>' + ); + $remove.data('data', data); + + this.$selection.find('.select2-selection__rendered').prepend($remove); + }; + + return AllowClear; +}); + +S2.define('select2/selection/search',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function Search (decorated, $element, options) { + decorated.call(this, $element, options); + } + + Search.prototype.render = function (decorated) { + var $search = $( + '<li class="select2-search select2-search--inline">' + + '<input class="select2-search__field" type="search" tabindex="-1"' + + ' autocomplete="off" autocorrect="off" autocapitalize="off"' + + ' spellcheck="false" role="textbox" aria-autocomplete="list" />' + + '</li>' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + var $rendered = decorated.call(this); + + this._transferTabIndex(); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('open', function () { + self.$search.trigger('focus'); + }); + + container.on('close', function () { + self.$search.val(''); + self.$search.removeAttr('aria-activedescendant'); + self.$search.trigger('focus'); + }); + + container.on('enable', function () { + self.$search.prop('disabled', false); + + self._transferTabIndex(); + }); + + container.on('disable', function () { + self.$search.prop('disabled', true); + }); + + container.on('focus', function (evt) { + self.$search.trigger('focus'); + }); + + container.on('results:focus', function (params) { + self.$search.attr('aria-activedescendant', params.id); + }); + + this.$selection.on('focusin', '.select2-search--inline', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('focusout', '.select2-search--inline', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', '.select2-search--inline', function (evt) { + evt.stopPropagation(); + + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + + var key = evt.which; + + if (key === KEYS.BACKSPACE && self.$search.val() === '') { + var $previousChoice = self.$searchContainer + .prev('.select2-selection__choice'); + + if ($previousChoice.length > 0) { + var item = $previousChoice.data('data'); + + self.searchRemoveChoice(item); + + evt.preventDefault(); + } + } + }); + + // Try to detect the IE version should the `documentMode` property that + // is stored on the document. This is only implemented in IE and is + // slightly cleaner than doing a user agent check. + // This property is not available in Edge, but Edge also doesn't have + // this bug. + var msie = document.documentMode; + var disableInputEvents = msie && msie <= 11; + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$selection.on( + 'input.searchcheck', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents) { + self.$selection.off('input.search input.searchcheck'); + return; + } + + // Unbind the duplicated `keyup` event + self.$selection.off('keyup.search'); + } + ); + + this.$selection.on( + 'keyup.search input.search', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents && evt.type === 'input') { + self.$selection.off('input.search input.searchcheck'); + return; + } + + var key = evt.which; + + // We can freely ignore events from modifier keys + if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { + return; + } + + // Tabbing will be handled during the `keydown` phase + if (key == KEYS.TAB) { + return; + } + + self.handleSearch(evt); + } + ); + }; + + /** + * This method will transfer the tabindex attribute from the rendered + * selection to the search box. This allows for the search box to be used as + * the primary focus instead of the selection container. + * + * @private + */ + Search.prototype._transferTabIndex = function (decorated) { + this.$search.attr('tabindex', this.$selection.attr('tabindex')); + this.$selection.attr('tabindex', '-1'); + }; + + Search.prototype.createPlaceholder = function (decorated, placeholder) { + this.$search.attr('placeholder', placeholder.text); + }; + + Search.prototype.update = function (decorated, data) { + var searchHadFocus = this.$search[0] == document.activeElement; + + this.$search.attr('placeholder', ''); + + decorated.call(this, data); + + this.$selection.find('.select2-selection__rendered') + .append(this.$searchContainer); + + this.resizeSearch(); + if (searchHadFocus) { + this.$search.focus(); + } + }; + + Search.prototype.handleSearch = function () { + this.resizeSearch(); + + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.searchRemoveChoice = function (decorated, item) { + this.trigger('unselect', { + data: item + }); + + this.$search.val(item.text); + this.handleSearch(); + }; + + Search.prototype.resizeSearch = function () { + this.$search.css('width', '25px'); + + var width = ''; + + if (this.$search.attr('placeholder') !== '') { + width = this.$selection.find('.select2-selection__rendered').innerWidth(); + } else { + var minimumWidth = this.$search.val().length + 1; + + width = (minimumWidth * 0.75) + 'em'; + } + + this.$search.css('width', width); + }; + + return Search; +}); + +S2.define('select2/selection/eventRelay',[ + 'jquery' +], function ($) { + function EventRelay () { } + + EventRelay.prototype.bind = function (decorated, container, $container) { + var self = this; + var relayEvents = [ + 'open', 'opening', + 'close', 'closing', + 'select', 'selecting', + 'unselect', 'unselecting' + ]; + + var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting']; + + decorated.call(this, container, $container); + + container.on('*', function (name, params) { + // Ignore events that should not be relayed + if ($.inArray(name, relayEvents) === -1) { + return; + } + + // The parameters should always be an object + params = params || {}; + + // Generate the jQuery event for the Select2 event + var evt = $.Event('select2:' + name, { + params: params + }); + + self.$element.trigger(evt); + + // Only handle preventable events if it was one + if ($.inArray(name, preventableEvents) === -1) { + return; + } + + params.prevented = evt.isDefaultPrevented(); + }); + }; + + return EventRelay; +}); + +S2.define('select2/translation',[ + 'jquery', + 'require' +], function ($, require) { + function Translation (dict) { + this.dict = dict || {}; + } + + Translation.prototype.all = function () { + return this.dict; + }; + + Translation.prototype.get = function (key) { + return this.dict[key]; + }; + + Translation.prototype.extend = function (translation) { + this.dict = $.extend({}, translation.all(), this.dict); + }; + + // Static functions + + Translation._cache = {}; + + Translation.loadPath = function (path) { + if (!(path in Translation._cache)) { + var translations = require(path); + + Translation._cache[path] = translations; + } + + return new Translation(Translation._cache[path]); + }; + + return Translation; +}); + +S2.define('select2/diacritics',[ + +], function () { + var diacritics = { + '\u24B6': 'A', + '\uFF21': 'A', + '\u00C0': 'A', + '\u00C1': 'A', + '\u00C2': 'A', + '\u1EA6': 'A', + '\u1EA4': 'A', + '\u1EAA': 'A', + '\u1EA8': 'A', + '\u00C3': 'A', + '\u0100': 'A', + '\u0102': 'A', + '\u1EB0': 'A', + '\u1EAE': 'A', + '\u1EB4': 'A', + '\u1EB2': 'A', + '\u0226': 'A', + '\u01E0': 'A', + '\u00C4': 'A', + '\u01DE': 'A', + '\u1EA2': 'A', + '\u00C5': 'A', + '\u01FA': 'A', + '\u01CD': 'A', + '\u0200': 'A', + '\u0202': 'A', + '\u1EA0': 'A', + '\u1EAC': 'A', + '\u1EB6': 'A', + '\u1E00': 'A', + '\u0104': 'A', + '\u023A': 'A', + '\u2C6F': 'A', + '\uA732': 'AA', + '\u00C6': 'AE', + '\u01FC': 'AE', + '\u01E2': 'AE', + '\uA734': 'AO', + '\uA736': 'AU', + '\uA738': 'AV', + '\uA73A': 'AV', + '\uA73C': 'AY', + '\u24B7': 'B', + '\uFF22': 'B', + '\u1E02': 'B', + '\u1E04': 'B', + '\u1E06': 'B', + '\u0243': 'B', + '\u0182': 'B', + '\u0181': 'B', + '\u24B8': 'C', + '\uFF23': 'C', + '\u0106': 'C', + '\u0108': 'C', + '\u010A': 'C', + '\u010C': 'C', + '\u00C7': 'C', + '\u1E08': 'C', + '\u0187': 'C', + '\u023B': 'C', + '\uA73E': 'C', + '\u24B9': 'D', + '\uFF24': 'D', + '\u1E0A': 'D', + '\u010E': 'D', + '\u1E0C': 'D', + '\u1E10': 'D', + '\u1E12': 'D', + '\u1E0E': 'D', + '\u0110': 'D', + '\u018B': 'D', + '\u018A': 'D', + '\u0189': 'D', + '\uA779': 'D', + '\u01F1': 'DZ', + '\u01C4': 'DZ', + '\u01F2': 'Dz', + '\u01C5': 'Dz', + '\u24BA': 'E', + '\uFF25': 'E', + '\u00C8': 'E', + '\u00C9': 'E', + '\u00CA': 'E', + '\u1EC0': 'E', + '\u1EBE': 'E', + '\u1EC4': 'E', + '\u1EC2': 'E', + '\u1EBC': 'E', + '\u0112': 'E', + '\u1E14': 'E', + '\u1E16': 'E', + '\u0114': 'E', + '\u0116': 'E', + '\u00CB': 'E', + '\u1EBA': 'E', + '\u011A': 'E', + '\u0204': 'E', + '\u0206': 'E', + '\u1EB8': 'E', + '\u1EC6': 'E', + '\u0228': 'E', + '\u1E1C': 'E', + '\u0118': 'E', + '\u1E18': 'E', + '\u1E1A': 'E', + '\u0190': 'E', + '\u018E': 'E', + '\u24BB': 'F', + '\uFF26': 'F', + '\u1E1E': 'F', + '\u0191': 'F', + '\uA77B': 'F', + '\u24BC': 'G', + '\uFF27': 'G', + '\u01F4': 'G', + '\u011C': 'G', + '\u1E20': 'G', + '\u011E': 'G', + '\u0120': 'G', + '\u01E6': 'G', + '\u0122': 'G', + '\u01E4': 'G', + '\u0193': 'G', + '\uA7A0': 'G', + '\uA77D': 'G', + '\uA77E': 'G', + '\u24BD': 'H', + '\uFF28': 'H', + '\u0124': 'H', + '\u1E22': 'H', + '\u1E26': 'H', + '\u021E': 'H', + '\u1E24': 'H', + '\u1E28': 'H', + '\u1E2A': 'H', + '\u0126': 'H', + '\u2C67': 'H', + '\u2C75': 'H', + '\uA78D': 'H', + '\u24BE': 'I', + '\uFF29': 'I', + '\u00CC': 'I', + '\u00CD': 'I', + '\u00CE': 'I', + '\u0128': 'I', + '\u012A': 'I', + '\u012C': 'I', + '\u0130': 'I', + '\u00CF': 'I', + '\u1E2E': 'I', + '\u1EC8': 'I', + '\u01CF': 'I', + '\u0208': 'I', + '\u020A': 'I', + '\u1ECA': 'I', + '\u012E': 'I', + '\u1E2C': 'I', + '\u0197': 'I', + '\u24BF': 'J', + '\uFF2A': 'J', + '\u0134': 'J', + '\u0248': 'J', + '\u24C0': 'K', + '\uFF2B': 'K', + '\u1E30': 'K', + '\u01E8': 'K', + '\u1E32': 'K', + '\u0136': 'K', + '\u1E34': 'K', + '\u0198': 'K', + '\u2C69': 'K', + '\uA740': 'K', + '\uA742': 'K', + '\uA744': 'K', + '\uA7A2': 'K', + '\u24C1': 'L', + '\uFF2C': 'L', + '\u013F': 'L', + '\u0139': 'L', + '\u013D': 'L', + '\u1E36': 'L', + '\u1E38': 'L', + '\u013B': 'L', + '\u1E3C': 'L', + '\u1E3A': 'L', + '\u0141': 'L', + '\u023D': 'L', + '\u2C62': 'L', + '\u2C60': 'L', + '\uA748': 'L', + '\uA746': 'L', + '\uA780': 'L', + '\u01C7': 'LJ', + '\u01C8': 'Lj', + '\u24C2': 'M', + '\uFF2D': 'M', + '\u1E3E': 'M', + '\u1E40': 'M', + '\u1E42': 'M', + '\u2C6E': 'M', + '\u019C': 'M', + '\u24C3': 'N', + '\uFF2E': 'N', + '\u01F8': 'N', + '\u0143': 'N', + '\u00D1': 'N', + '\u1E44': 'N', + '\u0147': 'N', + '\u1E46': 'N', + '\u0145': 'N', + '\u1E4A': 'N', + '\u1E48': 'N', + '\u0220': 'N', + '\u019D': 'N', + '\uA790': 'N', + '\uA7A4': 'N', + '\u01CA': 'NJ', + '\u01CB': 'Nj', + '\u24C4': 'O', + '\uFF2F': 'O', + '\u00D2': 'O', + '\u00D3': 'O', + '\u00D4': 'O', + '\u1ED2': 'O', + '\u1ED0': 'O', + '\u1ED6': 'O', + '\u1ED4': 'O', + '\u00D5': 'O', + '\u1E4C': 'O', + '\u022C': 'O', + '\u1E4E': 'O', + '\u014C': 'O', + '\u1E50': 'O', + '\u1E52': 'O', + '\u014E': 'O', + '\u022E': 'O', + '\u0230': 'O', + '\u00D6': 'O', + '\u022A': 'O', + '\u1ECE': 'O', + '\u0150': 'O', + '\u01D1': 'O', + '\u020C': 'O', + '\u020E': 'O', + '\u01A0': 'O', + '\u1EDC': 'O', + '\u1EDA': 'O', + '\u1EE0': 'O', + '\u1EDE': 'O', + '\u1EE2': 'O', + '\u1ECC': 'O', + '\u1ED8': 'O', + '\u01EA': 'O', + '\u01EC': 'O', + '\u00D8': 'O', + '\u01FE': 'O', + '\u0186': 'O', + '\u019F': 'O', + '\uA74A': 'O', + '\uA74C': 'O', + '\u01A2': 'OI', + '\uA74E': 'OO', + '\u0222': 'OU', + '\u24C5': 'P', + '\uFF30': 'P', + '\u1E54': 'P', + '\u1E56': 'P', + '\u01A4': 'P', + '\u2C63': 'P', + '\uA750': 'P', + '\uA752': 'P', + '\uA754': 'P', + '\u24C6': 'Q', + '\uFF31': 'Q', + '\uA756': 'Q', + '\uA758': 'Q', + '\u024A': 'Q', + '\u24C7': 'R', + '\uFF32': 'R', + '\u0154': 'R', + '\u1E58': 'R', + '\u0158': 'R', + '\u0210': 'R', + '\u0212': 'R', + '\u1E5A': 'R', + '\u1E5C': 'R', + '\u0156': 'R', + '\u1E5E': 'R', + '\u024C': 'R', + '\u2C64': 'R', + '\uA75A': 'R', + '\uA7A6': 'R', + '\uA782': 'R', + '\u24C8': 'S', + '\uFF33': 'S', + '\u1E9E': 'S', + '\u015A': 'S', + '\u1E64': 'S', + '\u015C': 'S', + '\u1E60': 'S', + '\u0160': 'S', + '\u1E66': 'S', + '\u1E62': 'S', + '\u1E68': 'S', + '\u0218': 'S', + '\u015E': 'S', + '\u2C7E': 'S', + '\uA7A8': 'S', + '\uA784': 'S', + '\u24C9': 'T', + '\uFF34': 'T', + '\u1E6A': 'T', + '\u0164': 'T', + '\u1E6C': 'T', + '\u021A': 'T', + '\u0162': 'T', + '\u1E70': 'T', + '\u1E6E': 'T', + '\u0166': 'T', + '\u01AC': 'T', + '\u01AE': 'T', + '\u023E': 'T', + '\uA786': 'T', + '\uA728': 'TZ', + '\u24CA': 'U', + '\uFF35': 'U', + '\u00D9': 'U', + '\u00DA': 'U', + '\u00DB': 'U', + '\u0168': 'U', + '\u1E78': 'U', + '\u016A': 'U', + '\u1E7A': 'U', + '\u016C': 'U', + '\u00DC': 'U', + '\u01DB': 'U', + '\u01D7': 'U', + '\u01D5': 'U', + '\u01D9': 'U', + '\u1EE6': 'U', + '\u016E': 'U', + '\u0170': 'U', + '\u01D3': 'U', + '\u0214': 'U', + '\u0216': 'U', + '\u01AF': 'U', + '\u1EEA': 'U', + '\u1EE8': 'U', + '\u1EEE': 'U', + '\u1EEC': 'U', + '\u1EF0': 'U', + '\u1EE4': 'U', + '\u1E72': 'U', + '\u0172': 'U', + '\u1E76': 'U', + '\u1E74': 'U', + '\u0244': 'U', + '\u24CB': 'V', + '\uFF36': 'V', + '\u1E7C': 'V', + '\u1E7E': 'V', + '\u01B2': 'V', + '\uA75E': 'V', + '\u0245': 'V', + '\uA760': 'VY', + '\u24CC': 'W', + '\uFF37': 'W', + '\u1E80': 'W', + '\u1E82': 'W', + '\u0174': 'W', + '\u1E86': 'W', + '\u1E84': 'W', + '\u1E88': 'W', + '\u2C72': 'W', + '\u24CD': 'X', + '\uFF38': 'X', + '\u1E8A': 'X', + '\u1E8C': 'X', + '\u24CE': 'Y', + '\uFF39': 'Y', + '\u1EF2': 'Y', + '\u00DD': 'Y', + '\u0176': 'Y', + '\u1EF8': 'Y', + '\u0232': 'Y', + '\u1E8E': 'Y', + '\u0178': 'Y', + '\u1EF6': 'Y', + '\u1EF4': 'Y', + '\u01B3': 'Y', + '\u024E': 'Y', + '\u1EFE': 'Y', + '\u24CF': 'Z', + '\uFF3A': 'Z', + '\u0179': 'Z', + '\u1E90': 'Z', + '\u017B': 'Z', + '\u017D': 'Z', + '\u1E92': 'Z', + '\u1E94': 'Z', + '\u01B5': 'Z', + '\u0224': 'Z', + '\u2C7F': 'Z', + '\u2C6B': 'Z', + '\uA762': 'Z', + '\u24D0': 'a', + '\uFF41': 'a', + '\u1E9A': 'a', + '\u00E0': 'a', + '\u00E1': 'a', + '\u00E2': 'a', + '\u1EA7': 'a', + '\u1EA5': 'a', + '\u1EAB': 'a', + '\u1EA9': 'a', + '\u00E3': 'a', + '\u0101': 'a', + '\u0103': 'a', + '\u1EB1': 'a', + '\u1EAF': 'a', + '\u1EB5': 'a', + '\u1EB3': 'a', + '\u0227': 'a', + '\u01E1': 'a', + '\u00E4': 'a', + '\u01DF': 'a', + '\u1EA3': 'a', + '\u00E5': 'a', + '\u01FB': 'a', + '\u01CE': 'a', + '\u0201': 'a', + '\u0203': 'a', + '\u1EA1': 'a', + '\u1EAD': 'a', + '\u1EB7': 'a', + '\u1E01': 'a', + '\u0105': 'a', + '\u2C65': 'a', + '\u0250': 'a', + '\uA733': 'aa', + '\u00E6': 'ae', + '\u01FD': 'ae', + '\u01E3': 'ae', + '\uA735': 'ao', + '\uA737': 'au', + '\uA739': 'av', + '\uA73B': 'av', + '\uA73D': 'ay', + '\u24D1': 'b', + '\uFF42': 'b', + '\u1E03': 'b', + '\u1E05': 'b', + '\u1E07': 'b', + '\u0180': 'b', + '\u0183': 'b', + '\u0253': 'b', + '\u24D2': 'c', + '\uFF43': 'c', + '\u0107': 'c', + '\u0109': 'c', + '\u010B': 'c', + '\u010D': 'c', + '\u00E7': 'c', + '\u1E09': 'c', + '\u0188': 'c', + '\u023C': 'c', + '\uA73F': 'c', + '\u2184': 'c', + '\u24D3': 'd', + '\uFF44': 'd', + '\u1E0B': 'd', + '\u010F': 'd', + '\u1E0D': 'd', + '\u1E11': 'd', + '\u1E13': 'd', + '\u1E0F': 'd', + '\u0111': 'd', + '\u018C': 'd', + '\u0256': 'd', + '\u0257': 'd', + '\uA77A': 'd', + '\u01F3': 'dz', + '\u01C6': 'dz', + '\u24D4': 'e', + '\uFF45': 'e', + '\u00E8': 'e', + '\u00E9': 'e', + '\u00EA': 'e', + '\u1EC1': 'e', + '\u1EBF': 'e', + '\u1EC5': 'e', + '\u1EC3': 'e', + '\u1EBD': 'e', + '\u0113': 'e', + '\u1E15': 'e', + '\u1E17': 'e', + '\u0115': 'e', + '\u0117': 'e', + '\u00EB': 'e', + '\u1EBB': 'e', + '\u011B': 'e', + '\u0205': 'e', + '\u0207': 'e', + '\u1EB9': 'e', + '\u1EC7': 'e', + '\u0229': 'e', + '\u1E1D': 'e', + '\u0119': 'e', + '\u1E19': 'e', + '\u1E1B': 'e', + '\u0247': 'e', + '\u025B': 'e', + '\u01DD': 'e', + '\u24D5': 'f', + '\uFF46': 'f', + '\u1E1F': 'f', + '\u0192': 'f', + '\uA77C': 'f', + '\u24D6': 'g', + '\uFF47': 'g', + '\u01F5': 'g', + '\u011D': 'g', + '\u1E21': 'g', + '\u011F': 'g', + '\u0121': 'g', + '\u01E7': 'g', + '\u0123': 'g', + '\u01E5': 'g', + '\u0260': 'g', + '\uA7A1': 'g', + '\u1D79': 'g', + '\uA77F': 'g', + '\u24D7': 'h', + '\uFF48': 'h', + '\u0125': 'h', + '\u1E23': 'h', + '\u1E27': 'h', + '\u021F': 'h', + '\u1E25': 'h', + '\u1E29': 'h', + '\u1E2B': 'h', + '\u1E96': 'h', + '\u0127': 'h', + '\u2C68': 'h', + '\u2C76': 'h', + '\u0265': 'h', + '\u0195': 'hv', + '\u24D8': 'i', + '\uFF49': 'i', + '\u00EC': 'i', + '\u00ED': 'i', + '\u00EE': 'i', + '\u0129': 'i', + '\u012B': 'i', + '\u012D': 'i', + '\u00EF': 'i', + '\u1E2F': 'i', + '\u1EC9': 'i', + '\u01D0': 'i', + '\u0209': 'i', + '\u020B': 'i', + '\u1ECB': 'i', + '\u012F': 'i', + '\u1E2D': 'i', + '\u0268': 'i', + '\u0131': 'i', + '\u24D9': 'j', + '\uFF4A': 'j', + '\u0135': 'j', + '\u01F0': 'j', + '\u0249': 'j', + '\u24DA': 'k', + '\uFF4B': 'k', + '\u1E31': 'k', + '\u01E9': 'k', + '\u1E33': 'k', + '\u0137': 'k', + '\u1E35': 'k', + '\u0199': 'k', + '\u2C6A': 'k', + '\uA741': 'k', + '\uA743': 'k', + '\uA745': 'k', + '\uA7A3': 'k', + '\u24DB': 'l', + '\uFF4C': 'l', + '\u0140': 'l', + '\u013A': 'l', + '\u013E': 'l', + '\u1E37': 'l', + '\u1E39': 'l', + '\u013C': 'l', + '\u1E3D': 'l', + '\u1E3B': 'l', + '\u017F': 'l', + '\u0142': 'l', + '\u019A': 'l', + '\u026B': 'l', + '\u2C61': 'l', + '\uA749': 'l', + '\uA781': 'l', + '\uA747': 'l', + '\u01C9': 'lj', + '\u24DC': 'm', + '\uFF4D': 'm', + '\u1E3F': 'm', + '\u1E41': 'm', + '\u1E43': 'm', + '\u0271': 'm', + '\u026F': 'm', + '\u24DD': 'n', + '\uFF4E': 'n', + '\u01F9': 'n', + '\u0144': 'n', + '\u00F1': 'n', + '\u1E45': 'n', + '\u0148': 'n', + '\u1E47': 'n', + '\u0146': 'n', + '\u1E4B': 'n', + '\u1E49': 'n', + '\u019E': 'n', + '\u0272': 'n', + '\u0149': 'n', + '\uA791': 'n', + '\uA7A5': 'n', + '\u01CC': 'nj', + '\u24DE': 'o', + '\uFF4F': 'o', + '\u00F2': 'o', + '\u00F3': 'o', + '\u00F4': 'o', + '\u1ED3': 'o', + '\u1ED1': 'o', + '\u1ED7': 'o', + '\u1ED5': 'o', + '\u00F5': 'o', + '\u1E4D': 'o', + '\u022D': 'o', + '\u1E4F': 'o', + '\u014D': 'o', + '\u1E51': 'o', + '\u1E53': 'o', + '\u014F': 'o', + '\u022F': 'o', + '\u0231': 'o', + '\u00F6': 'o', + '\u022B': 'o', + '\u1ECF': 'o', + '\u0151': 'o', + '\u01D2': 'o', + '\u020D': 'o', + '\u020F': 'o', + '\u01A1': 'o', + '\u1EDD': 'o', + '\u1EDB': 'o', + '\u1EE1': 'o', + '\u1EDF': 'o', + '\u1EE3': 'o', + '\u1ECD': 'o', + '\u1ED9': 'o', + '\u01EB': 'o', + '\u01ED': 'o', + '\u00F8': 'o', + '\u01FF': 'o', + '\u0254': 'o', + '\uA74B': 'o', + '\uA74D': 'o', + '\u0275': 'o', + '\u01A3': 'oi', + '\u0223': 'ou', + '\uA74F': 'oo', + '\u24DF': 'p', + '\uFF50': 'p', + '\u1E55': 'p', + '\u1E57': 'p', + '\u01A5': 'p', + '\u1D7D': 'p', + '\uA751': 'p', + '\uA753': 'p', + '\uA755': 'p', + '\u24E0': 'q', + '\uFF51': 'q', + '\u024B': 'q', + '\uA757': 'q', + '\uA759': 'q', + '\u24E1': 'r', + '\uFF52': 'r', + '\u0155': 'r', + '\u1E59': 'r', + '\u0159': 'r', + '\u0211': 'r', + '\u0213': 'r', + '\u1E5B': 'r', + '\u1E5D': 'r', + '\u0157': 'r', + '\u1E5F': 'r', + '\u024D': 'r', + '\u027D': 'r', + '\uA75B': 'r', + '\uA7A7': 'r', + '\uA783': 'r', + '\u24E2': 's', + '\uFF53': 's', + '\u00DF': 's', + '\u015B': 's', + '\u1E65': 's', + '\u015D': 's', + '\u1E61': 's', + '\u0161': 's', + '\u1E67': 's', + '\u1E63': 's', + '\u1E69': 's', + '\u0219': 's', + '\u015F': 's', + '\u023F': 's', + '\uA7A9': 's', + '\uA785': 's', + '\u1E9B': 's', + '\u24E3': 't', + '\uFF54': 't', + '\u1E6B': 't', + '\u1E97': 't', + '\u0165': 't', + '\u1E6D': 't', + '\u021B': 't', + '\u0163': 't', + '\u1E71': 't', + '\u1E6F': 't', + '\u0167': 't', + '\u01AD': 't', + '\u0288': 't', + '\u2C66': 't', + '\uA787': 't', + '\uA729': 'tz', + '\u24E4': 'u', + '\uFF55': 'u', + '\u00F9': 'u', + '\u00FA': 'u', + '\u00FB': 'u', + '\u0169': 'u', + '\u1E79': 'u', + '\u016B': 'u', + '\u1E7B': 'u', + '\u016D': 'u', + '\u00FC': 'u', + '\u01DC': 'u', + '\u01D8': 'u', + '\u01D6': 'u', + '\u01DA': 'u', + '\u1EE7': 'u', + '\u016F': 'u', + '\u0171': 'u', + '\u01D4': 'u', + '\u0215': 'u', + '\u0217': 'u', + '\u01B0': 'u', + '\u1EEB': 'u', + '\u1EE9': 'u', + '\u1EEF': 'u', + '\u1EED': 'u', + '\u1EF1': 'u', + '\u1EE5': 'u', + '\u1E73': 'u', + '\u0173': 'u', + '\u1E77': 'u', + '\u1E75': 'u', + '\u0289': 'u', + '\u24E5': 'v', + '\uFF56': 'v', + '\u1E7D': 'v', + '\u1E7F': 'v', + '\u028B': 'v', + '\uA75F': 'v', + '\u028C': 'v', + '\uA761': 'vy', + '\u24E6': 'w', + '\uFF57': 'w', + '\u1E81': 'w', + '\u1E83': 'w', + '\u0175': 'w', + '\u1E87': 'w', + '\u1E85': 'w', + '\u1E98': 'w', + '\u1E89': 'w', + '\u2C73': 'w', + '\u24E7': 'x', + '\uFF58': 'x', + '\u1E8B': 'x', + '\u1E8D': 'x', + '\u24E8': 'y', + '\uFF59': 'y', + '\u1EF3': 'y', + '\u00FD': 'y', + '\u0177': 'y', + '\u1EF9': 'y', + '\u0233': 'y', + '\u1E8F': 'y', + '\u00FF': 'y', + '\u1EF7': 'y', + '\u1E99': 'y', + '\u1EF5': 'y', + '\u01B4': 'y', + '\u024F': 'y', + '\u1EFF': 'y', + '\u24E9': 'z', + '\uFF5A': 'z', + '\u017A': 'z', + '\u1E91': 'z', + '\u017C': 'z', + '\u017E': 'z', + '\u1E93': 'z', + '\u1E95': 'z', + '\u01B6': 'z', + '\u0225': 'z', + '\u0240': 'z', + '\u2C6C': 'z', + '\uA763': 'z', + '\u0386': '\u0391', + '\u0388': '\u0395', + '\u0389': '\u0397', + '\u038A': '\u0399', + '\u03AA': '\u0399', + '\u038C': '\u039F', + '\u038E': '\u03A5', + '\u03AB': '\u03A5', + '\u038F': '\u03A9', + '\u03AC': '\u03B1', + '\u03AD': '\u03B5', + '\u03AE': '\u03B7', + '\u03AF': '\u03B9', + '\u03CA': '\u03B9', + '\u0390': '\u03B9', + '\u03CC': '\u03BF', + '\u03CD': '\u03C5', + '\u03CB': '\u03C5', + '\u03B0': '\u03C5', + '\u03C9': '\u03C9', + '\u03C2': '\u03C3' + }; + + return diacritics; +}); + +S2.define('select2/data/base',[ + '../utils' +], function (Utils) { + function BaseAdapter ($element, options) { + BaseAdapter.__super__.constructor.call(this); + } + + Utils.Extend(BaseAdapter, Utils.Observable); + + BaseAdapter.prototype.current = function (callback) { + throw new Error('The `current` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.query = function (params, callback) { + throw new Error('The `query` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.bind = function (container, $container) { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.destroy = function () { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.generateResultId = function (container, data) { + var id = container.id + '-result-'; + + id += Utils.generateChars(4); + + if (data.id != null) { + id += '-' + data.id.toString(); + } else { + id += '-' + Utils.generateChars(4); + } + return id; + }; + + return BaseAdapter; +}); + +S2.define('select2/data/select',[ + './base', + '../utils', + 'jquery' +], function (BaseAdapter, Utils, $) { + function SelectAdapter ($element, options) { + this.$element = $element; + this.options = options; + + SelectAdapter.__super__.constructor.call(this); + } + + Utils.Extend(SelectAdapter, BaseAdapter); + + SelectAdapter.prototype.current = function (callback) { + var data = []; + var self = this; + + this.$element.find(':selected').each(function () { + var $option = $(this); + + var option = self.item($option); + + data.push(option); + }); + + callback(data); + }; + + SelectAdapter.prototype.select = function (data) { + var self = this; + + data.selected = true; + + // If data.element is a DOM node, use it instead + if ($(data.element).is('option')) { + data.element.selected = true; + + this.$element.trigger('change'); + + return; + } + + if (this.$element.prop('multiple')) { + this.current(function (currentData) { + var val = []; + + data = [data]; + data.push.apply(data, currentData); + + for (var d = 0; d < data.length; d++) { + var id = data[d].id; + + if ($.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + self.$element.trigger('change'); + }); + } else { + var val = data.id; + + this.$element.val(val); + this.$element.trigger('change'); + } + }; + + SelectAdapter.prototype.unselect = function (data) { + var self = this; + + if (!this.$element.prop('multiple')) { + return; + } + + data.selected = false; + + if ($(data.element).is('option')) { + data.element.selected = false; + + this.$element.trigger('change'); + + return; + } + + this.current(function (currentData) { + var val = []; + + for (var d = 0; d < currentData.length; d++) { + var id = currentData[d].id; + + if (id !== data.id && $.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + + self.$element.trigger('change'); + }); + }; + + SelectAdapter.prototype.bind = function (container, $container) { + var self = this; + + this.container = container; + + container.on('select', function (params) { + self.select(params.data); + }); + + container.on('unselect', function (params) { + self.unselect(params.data); + }); + }; + + SelectAdapter.prototype.destroy = function () { + // Remove anything added to child elements + this.$element.find('*').each(function () { + // Remove any custom data set by Select2 + $.removeData(this, 'data'); + }); + }; + + SelectAdapter.prototype.query = function (params, callback) { + var data = []; + var self = this; + + var $options = this.$element.children(); + + $options.each(function () { + var $option = $(this); + + if (!$option.is('option') && !$option.is('optgroup')) { + return; + } + + var option = self.item($option); + + var matches = self.matches(params, option); + + if (matches !== null) { + data.push(matches); + } + }); + + callback({ + results: data + }); + }; + + SelectAdapter.prototype.addOptions = function ($options) { + Utils.appendMany(this.$element, $options); + }; + + SelectAdapter.prototype.option = function (data) { + var option; + + if (data.children) { + option = document.createElement('optgroup'); + option.label = data.text; + } else { + option = document.createElement('option'); + + if (option.textContent !== undefined) { + option.textContent = data.text; + } else { + option.innerText = data.text; + } + } + + if (data.id) { + option.value = data.id; + } + + if (data.disabled) { + option.disabled = true; + } + + if (data.selected) { + option.selected = true; + } + + if (data.title) { + option.title = data.title; + } + + var $option = $(option); + + var normalizedData = this._normalizeItem(data); + normalizedData.element = option; + + // Override the option's data with the combined data + $.data(option, 'data', normalizedData); + + return $option; + }; + + SelectAdapter.prototype.item = function ($option) { + var data = {}; + + data = $.data($option[0], 'data'); + + if (data != null) { + return data; + } + + if ($option.is('option')) { + data = { + id: $option.val(), + text: $option.text(), + disabled: $option.prop('disabled'), + selected: $option.prop('selected'), + title: $option.prop('title') + }; + } else if ($option.is('optgroup')) { + data = { + text: $option.prop('label'), + children: [], + title: $option.prop('title') + }; + + var $children = $option.children('option'); + var children = []; + + for (var c = 0; c < $children.length; c++) { + var $child = $($children[c]); + + var child = this.item($child); + + children.push(child); + } + + data.children = children; + } + + data = this._normalizeItem(data); + data.element = $option[0]; + + $.data($option[0], 'data', data); + + return data; + }; + + SelectAdapter.prototype._normalizeItem = function (item) { + if (!$.isPlainObject(item)) { + item = { + id: item, + text: item + }; + } + + item = $.extend({}, { + text: '' + }, item); + + var defaults = { + selected: false, + disabled: false + }; + + if (item.id != null) { + item.id = item.id.toString(); + } + + if (item.text != null) { + item.text = item.text.toString(); + } + + if (item._resultId == null && item.id && this.container != null) { + item._resultId = this.generateResultId(this.container, item); + } + + return $.extend({}, defaults, item); + }; + + SelectAdapter.prototype.matches = function (params, data) { + var matcher = this.options.get('matcher'); + + return matcher(params, data); + }; + + return SelectAdapter; +}); + +S2.define('select2/data/array',[ + './select', + '../utils', + 'jquery' +], function (SelectAdapter, Utils, $) { + function ArrayAdapter ($element, options) { + var data = options.get('data') || []; + + ArrayAdapter.__super__.constructor.call(this, $element, options); + + this.addOptions(this.convertToOptions(data)); + } + + Utils.Extend(ArrayAdapter, SelectAdapter); + + ArrayAdapter.prototype.select = function (data) { + var $option = this.$element.find('option').filter(function (i, elm) { + return elm.value == data.id.toString(); + }); + + if ($option.length === 0) { + $option = this.option(data); + + this.addOptions($option); + } + + ArrayAdapter.__super__.select.call(this, data); + }; + + ArrayAdapter.prototype.convertToOptions = function (data) { + var self = this; + + var $existing = this.$element.find('option'); + var existingIds = $existing.map(function () { + return self.item($(this)).id; + }).get(); + + var $options = []; + + // Filter out all items except for the one passed in the argument + function onlyItem (item) { + return function () { + return $(this).val() == item.id; + }; + } + + for (var d = 0; d < data.length; d++) { + var item = this._normalizeItem(data[d]); + + // Skip items which were pre-loaded, only merge the data + if ($.inArray(item.id, existingIds) >= 0) { + var $existingOption = $existing.filter(onlyItem(item)); + + var existingData = this.item($existingOption); + var newData = $.extend(true, {}, item, existingData); + + var $newOption = this.option(newData); + + $existingOption.replaceWith($newOption); + + continue; + } + + var $option = this.option(item); + + if (item.children) { + var $children = this.convertToOptions(item.children); + + Utils.appendMany($option, $children); + } + + $options.push($option); + } + + return $options; + }; + + return ArrayAdapter; +}); + +S2.define('select2/data/ajax',[ + './array', + '../utils', + 'jquery' +], function (ArrayAdapter, Utils, $) { + function AjaxAdapter ($element, options) { + this.ajaxOptions = this._applyDefaults(options.get('ajax')); + + if (this.ajaxOptions.processResults != null) { + this.processResults = this.ajaxOptions.processResults; + } + + AjaxAdapter.__super__.constructor.call(this, $element, options); + } + + Utils.Extend(AjaxAdapter, ArrayAdapter); + + AjaxAdapter.prototype._applyDefaults = function (options) { + var defaults = { + data: function (params) { + return $.extend({}, params, { + q: params.term + }); + }, + transport: function (params, success, failure) { + var $request = $.ajax(params); + + $request.then(success); + $request.fail(failure); + + return $request; + } + }; + + return $.extend({}, defaults, options, true); + }; + + AjaxAdapter.prototype.processResults = function (results) { + return results; + }; + + AjaxAdapter.prototype.query = function (params, callback) { + var matches = []; + var self = this; + + if (this._request != null) { + // JSONP requests cannot always be aborted + if ($.isFunction(this._request.abort)) { + this._request.abort(); + } + + this._request = null; + } + + var options = $.extend({ + type: 'GET' + }, this.ajaxOptions); + + if (typeof options.url === 'function') { + options.url = options.url.call(this.$element, params); + } + + if (typeof options.data === 'function') { + options.data = options.data.call(this.$element, params); + } + + function request () { + var $request = options.transport(options, function (data) { + var results = self.processResults(data, params); + + if (self.options.get('debug') && window.console && console.error) { + // Check to make sure that the response included a `results` key. + if (!results || !results.results || !$.isArray(results.results)) { + console.error( + 'Select2: The AJAX results did not return an array in the ' + + '`results` key of the response.' + ); + } + } + + callback(results); + }, function () { + // Attempt to detect if a request was aborted + // Only works if the transport exposes a status property + if ($request.status && $request.status === '0') { + return; + } + + self.trigger('results:message', { + message: 'errorLoading' + }); + }); + + self._request = $request; + } + + if (this.ajaxOptions.delay && params.term != null) { + if (this._queryTimeout) { + window.clearTimeout(this._queryTimeout); + } + + this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); + } else { + request(); + } + }; + + return AjaxAdapter; +}); + +S2.define('select2/data/tags',[ + 'jquery' +], function ($) { + function Tags (decorated, $element, options) { + var tags = options.get('tags'); + + var createTag = options.get('createTag'); + + if (createTag !== undefined) { + this.createTag = createTag; + } + + var insertTag = options.get('insertTag'); + + if (insertTag !== undefined) { + this.insertTag = insertTag; + } + + decorated.call(this, $element, options); + + if ($.isArray(tags)) { + for (var t = 0; t < tags.length; t++) { + var tag = tags[t]; + var item = this._normalizeItem(tag); + + var $option = this.option(item); + + this.$element.append($option); + } + } + } + + Tags.prototype.query = function (decorated, params, callback) { + var self = this; + + this._removeOldTags(); + + if (params.term == null || params.page != null) { + decorated.call(this, params, callback); + return; + } + + function wrapper (obj, child) { + var data = obj.results; + + for (var i = 0; i < data.length; i++) { + var option = data[i]; + + var checkChildren = ( + option.children != null && + !wrapper({ + results: option.children + }, true) + ); + + var checkText = option.text === params.term; + + if (checkText || checkChildren) { + if (child) { + return false; + } + + obj.data = data; + callback(obj); + + return; + } + } + + if (child) { + return true; + } + + var tag = self.createTag(params); + + if (tag != null) { + var $option = self.option(tag); + $option.attr('data-select2-tag', true); + + self.addOptions([$option]); + + self.insertTag(data, tag); + } + + obj.results = data; + + callback(obj); + } + + decorated.call(this, params, wrapper); + }; + + Tags.prototype.createTag = function (decorated, params) { + var term = $.trim(params.term); + + if (term === '') { + return null; + } + + return { + id: term, + text: term + }; + }; + + Tags.prototype.insertTag = function (_, data, tag) { + data.unshift(tag); + }; + + Tags.prototype._removeOldTags = function (_) { + var tag = this._lastTag; + + var $options = this.$element.find('option[data-select2-tag]'); + + $options.each(function () { + if (this.selected) { + return; + } + + $(this).remove(); + }); + }; + + return Tags; +}); + +S2.define('select2/data/tokenizer',[ + 'jquery' +], function ($) { + function Tokenizer (decorated, $element, options) { + var tokenizer = options.get('tokenizer'); + + if (tokenizer !== undefined) { + this.tokenizer = tokenizer; + } + + decorated.call(this, $element, options); + } + + Tokenizer.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + this.$search = container.dropdown.$search || container.selection.$search || + $container.find('.select2-search__field'); + }; + + Tokenizer.prototype.query = function (decorated, params, callback) { + var self = this; + + function createAndSelect (data) { + // Normalize the data object so we can use it for checks + var item = self._normalizeItem(data); + + // Check if the data object already exists as a tag + // Select it if it doesn't + var $existingOptions = self.$element.find('option').filter(function () { + return $(this).val() === item.id; + }); + + // If an existing option wasn't found for it, create the option + if (!$existingOptions.length) { + var $option = self.option(item); + $option.attr('data-select2-tag', true); + + self._removeOldTags(); + self.addOptions([$option]); + } + + // Select the item, now that we know there is an option for it + select(item); + } + + function select (data) { + self.trigger('select', { + data: data + }); + } + + params.term = params.term || ''; + + var tokenData = this.tokenizer(params, this.options, createAndSelect); + + if (tokenData.term !== params.term) { + // Replace the search term if we have the search box + if (this.$search.length) { + this.$search.val(tokenData.term); + this.$search.focus(); + } + + params.term = tokenData.term; + } + + decorated.call(this, params, callback); + }; + + Tokenizer.prototype.tokenizer = function (_, params, options, callback) { + var separators = options.get('tokenSeparators') || []; + var term = params.term; + var i = 0; + + var createTag = this.createTag || function (params) { + return { + id: params.term, + text: params.term + }; + }; + + while (i < term.length) { + var termChar = term[i]; + + if ($.inArray(termChar, separators) === -1) { + i++; + + continue; + } + + var part = term.substr(0, i); + var partParams = $.extend({}, params, { + term: part + }); + + var data = createTag(partParams); + + if (data == null) { + i++; + continue; + } + + callback(data); + + // Reset the term to not include the tokenized portion + term = term.substr(i + 1) || ''; + i = 0; + } + + return { + term: term + }; + }; + + return Tokenizer; +}); + +S2.define('select2/data/minimumInputLength',[ + +], function () { + function MinimumInputLength (decorated, $e, options) { + this.minimumInputLength = options.get('minimumInputLength'); + + decorated.call(this, $e, options); + } + + MinimumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (params.term.length < this.minimumInputLength) { + this.trigger('results:message', { + message: 'inputTooShort', + args: { + minimum: this.minimumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MinimumInputLength; +}); + +S2.define('select2/data/maximumInputLength',[ + +], function () { + function MaximumInputLength (decorated, $e, options) { + this.maximumInputLength = options.get('maximumInputLength'); + + decorated.call(this, $e, options); + } + + MaximumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (this.maximumInputLength > 0 && + params.term.length > this.maximumInputLength) { + this.trigger('results:message', { + message: 'inputTooLong', + args: { + maximum: this.maximumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MaximumInputLength; +}); + +S2.define('select2/data/maximumSelectionLength',[ + +], function (){ + function MaximumSelectionLength (decorated, $e, options) { + this.maximumSelectionLength = options.get('maximumSelectionLength'); + + decorated.call(this, $e, options); + } + + MaximumSelectionLength.prototype.query = + function (decorated, params, callback) { + var self = this; + + this.current(function (currentData) { + var count = currentData != null ? currentData.length : 0; + if (self.maximumSelectionLength > 0 && + count >= self.maximumSelectionLength) { + self.trigger('results:message', { + message: 'maximumSelected', + args: { + maximum: self.maximumSelectionLength + } + }); + return; + } + decorated.call(self, params, callback); + }); + }; + + return MaximumSelectionLength; +}); + +S2.define('select2/dropdown',[ + 'jquery', + './utils' +], function ($, Utils) { + function Dropdown ($element, options) { + this.$element = $element; + this.options = options; + + Dropdown.__super__.constructor.call(this); + } + + Utils.Extend(Dropdown, Utils.Observable); + + Dropdown.prototype.render = function () { + var $dropdown = $( + '<span class="select2-dropdown">' + + '<span class="select2-results"></span>' + + '</span>' + ); + + $dropdown.attr('dir', this.options.get('dir')); + + this.$dropdown = $dropdown; + + return $dropdown; + }; + + Dropdown.prototype.bind = function () { + // Should be implemented in subclasses + }; + + Dropdown.prototype.position = function ($dropdown, $container) { + // Should be implmented in subclasses + }; + + Dropdown.prototype.destroy = function () { + // Remove the dropdown from the DOM + this.$dropdown.remove(); + }; + + return Dropdown; +}); + +S2.define('select2/dropdown/search',[ + 'jquery', + '../utils' +], function ($, Utils) { + function Search () { } + + Search.prototype.render = function (decorated) { + var $rendered = decorated.call(this); + + var $search = $( + '<span class="select2-search select2-search--dropdown">' + + '<input class="select2-search__field" type="search" tabindex="-1"' + + ' autocomplete="off" autocorrect="off" autocapitalize="off"' + + ' spellcheck="false" role="textbox" />' + + '</span>' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + $rendered.prepend($search); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + this.$search.on('keydown', function (evt) { + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + }); + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$search.on('input', function (evt) { + // Unbind the duplicated `keyup` event + $(this).off('keyup'); + }); + + this.$search.on('keyup input', function (evt) { + self.handleSearch(evt); + }); + + container.on('open', function () { + self.$search.attr('tabindex', 0); + + self.$search.focus(); + + window.setTimeout(function () { + self.$search.focus(); + }, 0); + }); + + container.on('close', function () { + self.$search.attr('tabindex', -1); + + self.$search.val(''); + }); + + container.on('focus', function () { + if (container.isOpen()) { + self.$search.focus(); + } + }); + + container.on('results:all', function (params) { + if (params.query.term == null || params.query.term === '') { + var showSearch = self.showSearch(params); + + if (showSearch) { + self.$searchContainer.removeClass('select2-search--hide'); + } else { + self.$searchContainer.addClass('select2-search--hide'); + } + } + }); + }; + + Search.prototype.handleSearch = function (evt) { + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.showSearch = function (_, params) { + return true; + }; + + return Search; +}); + +S2.define('select2/dropdown/hidePlaceholder',[ + +], function () { + function HidePlaceholder (decorated, $element, options, dataAdapter) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options, dataAdapter); + } + + HidePlaceholder.prototype.append = function (decorated, data) { + data.results = this.removePlaceholder(data.results); + + decorated.call(this, data); + }; + + HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + HidePlaceholder.prototype.removePlaceholder = function (_, data) { + var modifiedData = data.slice(0); + + for (var d = data.length - 1; d >= 0; d--) { + var item = data[d]; + + if (this.placeholder.id === item.id) { + modifiedData.splice(d, 1); + } + } + + return modifiedData; + }; + + return HidePlaceholder; +}); + +S2.define('select2/dropdown/infiniteScroll',[ + 'jquery' +], function ($) { + function InfiniteScroll (decorated, $element, options, dataAdapter) { + this.lastParams = {}; + + decorated.call(this, $element, options, dataAdapter); + + this.$loadingMore = this.createLoadingMore(); + this.loading = false; + } + + InfiniteScroll.prototype.append = function (decorated, data) { + this.$loadingMore.remove(); + this.loading = false; + + decorated.call(this, data); + + if (this.showLoadingMore(data)) { + this.$results.append(this.$loadingMore); + } + }; + + InfiniteScroll.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('query', function (params) { + self.lastParams = params; + self.loading = true; + }); + + container.on('query:append', function (params) { + self.lastParams = params; + self.loading = true; + }); + + this.$results.on('scroll', function () { + var isLoadMoreVisible = $.contains( + document.documentElement, + self.$loadingMore[0] + ); + + if (self.loading || !isLoadMoreVisible) { + return; + } + + var currentOffset = self.$results.offset().top + + self.$results.outerHeight(false); + var loadingMoreOffset = self.$loadingMore.offset().top + + self.$loadingMore.outerHeight(false); + + if (currentOffset + 50 >= loadingMoreOffset) { + self.loadMore(); + } + }); + }; + + InfiniteScroll.prototype.loadMore = function () { + this.loading = true; + + var params = $.extend({}, {page: 1}, this.lastParams); + + params.page++; + + this.trigger('query:append', params); + }; + + InfiniteScroll.prototype.showLoadingMore = function (_, data) { + return data.pagination && data.pagination.more; + }; + + InfiniteScroll.prototype.createLoadingMore = function () { + var $option = $( + '<li ' + + 'class="select2-results__option select2-results__option--load-more"' + + 'role="treeitem" aria-disabled="true"></li>' + ); + + var message = this.options.get('translations').get('loadingMore'); + + $option.html(message(this.lastParams)); + + return $option; + }; + + return InfiniteScroll; +}); + +S2.define('select2/dropdown/attachBody',[ + 'jquery', + '../utils' +], function ($, Utils) { + function AttachBody (decorated, $element, options) { + this.$dropdownParent = options.get('dropdownParent') || $(document.body); + + decorated.call(this, $element, options); + } + + AttachBody.prototype.bind = function (decorated, container, $container) { + var self = this; + + var setupResultsEvents = false; + + decorated.call(this, container, $container); + + container.on('open', function () { + self._showDropdown(); + self._attachPositioningHandler(container); + + if (!setupResultsEvents) { + setupResultsEvents = true; + + container.on('results:all', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('results:append', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + } + }); + + container.on('close', function () { + self._hideDropdown(); + self._detachPositioningHandler(container); + }); + + this.$dropdownContainer.on('mousedown', function (evt) { + evt.stopPropagation(); + }); + }; + + AttachBody.prototype.destroy = function (decorated) { + decorated.call(this); + + this.$dropdownContainer.remove(); + }; + + AttachBody.prototype.position = function (decorated, $dropdown, $container) { + // Clone all of the container classes + $dropdown.attr('class', $container.attr('class')); + + $dropdown.removeClass('select2'); + $dropdown.addClass('select2-container--open'); + + $dropdown.css({ + position: 'absolute', + top: -999999 + }); + + this.$container = $container; + }; + + AttachBody.prototype.render = function (decorated) { + var $container = $('<span></span>'); + + var $dropdown = decorated.call(this); + $container.append($dropdown); + + this.$dropdownContainer = $container; + + return $container; + }; + + AttachBody.prototype._hideDropdown = function (decorated) { + this.$dropdownContainer.detach(); + }; + + AttachBody.prototype._attachPositioningHandler = + function (decorated, container) { + var self = this; + + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.each(function () { + $(this).data('select2-scroll-position', { + x: $(this).scrollLeft(), + y: $(this).scrollTop() + }); + }); + + $watchers.on(scrollEvent, function (ev) { + var position = $(this).data('select2-scroll-position'); + $(this).scrollTop(position.y); + }); + + $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, + function (e) { + self._positionDropdown(); + self._resizeDropdown(); + }); + }; + + AttachBody.prototype._detachPositioningHandler = + function (decorated, container) { + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.off(scrollEvent); + + $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); + }; + + AttachBody.prototype._positionDropdown = function () { + var $window = $(window); + + var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above'); + var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below'); + + var newDirection = null; + + var offset = this.$container.offset(); + + offset.bottom = offset.top + this.$container.outerHeight(false); + + var container = { + height: this.$container.outerHeight(false) + }; + + container.top = offset.top; + container.bottom = offset.top + container.height; + + var dropdown = { + height: this.$dropdown.outerHeight(false) + }; + + var viewport = { + top: $window.scrollTop(), + bottom: $window.scrollTop() + $window.height() + }; + + var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); + var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); + + var css = { + left: offset.left, + top: container.bottom + }; + + // Determine what the parent element is to use for calciulating the offset + var $offsetParent = this.$dropdownParent; + + // For statically positoned elements, we need to get the element + // that is determining the offset + if ($offsetParent.css('position') === 'static') { + $offsetParent = $offsetParent.offsetParent(); + } + + var parentOffset = $offsetParent.offset(); + + css.top -= parentOffset.top; + css.left -= parentOffset.left; + + if (!isCurrentlyAbove && !isCurrentlyBelow) { + newDirection = 'below'; + } + + if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { + newDirection = 'above'; + } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { + newDirection = 'below'; + } + + if (newDirection == 'above' || + (isCurrentlyAbove && newDirection !== 'below')) { + css.top = container.top - parentOffset.top - dropdown.height; + } + + if (newDirection != null) { + this.$dropdown + .removeClass('select2-dropdown--below select2-dropdown--above') + .addClass('select2-dropdown--' + newDirection); + this.$container + .removeClass('select2-container--below select2-container--above') + .addClass('select2-container--' + newDirection); + } + + this.$dropdownContainer.css(css); + }; + + AttachBody.prototype._resizeDropdown = function () { + var css = { + width: this.$container.outerWidth(false) + 'px' + }; + + if (this.options.get('dropdownAutoWidth')) { + css.minWidth = css.width; + css.position = 'relative'; + css.width = 'auto'; + } + + this.$dropdown.css(css); + }; + + AttachBody.prototype._showDropdown = function (decorated) { + this.$dropdownContainer.appendTo(this.$dropdownParent); + + this._positionDropdown(); + this._resizeDropdown(); + }; + + return AttachBody; +}); + +S2.define('select2/dropdown/minimumResultsForSearch',[ + +], function () { + function countResults (data) { + var count = 0; + + for (var d = 0; d < data.length; d++) { + var item = data[d]; + + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + } + + return count; + } + + function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { + this.minimumResultsForSearch = options.get('minimumResultsForSearch'); + + if (this.minimumResultsForSearch < 0) { + this.minimumResultsForSearch = Infinity; + } + + decorated.call(this, $element, options, dataAdapter); + } + + MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { + return false; + } + + return decorated.call(this, params); + }; + + return MinimumResultsForSearch; +}); + +S2.define('select2/dropdown/selectOnClose',[ + +], function () { + function SelectOnClose () { } + + SelectOnClose.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('close', function (params) { + self._handleSelectOnClose(params); + }); + }; + + SelectOnClose.prototype._handleSelectOnClose = function (_, params) { + if (params && params.originalSelect2Event != null) { + var event = params.originalSelect2Event; + + // Don't select an item if the close event was triggered from a select or + // unselect event + if (event._type === 'select' || event._type === 'unselect') { + return; + } + } + + var $highlightedResults = this.getHighlightedResults(); + + // Only select highlighted results + if ($highlightedResults.length < 1) { + return; + } + + var data = $highlightedResults.data('data'); + + // Don't re-select already selected resulte + if ( + (data.element != null && data.element.selected) || + (data.element == null && data.selected) + ) { + return; + } + + this.trigger('select', { + data: data + }); + }; + + return SelectOnClose; +}); + +S2.define('select2/dropdown/closeOnSelect',[ + +], function () { + function CloseOnSelect () { } + + CloseOnSelect.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('select', function (evt) { + self._selectTriggered(evt); + }); + + container.on('unselect', function (evt) { + self._selectTriggered(evt); + }); + }; + + CloseOnSelect.prototype._selectTriggered = function (_, evt) { + var originalEvent = evt.originalEvent; + + // Don't close if the control key is being held + if (originalEvent && originalEvent.ctrlKey) { + return; + } + + this.trigger('close', { + originalEvent: originalEvent, + originalSelect2Event: evt + }); + }; + + return CloseOnSelect; +}); + +S2.define('select2/i18n/en',[],function () { + // English + return { + errorLoading: function () { + return 'The results could not be loaded.'; + }, + inputTooLong: function (args) { + var overChars = args.input.length - args.maximum; + + var message = 'Please delete ' + overChars + ' character'; + + if (overChars != 1) { + message += 's'; + } + + return message; + }, + inputTooShort: function (args) { + var remainingChars = args.minimum - args.input.length; + + var message = 'Please enter ' + remainingChars + ' or more characters'; + + return message; + }, + loadingMore: function () { + return 'Loading more results…'; + }, + maximumSelected: function (args) { + var message = 'You can only select ' + args.maximum + ' item'; + + if (args.maximum != 1) { + message += 's'; + } + + return message; + }, + noResults: function () { + return 'No results found'; + }, + searching: function () { + return 'Searching…'; + } + }; +}); + +S2.define('select2/defaults',[ + 'jquery', + 'require', + + './results', + + './selection/single', + './selection/multiple', + './selection/placeholder', + './selection/allowClear', + './selection/search', + './selection/eventRelay', + + './utils', + './translation', + './diacritics', + + './data/select', + './data/array', + './data/ajax', + './data/tags', + './data/tokenizer', + './data/minimumInputLength', + './data/maximumInputLength', + './data/maximumSelectionLength', + + './dropdown', + './dropdown/search', + './dropdown/hidePlaceholder', + './dropdown/infiniteScroll', + './dropdown/attachBody', + './dropdown/minimumResultsForSearch', + './dropdown/selectOnClose', + './dropdown/closeOnSelect', + + './i18n/en' +], function ($, require, + + ResultsList, + + SingleSelection, MultipleSelection, Placeholder, AllowClear, + SelectionSearch, EventRelay, + + Utils, Translation, DIACRITICS, + + SelectData, ArrayData, AjaxData, Tags, Tokenizer, + MinimumInputLength, MaximumInputLength, MaximumSelectionLength, + + Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, + AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, + + EnglishTranslation) { + function Defaults () { + this.reset(); + } + + Defaults.prototype.apply = function (options) { + options = $.extend(true, {}, this.defaults, options); + + if (options.dataAdapter == null) { + if (options.ajax != null) { + options.dataAdapter = AjaxData; + } else if (options.data != null) { + options.dataAdapter = ArrayData; + } else { + options.dataAdapter = SelectData; + } + + if (options.minimumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MinimumInputLength + ); + } + + if (options.maximumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumInputLength + ); + } + + if (options.maximumSelectionLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumSelectionLength + ); + } + + if (options.tags) { + options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); + } + + if (options.tokenSeparators != null || options.tokenizer != null) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Tokenizer + ); + } + + if (options.query != null) { + var Query = require(options.amdBase + 'compat/query'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); + } + + if (options.initSelection != null) { + var InitSelection = require(options.amdBase + 'compat/initSelection'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); + } + } + + if (options.resultsAdapter == null) { + options.resultsAdapter = ResultsList; + + if (options.ajax != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + InfiniteScroll + ); + } + + if (options.placeholder != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + HidePlaceholder + ); + } + + if (options.selectOnClose) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + SelectOnClose + ); + } + } + + if (options.dropdownAdapter == null) { + if (options.multiple) { + options.dropdownAdapter = Dropdown; + } else { + var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); + + options.dropdownAdapter = SearchableDropdown; + } + + if (options.minimumResultsForSearch !== 0) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + MinimumResultsForSearch + ); + } + + if (options.closeOnSelect) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + CloseOnSelect + ); + } + + if ( + options.dropdownCssClass != null || + options.dropdownCss != null || + options.adaptDropdownCssClass != null + ) { + var DropdownCSS = require(options.amdBase + 'compat/dropdownCss'); + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + DropdownCSS + ); + } + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + AttachBody + ); + } + + if (options.selectionAdapter == null) { + if (options.multiple) { + options.selectionAdapter = MultipleSelection; + } else { + options.selectionAdapter = SingleSelection; + } + + // Add the placeholder mixin if a placeholder was specified + if (options.placeholder != null) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + Placeholder + ); + } + + if (options.allowClear) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + AllowClear + ); + } + + if (options.multiple) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + SelectionSearch + ); + } + + if ( + options.containerCssClass != null || + options.containerCss != null || + options.adaptContainerCssClass != null + ) { + var ContainerCSS = require(options.amdBase + 'compat/containerCss'); + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + ContainerCSS + ); + } + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + EventRelay + ); + } + + if (typeof options.language === 'string') { + // Check if the language is specified with a region + if (options.language.indexOf('-') > 0) { + // Extract the region information if it is included + var languageParts = options.language.split('-'); + var baseLanguage = languageParts[0]; + + options.language = [options.language, baseLanguage]; + } else { + options.language = [options.language]; + } + } + + if ($.isArray(options.language)) { + var languages = new Translation(); + options.language.push('en'); + + var languageNames = options.language; + + for (var l = 0; l < languageNames.length; l++) { + var name = languageNames[l]; + var language = {}; + + try { + // Try to load it with the original name + language = Translation.loadPath(name); + } catch (e) { + try { + // If we couldn't load it, check if it wasn't the full path + name = this.defaults.amdLanguageBase + name; + language = Translation.loadPath(name); + } catch (ex) { + // The translation could not be loaded at all. Sometimes this is + // because of a configuration problem, other times this can be + // because of how Select2 helps load all possible translation files. + if (options.debug && window.console && console.warn) { + console.warn( + 'Select2: The language file for "' + name + '" could not be ' + + 'automatically loaded. A fallback will be used instead.' + ); + } + + continue; + } + } + + languages.extend(language); + } + + options.translations = languages; + } else { + var baseTranslation = Translation.loadPath( + this.defaults.amdLanguageBase + 'en' + ); + var customTranslation = new Translation(options.language); + + customTranslation.extend(baseTranslation); + + options.translations = customTranslation; + } + + return options; + }; + + Defaults.prototype.reset = function () { + function stripDiacritics (text) { + // Used 'uni range + named function' from http://jsperf.com/diacritics/18 + function match(a) { + return DIACRITICS[a] || a; + } + + return text.replace(/[^\u0000-\u007E]/g, match); + } + + function matcher (params, data) { + // Always return the object if there is nothing to compare + if ($.trim(params.term) === '') { + return data; + } + + // Do a recursive check for options with children + if (data.children && data.children.length > 0) { + // Clone the data object if there are children + // This is required as we modify the object to remove any non-matches + var match = $.extend(true, {}, data); + + // Check each child of the option + for (var c = data.children.length - 1; c >= 0; c--) { + var child = data.children[c]; + + var matches = matcher(params, child); + + // If there wasn't a match, remove the object in the array + if (matches == null) { + match.children.splice(c, 1); + } + } + + // If any children matched, return the new object + if (match.children.length > 0) { + return match; + } + + // If there were no matching children, check just the plain object + return matcher(params, match); + } + + var original = stripDiacritics(data.text).toUpperCase(); + var term = stripDiacritics(params.term).toUpperCase(); + + // Check if the text contains the term + if (original.indexOf(term) > -1) { + return data; + } + + // If it doesn't contain the term, don't return anything + return null; + } + + this.defaults = { + amdBase: './', + amdLanguageBase: './i18n/', + closeOnSelect: true, + debug: false, + dropdownAutoWidth: false, + escapeMarkup: Utils.escapeMarkup, + language: EnglishTranslation, + matcher: matcher, + minimumInputLength: 0, + maximumInputLength: 0, + maximumSelectionLength: 0, + minimumResultsForSearch: 0, + selectOnClose: false, + sorter: function (data) { + return data; + }, + templateResult: function (result) { + return result.text; + }, + templateSelection: function (selection) { + return selection.text; + }, + theme: 'default', + width: 'resolve' + }; + }; + + Defaults.prototype.set = function (key, value) { + var camelKey = $.camelCase(key); + + var data = {}; + data[camelKey] = value; + + var convertedData = Utils._convertData(data); + + $.extend(this.defaults, convertedData); + }; + + var defaults = new Defaults(); + + return defaults; +}); + +S2.define('select2/options',[ + 'require', + 'jquery', + './defaults', + './utils' +], function (require, $, Defaults, Utils) { + function Options (options, $element) { + this.options = options; + + if ($element != null) { + this.fromElement($element); + } + + this.options = Defaults.apply(this.options); + + if ($element && $element.is('input')) { + var InputCompat = require(this.get('amdBase') + 'compat/inputData'); + + this.options.dataAdapter = Utils.Decorate( + this.options.dataAdapter, + InputCompat + ); + } + } + + Options.prototype.fromElement = function ($e) { + var excludedData = ['select2']; + + if (this.options.multiple == null) { + this.options.multiple = $e.prop('multiple'); + } + + if (this.options.disabled == null) { + this.options.disabled = $e.prop('disabled'); + } + + if (this.options.language == null) { + if ($e.prop('lang')) { + this.options.language = $e.prop('lang').toLowerCase(); + } else if ($e.closest('[lang]').prop('lang')) { + this.options.language = $e.closest('[lang]').prop('lang'); + } + } + + if (this.options.dir == null) { + if ($e.prop('dir')) { + this.options.dir = $e.prop('dir'); + } else if ($e.closest('[dir]').prop('dir')) { + this.options.dir = $e.closest('[dir]').prop('dir'); + } else { + this.options.dir = 'ltr'; + } + } + + $e.prop('disabled', this.options.disabled); + $e.prop('multiple', this.options.multiple); + + if ($e.data('select2Tags')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-select2-tags` attribute has been changed to ' + + 'use the `data-data` and `data-tags="true"` attributes and will be ' + + 'removed in future versions of Select2.' + ); + } + + $e.data('data', $e.data('select2Tags')); + $e.data('tags', true); + } + + if ($e.data('ajaxUrl')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-ajax-url` attribute has been changed to ' + + '`data-ajax--url` and support for the old attribute will be removed' + + ' in future versions of Select2.' + ); + } + + $e.attr('ajax--url', $e.data('ajaxUrl')); + $e.data('ajax--url', $e.data('ajaxUrl')); + } + + var dataset = {}; + + // Prefer the element's `dataset` attribute if it exists + // jQuery 1.x does not correctly handle data attributes with multiple dashes + if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { + dataset = $.extend(true, {}, $e[0].dataset, $e.data()); + } else { + dataset = $e.data(); + } + + var data = $.extend(true, {}, dataset); + + data = Utils._convertData(data); + + for (var key in data) { + if ($.inArray(key, excludedData) > -1) { + continue; + } + + if ($.isPlainObject(this.options[key])) { + $.extend(this.options[key], data[key]); + } else { + this.options[key] = data[key]; + } + } + + return this; + }; + + Options.prototype.get = function (key) { + return this.options[key]; + }; + + Options.prototype.set = function (key, val) { + this.options[key] = val; + }; + + return Options; +}); + +S2.define('select2/core',[ + 'jquery', + './options', + './utils', + './keys' +], function ($, Options, Utils, KEYS) { + var Select2 = function ($element, options) { + if ($element.data('select2') != null) { + $element.data('select2').destroy(); + } + + this.$element = $element; + + this.id = this._generateId($element); + + options = options || {}; + + this.options = new Options(options, $element); + + Select2.__super__.constructor.call(this); + + // Set up the tabindex + + var tabindex = $element.attr('tabindex') || 0; + $element.data('old-tabindex', tabindex); + $element.attr('tabindex', '-1'); + + // Set up containers and adapters + + var DataAdapter = this.options.get('dataAdapter'); + this.dataAdapter = new DataAdapter($element, this.options); + + var $container = this.render(); + + this._placeContainer($container); + + var SelectionAdapter = this.options.get('selectionAdapter'); + this.selection = new SelectionAdapter($element, this.options); + this.$selection = this.selection.render(); + + this.selection.position(this.$selection, $container); + + var DropdownAdapter = this.options.get('dropdownAdapter'); + this.dropdown = new DropdownAdapter($element, this.options); + this.$dropdown = this.dropdown.render(); + + this.dropdown.position(this.$dropdown, $container); + + var ResultsAdapter = this.options.get('resultsAdapter'); + this.results = new ResultsAdapter($element, this.options, this.dataAdapter); + this.$results = this.results.render(); + + this.results.position(this.$results, this.$dropdown); + + // Bind events + + var self = this; + + // Bind the container to all of the adapters + this._bindAdapters(); + + // Register any DOM event handlers + this._registerDomEvents(); + + // Register any internal event handlers + this._registerDataEvents(); + this._registerSelectionEvents(); + this._registerDropdownEvents(); + this._registerResultsEvents(); + this._registerEvents(); + + // Set the initial state + this.dataAdapter.current(function (initialData) { + self.trigger('selection:update', { + data: initialData + }); + }); + + // Hide the original select + $element.addClass('select2-hidden-accessible'); + $element.attr('aria-hidden', 'true'); + + // Synchronize any monitored attributes + this._syncAttributes(); + + $element.data('select2', this); + }; + + Utils.Extend(Select2, Utils.Observable); + + Select2.prototype._generateId = function ($element) { + var id = ''; + + if ($element.attr('id') != null) { + id = $element.attr('id'); + } else if ($element.attr('name') != null) { + id = $element.attr('name') + '-' + Utils.generateChars(2); + } else { + id = Utils.generateChars(4); + } + + id = id.replace(/(:|\.|\[|\]|,)/g, ''); + id = 'select2-' + id; + + return id; + }; + + Select2.prototype._placeContainer = function ($container) { + $container.insertAfter(this.$element); + + var width = this._resolveWidth(this.$element, this.options.get('width')); + + if (width != null) { + $container.css('width', width); + } + }; + + Select2.prototype._resolveWidth = function ($element, method) { + var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; + + if (method == 'resolve') { + var styleWidth = this._resolveWidth($element, 'style'); + + if (styleWidth != null) { + return styleWidth; + } + + return this._resolveWidth($element, 'element'); + } + + if (method == 'element') { + var elementWidth = $element.outerWidth(false); + + if (elementWidth <= 0) { + return 'auto'; + } + + return elementWidth + 'px'; + } + + if (method == 'style') { + var style = $element.attr('style'); + + if (typeof(style) !== 'string') { + return null; + } + + var attrs = style.split(';'); + + for (var i = 0, l = attrs.length; i < l; i = i + 1) { + var attr = attrs[i].replace(/\s/g, ''); + var matches = attr.match(WIDTH); + + if (matches !== null && matches.length >= 1) { + return matches[1]; + } + } + + return null; + } + + return method; + }; + + Select2.prototype._bindAdapters = function () { + this.dataAdapter.bind(this, this.$container); + this.selection.bind(this, this.$container); + + this.dropdown.bind(this, this.$container); + this.results.bind(this, this.$container); + }; + + Select2.prototype._registerDomEvents = function () { + var self = this; + + this.$element.on('change.select2', function () { + self.dataAdapter.current(function (data) { + self.trigger('selection:update', { + data: data + }); + }); + }); + + this.$element.on('focus.select2', function (evt) { + self.trigger('focus', evt); + }); + + this._syncA = Utils.bind(this._syncAttributes, this); + this._syncS = Utils.bind(this._syncSubtree, this); + + if (this.$element[0].attachEvent) { + this.$element[0].attachEvent('onpropertychange', this._syncA); + } + + var observer = window.MutationObserver || + window.WebKitMutationObserver || + window.MozMutationObserver + ; + + if (observer != null) { + this._observer = new observer(function (mutations) { + $.each(mutations, self._syncA); + $.each(mutations, self._syncS); + }); + this._observer.observe(this.$element[0], { + attributes: true, + childList: true, + subtree: false + }); + } else if (this.$element[0].addEventListener) { + this.$element[0].addEventListener( + 'DOMAttrModified', + self._syncA, + false + ); + this.$element[0].addEventListener( + 'DOMNodeInserted', + self._syncS, + false + ); + this.$element[0].addEventListener( + 'DOMNodeRemoved', + self._syncS, + false + ); + } + }; + + Select2.prototype._registerDataEvents = function () { + var self = this; + + this.dataAdapter.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerSelectionEvents = function () { + var self = this; + var nonRelayEvents = ['toggle', 'focus']; + + this.selection.on('toggle', function () { + self.toggleDropdown(); + }); + + this.selection.on('focus', function (params) { + self.focus(params); + }); + + this.selection.on('*', function (name, params) { + if ($.inArray(name, nonRelayEvents) !== -1) { + return; + } + + self.trigger(name, params); + }); + }; + + Select2.prototype._registerDropdownEvents = function () { + var self = this; + + this.dropdown.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerResultsEvents = function () { + var self = this; + + this.results.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerEvents = function () { + var self = this; + + this.on('open', function () { + self.$container.addClass('select2-container--open'); + }); + + this.on('close', function () { + self.$container.removeClass('select2-container--open'); + }); + + this.on('enable', function () { + self.$container.removeClass('select2-container--disabled'); + }); + + this.on('disable', function () { + self.$container.addClass('select2-container--disabled'); + }); + + this.on('blur', function () { + self.$container.removeClass('select2-container--focus'); + }); + + this.on('query', function (params) { + if (!self.isOpen()) { + self.trigger('open', {}); + } + + this.dataAdapter.query(params, function (data) { + self.trigger('results:all', { + data: data, + query: params + }); + }); + }); + + this.on('query:append', function (params) { + this.dataAdapter.query(params, function (data) { + self.trigger('results:append', { + data: data, + query: params + }); + }); + }); + + this.on('keypress', function (evt) { + var key = evt.which; + + if (self.isOpen()) { + if (key === KEYS.ESC || key === KEYS.TAB || + (key === KEYS.UP && evt.altKey)) { + self.close(); + + evt.preventDefault(); + } else if (key === KEYS.ENTER) { + self.trigger('results:select', {}); + + evt.preventDefault(); + } else if ((key === KEYS.SPACE && evt.ctrlKey)) { + self.trigger('results:toggle', {}); + + evt.preventDefault(); + } else if (key === KEYS.UP) { + self.trigger('results:previous', {}); + + evt.preventDefault(); + } else if (key === KEYS.DOWN) { + self.trigger('results:next', {}); + + evt.preventDefault(); + } + } else { + if (key === KEYS.ENTER || key === KEYS.SPACE || + (key === KEYS.DOWN && evt.altKey)) { + self.open(); + + evt.preventDefault(); + } + } + }); + }; + + Select2.prototype._syncAttributes = function () { + this.options.set('disabled', this.$element.prop('disabled')); + + if (this.options.get('disabled')) { + if (this.isOpen()) { + this.close(); + } + + this.trigger('disable', {}); + } else { + this.trigger('enable', {}); + } + }; + + Select2.prototype._syncSubtree = function (evt, mutations) { + var changed = false; + var self = this; + + // Ignore any mutation events raised for elements that aren't options or + // optgroups. This handles the case when the select element is destroyed + if ( + evt && evt.target && ( + evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP' + ) + ) { + return; + } + + if (!mutations) { + // If mutation events aren't supported, then we can only assume that the + // change affected the selections + changed = true; + } else if (mutations.addedNodes && mutations.addedNodes.length > 0) { + for (var n = 0; n < mutations.addedNodes.length; n++) { + var node = mutations.addedNodes[n]; + + if (node.selected) { + changed = true; + } + } + } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { + changed = true; + } + + // Only re-pull the data if we think there is a change + if (changed) { + this.dataAdapter.current(function (currentData) { + self.trigger('selection:update', { + data: currentData + }); + }); + } + }; + + /** + * Override the trigger method to automatically trigger pre-events when + * there are events that can be prevented. + */ + Select2.prototype.trigger = function (name, args) { + var actualTrigger = Select2.__super__.trigger; + var preTriggerMap = { + 'open': 'opening', + 'close': 'closing', + 'select': 'selecting', + 'unselect': 'unselecting' + }; + + if (args === undefined) { + args = {}; + } + + if (name in preTriggerMap) { + var preTriggerName = preTriggerMap[name]; + var preTriggerArgs = { + prevented: false, + name: name, + args: args + }; + + actualTrigger.call(this, preTriggerName, preTriggerArgs); + + if (preTriggerArgs.prevented) { + args.prevented = true; + + return; + } + } + + actualTrigger.call(this, name, args); + }; + + Select2.prototype.toggleDropdown = function () { + if (this.options.get('disabled')) { + return; + } + + if (this.isOpen()) { + this.close(); + } else { + this.open(); + } + }; + + Select2.prototype.open = function () { + if (this.isOpen()) { + return; + } + + this.trigger('query', {}); + }; + + Select2.prototype.close = function () { + if (!this.isOpen()) { + return; + } + + this.trigger('close', {}); + }; + + Select2.prototype.isOpen = function () { + return this.$container.hasClass('select2-container--open'); + }; + + Select2.prototype.hasFocus = function () { + return this.$container.hasClass('select2-container--focus'); + }; + + Select2.prototype.focus = function (data) { + // No need to re-trigger focus events if we are already focused + if (this.hasFocus()) { + return; + } + + this.$container.addClass('select2-container--focus'); + this.trigger('focus', {}); + }; + + Select2.prototype.enable = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("enable")` method has been deprecated and will' + + ' be removed in later Select2 versions. Use $element.prop("disabled")' + + ' instead.' + ); + } + + if (args == null || args.length === 0) { + args = [true]; + } + + var disabled = !args[0]; + + this.$element.prop('disabled', disabled); + }; + + Select2.prototype.data = function () { + if (this.options.get('debug') && + arguments.length > 0 && window.console && console.warn) { + console.warn( + 'Select2: Data can no longer be set using `select2("data")`. You ' + + 'should consider setting the value instead using `$element.val()`.' + ); + } + + var data = []; + + this.dataAdapter.current(function (currentData) { + data = currentData; + }); + + return data; + }; + + Select2.prototype.val = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("val")` method has been deprecated and will be' + + ' removed in later Select2 versions. Use $element.val() instead.' + ); + } + + if (args == null || args.length === 0) { + return this.$element.val(); + } + + var newVal = args[0]; + + if ($.isArray(newVal)) { + newVal = $.map(newVal, function (obj) { + return obj.toString(); + }); + } + + this.$element.val(newVal).trigger('change'); + }; + + Select2.prototype.destroy = function () { + this.$container.remove(); + + if (this.$element[0].detachEvent) { + this.$element[0].detachEvent('onpropertychange', this._syncA); + } + + if (this._observer != null) { + this._observer.disconnect(); + this._observer = null; + } else if (this.$element[0].removeEventListener) { + this.$element[0] + .removeEventListener('DOMAttrModified', this._syncA, false); + this.$element[0] + .removeEventListener('DOMNodeInserted', this._syncS, false); + this.$element[0] + .removeEventListener('DOMNodeRemoved', this._syncS, false); + } + + this._syncA = null; + this._syncS = null; + + this.$element.off('.select2'); + this.$element.attr('tabindex', this.$element.data('old-tabindex')); + + this.$element.removeClass('select2-hidden-accessible'); + this.$element.attr('aria-hidden', 'false'); + this.$element.removeData('select2'); + + this.dataAdapter.destroy(); + this.selection.destroy(); + this.dropdown.destroy(); + this.results.destroy(); + + this.dataAdapter = null; + this.selection = null; + this.dropdown = null; + this.results = null; + }; + + Select2.prototype.render = function () { + var $container = $( + '<span class="select2 select2-container">' + + '<span class="selection"></span>' + + '<span class="dropdown-wrapper" aria-hidden="true"></span>' + + '</span>' + ); + + $container.attr('dir', this.options.get('dir')); + + this.$container = $container; + + this.$container.addClass('select2-container--' + this.options.get('theme')); + + $container.data('element', this.$element); + + return $container; + }; + + return Select2; +}); + +S2.define('select2/compat/utils',[ + 'jquery' +], function ($) { + function syncCssClasses ($dest, $src, adapter) { + var classes, replacements = [], adapted; + + classes = $.trim($dest.attr('class')); + + if (classes) { + classes = '' + classes; // for IE which returns object + + $(classes.split(/\s+/)).each(function () { + // Save all Select2 classes + if (this.indexOf('select2-') === 0) { + replacements.push(this); + } + }); + } + + classes = $.trim($src.attr('class')); + + if (classes) { + classes = '' + classes; // for IE which returns object + + $(classes.split(/\s+/)).each(function () { + // Only adapt non-Select2 classes + if (this.indexOf('select2-') !== 0) { + adapted = adapter(this); + + if (adapted != null) { + replacements.push(adapted); + } + } + }); + } + + $dest.attr('class', replacements.join(' ')); + } + + return { + syncCssClasses: syncCssClasses + }; +}); + +S2.define('select2/compat/containerCss',[ + 'jquery', + './utils' +], function ($, CompatUtils) { + // No-op CSS adapter that discards all classes by default + function _containerAdapter (clazz) { + return null; + } + + function ContainerCSS () { } + + ContainerCSS.prototype.render = function (decorated) { + var $container = decorated.call(this); + + var containerCssClass = this.options.get('containerCssClass') || ''; + + if ($.isFunction(containerCssClass)) { + containerCssClass = containerCssClass(this.$element); + } + + var containerCssAdapter = this.options.get('adaptContainerCssClass'); + containerCssAdapter = containerCssAdapter || _containerAdapter; + + if (containerCssClass.indexOf(':all:') !== -1) { + containerCssClass = containerCssClass.replace(':all:', ''); + + var _cssAdapter = containerCssAdapter; + + containerCssAdapter = function (clazz) { + var adapted = _cssAdapter(clazz); + + if (adapted != null) { + // Append the old one along with the adapted one + return adapted + ' ' + clazz; + } + + return clazz; + }; + } + + var containerCss = this.options.get('containerCss') || {}; + + if ($.isFunction(containerCss)) { + containerCss = containerCss(this.$element); + } + + CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter); + + $container.css(containerCss); + $container.addClass(containerCssClass); + + return $container; + }; + + return ContainerCSS; +}); + +S2.define('select2/compat/dropdownCss',[ + 'jquery', + './utils' +], function ($, CompatUtils) { + // No-op CSS adapter that discards all classes by default + function _dropdownAdapter (clazz) { + return null; + } + + function DropdownCSS () { } + + DropdownCSS.prototype.render = function (decorated) { + var $dropdown = decorated.call(this); + + var dropdownCssClass = this.options.get('dropdownCssClass') || ''; + + if ($.isFunction(dropdownCssClass)) { + dropdownCssClass = dropdownCssClass(this.$element); + } + + var dropdownCssAdapter = this.options.get('adaptDropdownCssClass'); + dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter; + + if (dropdownCssClass.indexOf(':all:') !== -1) { + dropdownCssClass = dropdownCssClass.replace(':all:', ''); + + var _cssAdapter = dropdownCssAdapter; + + dropdownCssAdapter = function (clazz) { + var adapted = _cssAdapter(clazz); + + if (adapted != null) { + // Append the old one along with the adapted one + return adapted + ' ' + clazz; + } + + return clazz; + }; + } + + var dropdownCss = this.options.get('dropdownCss') || {}; + + if ($.isFunction(dropdownCss)) { + dropdownCss = dropdownCss(this.$element); + } + + CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter); + + $dropdown.css(dropdownCss); + $dropdown.addClass(dropdownCssClass); + + return $dropdown; + }; + + return DropdownCSS; +}); + +S2.define('select2/compat/initSelection',[ + 'jquery' +], function ($) { + function InitSelection (decorated, $element, options) { + if (options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `initSelection` option has been deprecated in favor' + + ' of a custom data adapter that overrides the `current` method. ' + + 'This method is now called multiple times instead of a single ' + + 'time when the instance is initialized. Support will be removed ' + + 'for the `initSelection` option in future versions of Select2' + ); + } + + this.initSelection = options.get('initSelection'); + this._isInitialized = false; + + decorated.call(this, $element, options); + } + + InitSelection.prototype.current = function (decorated, callback) { + var self = this; + + if (this._isInitialized) { + decorated.call(this, callback); + + return; + } + + this.initSelection.call(null, this.$element, function (data) { + self._isInitialized = true; + + if (!$.isArray(data)) { + data = [data]; + } + + callback(data); + }); + }; + + return InitSelection; +}); + +S2.define('select2/compat/inputData',[ + 'jquery' +], function ($) { + function InputData (decorated, $element, options) { + this._currentData = []; + this._valueSeparator = options.get('valueSeparator') || ','; + + if ($element.prop('type') === 'hidden') { + if (options.get('debug') && console && console.warn) { + console.warn( + 'Select2: Using a hidden input with Select2 is no longer ' + + 'supported and may stop working in the future. It is recommended ' + + 'to use a `<select>` element instead.' + ); + } + } + + decorated.call(this, $element, options); + } + + InputData.prototype.current = function (_, callback) { + function getSelected (data, selectedIds) { + var selected = []; + + if (data.selected || $.inArray(data.id, selectedIds) !== -1) { + data.selected = true; + selected.push(data); + } else { + data.selected = false; + } + + if (data.children) { + selected.push.apply(selected, getSelected(data.children, selectedIds)); + } + + return selected; + } + + var selected = []; + + for (var d = 0; d < this._currentData.length; d++) { + var data = this._currentData[d]; + + selected.push.apply( + selected, + getSelected( + data, + this.$element.val().split( + this._valueSeparator + ) + ) + ); + } + + callback(selected); + }; + + InputData.prototype.select = function (_, data) { + if (!this.options.get('multiple')) { + this.current(function (allData) { + $.map(allData, function (data) { + data.selected = false; + }); + }); + + this.$element.val(data.id); + this.$element.trigger('change'); + } else { + var value = this.$element.val(); + value += this._valueSeparator + data.id; + + this.$element.val(value); + this.$element.trigger('change'); + } + }; + + InputData.prototype.unselect = function (_, data) { + var self = this; + + data.selected = false; + + this.current(function (allData) { + var values = []; + + for (var d = 0; d < allData.length; d++) { + var item = allData[d]; + + if (data.id == item.id) { + continue; + } + + values.push(item.id); + } + + self.$element.val(values.join(self._valueSeparator)); + self.$element.trigger('change'); + }); + }; + + InputData.prototype.query = function (_, params, callback) { + var results = []; + + for (var d = 0; d < this._currentData.length; d++) { + var data = this._currentData[d]; + + var matches = this.matches(params, data); + + if (matches !== null) { + results.push(matches); + } + } + + callback({ + results: results + }); + }; + + InputData.prototype.addOptions = function (_, $options) { + var options = $.map($options, function ($option) { + return $.data($option[0], 'data'); + }); + + this._currentData.push.apply(this._currentData, options); + }; + + return InputData; +}); + +S2.define('select2/compat/matcher',[ + 'jquery' +], function ($) { + function oldMatcher (matcher) { + function wrappedMatcher (params, data) { + var match = $.extend(true, {}, data); + + if (params.term == null || $.trim(params.term) === '') { + return match; + } + + if (data.children) { + for (var c = data.children.length - 1; c >= 0; c--) { + var child = data.children[c]; + + // Check if the child object matches + // The old matcher returned a boolean true or false + var doesMatch = matcher(params.term, child.text, child); + + // If the child didn't match, pop it off + if (!doesMatch) { + match.children.splice(c, 1); + } + } + + if (match.children.length > 0) { + return match; + } + } + + if (matcher(params.term, data.text, data)) { + return match; + } + + return null; + } + + return wrappedMatcher; + } + + return oldMatcher; +}); + +S2.define('select2/compat/query',[ + +], function () { + function Query (decorated, $element, options) { + if (options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `query` option has been deprecated in favor of a ' + + 'custom data adapter that overrides the `query` method. Support ' + + 'will be removed for the `query` option in future versions of ' + + 'Select2.' + ); + } + + decorated.call(this, $element, options); + } + + Query.prototype.query = function (_, params, callback) { + params.callback = callback; + + var query = this.options.get('query'); + + query.call(null, params); + }; + + return Query; +}); + +S2.define('select2/dropdown/attachContainer',[ + +], function () { + function AttachContainer (decorated, $element, options) { + decorated.call(this, $element, options); + } + + AttachContainer.prototype.position = + function (decorated, $dropdown, $container) { + var $dropdownContainer = $container.find('.dropdown-wrapper'); + $dropdownContainer.append($dropdown); + + $dropdown.addClass('select2-dropdown--below'); + $container.addClass('select2-container--below'); + }; + + return AttachContainer; +}); + +S2.define('select2/dropdown/stopPropagation',[ + +], function () { + function StopPropagation () { } + + StopPropagation.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + var stoppedEvents = [ + 'blur', + 'change', + 'click', + 'dblclick', + 'focus', + 'focusin', + 'focusout', + 'input', + 'keydown', + 'keyup', + 'keypress', + 'mousedown', + 'mouseenter', + 'mouseleave', + 'mousemove', + 'mouseover', + 'mouseup', + 'search', + 'touchend', + 'touchstart' + ]; + + this.$dropdown.on(stoppedEvents.join(' '), function (evt) { + evt.stopPropagation(); + }); + }; + + return StopPropagation; +}); + +S2.define('select2/selection/stopPropagation',[ + +], function () { + function StopPropagation () { } + + StopPropagation.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + var stoppedEvents = [ + 'blur', + 'change', + 'click', + 'dblclick', + 'focus', + 'focusin', + 'focusout', + 'input', + 'keydown', + 'keyup', + 'keypress', + 'mousedown', + 'mouseenter', + 'mouseleave', + 'mousemove', + 'mouseover', + 'mouseup', + 'search', + 'touchend', + 'touchstart' + ]; + + this.$selection.on(stoppedEvents.join(' '), function (evt) { + evt.stopPropagation(); + }); + }; + + return StopPropagation; +}); + +/*! + * jQuery Mousewheel 3.1.13 + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + */ + +(function (factory) { + if ( typeof S2.define === 'function' && S2.define.amd ) { + // AMD. Register as an anonymous module. + S2.define('jquery-mousewheel',['jquery'], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS style for Browserify + module.exports = factory; + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'], + toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ? + ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'], + slice = Array.prototype.slice, + nullLowestDeltaTimeout, lowestDelta; + + if ( $.event.fixHooks ) { + for ( var i = toFix.length; i; ) { + $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; + } + } + + var special = $.event.special.mousewheel = { + version: '3.1.12', + + setup: function() { + if ( this.addEventListener ) { + for ( var i = toBind.length; i; ) { + this.addEventListener( toBind[--i], handler, false ); + } + } else { + this.onmousewheel = handler; + } + // Store the line height and page height for this particular element + $.data(this, 'mousewheel-line-height', special.getLineHeight(this)); + $.data(this, 'mousewheel-page-height', special.getPageHeight(this)); + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i = toBind.length; i; ) { + this.removeEventListener( toBind[--i], handler, false ); + } + } else { + this.onmousewheel = null; + } + // Clean up the data we added to the element + $.removeData(this, 'mousewheel-line-height'); + $.removeData(this, 'mousewheel-page-height'); + }, + + getLineHeight: function(elem) { + var $elem = $(elem), + $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent'](); + if (!$parent.length) { + $parent = $('body'); + } + return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16; + }, + + getPageHeight: function(elem) { + return $(elem).height(); + }, + + settings: { + adjustOldDeltas: true, // see shouldAdjustOldDeltas() below + normalizeOffset: true // calls getBoundingClientRect for each event + } + }; + + $.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel'); + }, + + unmousewheel: function(fn) { + return this.unbind('mousewheel', fn); + } + }); + + + function handler(event) { + var orgEvent = event || window.event, + args = slice.call(arguments, 1), + delta = 0, + deltaX = 0, + deltaY = 0, + absDelta = 0, + offsetX = 0, + offsetY = 0; + event = $.event.fix(orgEvent); + event.type = 'mousewheel'; + + // Old school scrollwheel delta + if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; } + if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; } + if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; } + if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; } + + // Firefox < 17 horizontal scrolling related to DOMMouseScroll event + if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { + deltaX = deltaY * -1; + deltaY = 0; + } + + // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy + delta = deltaY === 0 ? deltaX : deltaY; + + // New school wheel delta (wheel event) + if ( 'deltaY' in orgEvent ) { + deltaY = orgEvent.deltaY * -1; + delta = deltaY; + } + if ( 'deltaX' in orgEvent ) { + deltaX = orgEvent.deltaX; + if ( deltaY === 0 ) { delta = deltaX * -1; } + } + + // No change actually happened, no reason to go any further + if ( deltaY === 0 && deltaX === 0 ) { return; } + + // Need to convert lines and pages to pixels if we aren't already in pixels + // There are three delta modes: + // * deltaMode 0 is by pixels, nothing to do + // * deltaMode 1 is by lines + // * deltaMode 2 is by pages + if ( orgEvent.deltaMode === 1 ) { + var lineHeight = $.data(this, 'mousewheel-line-height'); + delta *= lineHeight; + deltaY *= lineHeight; + deltaX *= lineHeight; + } else if ( orgEvent.deltaMode === 2 ) { + var pageHeight = $.data(this, 'mousewheel-page-height'); + delta *= pageHeight; + deltaY *= pageHeight; + deltaX *= pageHeight; + } + + // Store lowest absolute delta to normalize the delta values + absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); + + if ( !lowestDelta || absDelta < lowestDelta ) { + lowestDelta = absDelta; + + // Adjust older deltas if necessary + if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { + lowestDelta /= 40; + } + } + + // Adjust older deltas if necessary + if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { + // Divide all the things by 40! + delta /= 40; + deltaX /= 40; + deltaY /= 40; + } + + // Get a whole, normalized value for the deltas + delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta); + deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta); + deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta); + + // Normalise offsetX and offsetY properties + if ( special.settings.normalizeOffset && this.getBoundingClientRect ) { + var boundingRect = this.getBoundingClientRect(); + offsetX = event.clientX - boundingRect.left; + offsetY = event.clientY - boundingRect.top; + } + + // Add information to the event object + event.deltaX = deltaX; + event.deltaY = deltaY; + event.deltaFactor = lowestDelta; + event.offsetX = offsetX; + event.offsetY = offsetY; + // Go ahead and set deltaMode to 0 since we converted to pixels + // Although this is a little odd since we overwrite the deltaX/Y + // properties with normalized deltas. + event.deltaMode = 0; + + // Add event and delta to the front of the arguments + args.unshift(event, delta, deltaX, deltaY); + + // Clearout lowestDelta after sometime to better + // handle multiple device types that give different + // a different lowestDelta + // Ex: trackpad = 3 and mouse wheel = 120 + if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); } + nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200); + + return ($.event.dispatch || $.event.handle).apply(this, args); + } + + function nullLowestDelta() { + lowestDelta = null; + } + + function shouldAdjustOldDeltas(orgEvent, absDelta) { + // If this is an older event and the delta is divisable by 120, + // then we are assuming that the browser is treating this as an + // older mouse wheel event and that we should divide the deltas + // by 40 to try and get a more usable deltaFactor. + // Side note, this actually impacts the reported scroll distance + // in older browsers and can cause scrolling to be slower than native. + // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. + return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0; + } + +})); + +S2.define('jquery.select2',[ + 'jquery', + 'jquery-mousewheel', + + './select2/core', + './select2/defaults' +], function ($, _, Select2, Defaults) { + if ($.fn.select2 == null) { + // All methods that should return the element + var thisMethods = ['open', 'close', 'destroy']; + + $.fn.select2 = function (options) { + options = options || {}; + + if (typeof options === 'object') { + this.each(function () { + var instanceOptions = $.extend(true, {}, options); + + var instance = new Select2($(this), instanceOptions); + }); + + return this; + } else if (typeof options === 'string') { + var ret; + var args = Array.prototype.slice.call(arguments, 1); + + this.each(function () { + var instance = $(this).data('select2'); + + if (instance == null && window.console && console.error) { + console.error( + 'The select2(\'' + options + '\') method was called on an ' + + 'element that is not using Select2.' + ); + } + + ret = instance[options].apply(instance, args); + }); + + // Check if we should be returning `this` + if ($.inArray(options, thisMethods) > -1) { + return this; + } + + return ret; + } else { + throw new Error('Invalid arguments for Select2: ' + options); + } + }; + } + + if ($.fn.select2.defaults == null) { + $.fn.select2.defaults = Defaults; + } + + return Select2; +}); + + // Return the AMD loader configuration so it can be used outside of this file + return { + define: S2.define, + require: S2.require + }; +}()); + + // Autoload the jQuery bindings + // We know that all of the modules exist above this, so we're safe + var select2 = S2.require('jquery.select2'); + + // Hold the AMD module references on the jQuery function that was just loaded + // This allows Select2 to use the internal loader outside of this file, such + // as in the language files. + jQuery.fn.select2.amd = S2; + + // Return the Select2 instance for anyone who is importing it. + return select2; +})); diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js new file mode 100644 index 0000000..684edf3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js @@ -0,0 +1,3 @@ +/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">×</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change"); +if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b),d=g.$element.find("option").filter(function(){return a(this).val()===c.id});if(!d.length){var e=g.option(c);e.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([e])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},a.prototype._handleSelectOnClose=function(a,b){if(b&&null!=b.originalSelect2Event){var c=b.originalSelect2Event;if("select"===c._type||"unselect"===c._type)return}var d=this.getHighlightedResults();if(!(d.length<1)){var e=d.data("data");null!=e.element&&e.element.selected||null==e.element&&e.selected||this.trigger("select",{data:e})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null; +},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b[0],"data")});this._currentData.push.apply(this._currentData,d)},b}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f],h=b(c.term,g.text,g);h||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c;var d=this.options.get("query");d.call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){var d=c.find(".dropdown-wrapper");d.append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt new file mode 100644 index 0000000..341652a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2007-2012 Steven Levithan <http://xregexp.com/> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js new file mode 100755 index 0000000..7a4454e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js @@ -0,0 +1,2308 @@ + +/***** xregexp.js *****/ + +/*! + * XRegExp v2.0.0 + * (c) 2007-2012 Steven Levithan <http://xregexp.com/> + * MIT License + */ + +/** + * XRegExp provides augmented, extensible JavaScript regular expressions. You get new syntax, + * flags, and methods beyond what browsers support natively. XRegExp is also a regex utility belt + * with tools to make your client-side grepping simpler and more powerful, while freeing you from + * worrying about pesky cross-browser inconsistencies and the dubious `lastIndex` property. See + * XRegExp's documentation (http://xregexp.com/) for more details. + * @module xregexp + * @requires N/A + */ +var XRegExp; + +// Avoid running twice; that would reset tokens and could break references to native globals +XRegExp = XRegExp || (function (undef) { + "use strict"; + +/*-------------------------------------- + * Private variables + *------------------------------------*/ + + var self, + addToken, + add, + +// Optional features; can be installed and uninstalled + features = { + natives: false, + extensibility: false + }, + +// Store native methods to use and restore ("native" is an ES3 reserved keyword) + nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + +// Storage for fixed/extended native methods + fixed = {}, + +// Storage for cached regexes + cache = {}, + +// Storage for addon tokens + tokens = [], + +// Token scopes + defaultScope = "default", + classScope = "class", + +// Regexes that match native regex syntax + nativeTokens = { + // Any native multicharacter token in default scope (includes octals, excludes character classes) + "default": /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/, + // Any native multicharacter token in character class scope (includes octals) + "class": /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/ + }, + +// Any backreference in replacement strings + replacementToken = /\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g, + +// Any character with a later instance in the string + duplicateFlags = /([\s\S])(?=[\s\S]*\1)/g, + +// Any greedy/lazy quantifier + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + +// Check for correct `exec` handling of nonparticipating capturing groups + compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undef, + +// Check for flag y support (Firefox 3+) + hasNativeY = RegExp.prototype.sticky !== undef, + +// Used to kill infinite recursion during XRegExp construction + isInsideConstructor = false, + +// Storage for known flags, including addon flags + registeredFlags = "gim" + (hasNativeY ? "y" : ""); + +/*-------------------------------------- + * Private helper functions + *------------------------------------*/ + +/** + * Attaches XRegExp.prototype properties and named capture supporting data to a regex object. + * @private + * @param {RegExp} regex Regex to augment. + * @param {Array} captureNames Array with capture names, or null. + * @param {Boolean} [isNative] Whether the regex was created by `RegExp` rather than `XRegExp`. + * @returns {RegExp} Augmented regex. + */ + function augment(regex, captureNames, isNative) { + var p; + // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value + for (p in self.prototype) { + if (self.prototype.hasOwnProperty(p)) { + regex[p] = self.prototype[p]; + } + } + regex.xregexp = {captureNames: captureNames, isNative: !!isNative}; + return regex; + } + +/** + * Returns native `RegExp` flags used by a regex object. + * @private + * @param {RegExp} regex Regex to check. + * @returns {String} Native flags in use. + */ + function getNativeFlags(regex) { + //return nativ.exec.call(/\/([a-z]*)$/i, String(regex))[1]; + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES6, included in AS3 + (regex.sticky ? "y" : ""); // Proposed for ES6, included in Firefox 3+ + } + +/** + * Copies a regex object while preserving special properties for named capture and augmenting with + * `XRegExp.prototype` methods. The copy has a fresh `lastIndex` property (set to zero). Allows + * adding and removing flags while copying the regex. + * @private + * @param {RegExp} regex Regex to copy. + * @param {String} [addFlags] Flags to be added while copying the regex. + * @param {String} [removeFlags] Flags to be removed while copying the regex. + * @returns {RegExp} Copy of the provided regex, possibly with modified flags. + */ + function copy(regex, addFlags, removeFlags) { + if (!self.isRegExp(regex)) { + throw new TypeError("type RegExp expected"); + } + var flags = nativ.replace.call(getNativeFlags(regex) + (addFlags || ""), duplicateFlags, ""); + if (removeFlags) { + // Would need to escape `removeFlags` if this was public + flags = nativ.replace.call(flags, new RegExp("[" + removeFlags + "]+", "g"), ""); + } + if (regex.xregexp && !regex.xregexp.isNative) { + // Compiling the current (rather than precompilation) source preserves the effects of nonnative source flags + regex = augment(self(regex.source, flags), + regex.xregexp.captureNames ? regex.xregexp.captureNames.slice(0) : null); + } else { + // Augment with `XRegExp.prototype` methods, but use native `RegExp` (avoid searching for special tokens) + regex = augment(new RegExp(regex.source, flags), null, true); + } + return regex; + } + +/* + * Returns the last index at which a given value can be found in an array, or `-1` if it's not + * present. The array is searched backwards. + * @private + * @param {Array} array Array to search. + * @param {*} value Value to locate in the array. + * @returns {Number} Last zero-based index at which the item is found, or -1. + */ + function lastIndexOf(array, value) { + var i = array.length; + if (Array.prototype.lastIndexOf) { + return array.lastIndexOf(value); // Use the native method if available + } + while (i--) { + if (array[i] === value) { + return i; + } + } + return -1; + } + +/** + * Determines whether an object is of the specified type. + * @private + * @param {*} value Object to check. + * @param {String} type Type to check for, in lowercase. + * @returns {Boolean} Whether the object matches the type. + */ + function isType(value, type) { + return Object.prototype.toString.call(value).toLowerCase() === "[object " + type + "]"; + } + +/** + * Prepares an options object from the given value. + * @private + * @param {String|Object} value Value to convert to an options object. + * @returns {Object} Options object. + */ + function prepareOptions(value) { + value = value || {}; + if (value === "all" || value.all) { + value = {natives: true, extensibility: true}; + } else if (isType(value, "string")) { + value = self.forEach(value, /[^\s,]+/, function (m) { + this[m] = true; + }, {}); + } + return value; + } + +/** + * Runs built-in/custom tokens in reverse insertion order, until a match is found. + * @private + * @param {String} pattern Original pattern from which an XRegExp object is being built. + * @param {Number} pos Position to search for tokens within `pattern`. + * @param {Number} scope Current regex scope. + * @param {Object} context Context object assigned to token handler functions. + * @returns {Object} Object with properties `output` (the substitution string returned by the + * successful token handler) and `match` (the token's match array), or null. + */ + function runTokens(pattern, pos, scope, context) { + var i = tokens.length, + result = null, + match, + t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((t.scope === "all" || t.scope === scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = pos; + match = fixed.exec.call(t.pattern, pattern); // Fixed `exec` here allows use of named backreferences, etc. + if (match && match.index === pos) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + } + +/** + * Enables or disables XRegExp syntax and flag extensibility. + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ + function setExtensibility(on) { + self.addToken = addToken[on ? "on" : "off"]; + features.extensibility = on; + } + +/** + * Enables or disables native method overrides. + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ + function setNatives(on) { + RegExp.prototype.exec = (on ? fixed : nativ).exec; + RegExp.prototype.test = (on ? fixed : nativ).test; + String.prototype.match = (on ? fixed : nativ).match; + String.prototype.replace = (on ? fixed : nativ).replace; + String.prototype.split = (on ? fixed : nativ).split; + features.natives = on; + } + +/*-------------------------------------- + * Constructor + *------------------------------------*/ + +/** + * Creates an extended regular expression object for matching text with a pattern. Differs from a + * native regular expression in that additional syntax and flags are supported. The returned object + * is in fact a native `RegExp` and works with all native methods. + * @class XRegExp + * @constructor + * @param {String|RegExp} pattern Regex pattern string, or an existing `RegExp` object to copy. + * @param {String} [flags] Any combination of flags: + * <li>`g` - global + * <li>`i` - ignore case + * <li>`m` - multiline anchors + * <li>`n` - explicit capture + * <li>`s` - dot matches all (aka singleline) + * <li>`x` - free-spacing and line comments (aka extended) + * <li>`y` - sticky (Firefox 3+ only) + * Flags cannot be provided when constructing one `RegExp` from another. + * @returns {RegExp} Extended regular expression object. + * @example + * + * // With named capture and flag x + * date = XRegExp('(?<year> [0-9]{4}) -? # year \n\ + * (?<month> [0-9]{2}) -? # month \n\ + * (?<day> [0-9]{2}) # day ', 'x'); + * + * // Passing a regex object to copy it. The copy maintains special properties for named capture, + * // is augmented with `XRegExp.prototype` methods, and has a fresh `lastIndex` property (set to + * // zero). Native regexes are not recompiled using XRegExp syntax. + * XRegExp(/regex/); + */ + self = function (pattern, flags) { + if (self.isRegExp(pattern)) { + if (flags !== undef) { + throw new TypeError("can't supply flags when constructing one RegExp from another"); + } + return copy(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite recursion + // when an XRegExp is constructed within a token handler function + if (isInsideConstructor) { + throw new Error("can't call the XRegExp constructor within token definition functions"); + } + + var output = [], + scope = defaultScope, + tokenContext = { + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) { + return flags.indexOf(flag) > -1; + } + }, + pos = 0, + tokenResult, + match, + chr; + pattern = pattern === undef ? "" : String(pattern); + flags = flags === undef ? "" : String(flags); + + if (nativ.match.call(flags, duplicateFlags)) { // Don't use test/exec because they would update lastIndex + throw new SyntaxError("invalid duplicate regular expression flag"); + } + // Strip/apply leading mode modifier with any combination of flags except g or y: (?imnsx) + pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function ($0, $1) { + if (nativ.test.call(/[gy]/, $1)) { + throw new SyntaxError("can't use flag g or y in mode modifier"); + } + flags = nativ.replace.call(flags + $1, duplicateFlags, ""); + return ""; + }); + self.forEach(flags, /[\s\S]/, function (m) { + if (registeredFlags.indexOf(m[0]) < 0) { + throw new SyntaxError("invalid regular expression flag " + m[0]); + } + }); + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, scope, tokenContext); + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native tokens (except character classes) at the current position + match = nativ.exec.call(nativeTokens[scope], pattern.slice(pos)); + if (match) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") { + scope = classScope; + } else if (chr === "]") { + scope = defaultScope; + } + // Advance position by one character + output.push(chr); + ++pos; + } + } + } + + return augment(new RegExp(output.join(""), nativ.replace.call(flags, /[^gimy]+/g, "")), + tokenContext.hasNamedCapture ? tokenContext.captureNames : null); + }; + +/*-------------------------------------- + * Public methods/properties + *------------------------------------*/ + +// Installed and uninstalled states for `XRegExp.addToken` + addToken = { + on: function (regex, handler, options) { + options = options || {}; + if (regex) { + tokens.push({ + pattern: copy(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: options.scope || defaultScope, + trigger: options.trigger || null + }); + } + // Providing `customFlags` with null `regex` and `handler` allows adding flags that do + // nothing, but don't throw an error + if (options.customFlags) { + registeredFlags = nativ.replace.call(registeredFlags + options.customFlags, duplicateFlags, ""); + } + }, + off: function () { + throw new Error("extensibility must be installed before using addToken"); + } + }; + +/** + * Extends or changes XRegExp syntax and allows custom flags. This is used internally and can be + * used to create XRegExp addons. `XRegExp.install('extensibility')` must be run before calling + * this function, or an error is thrown. If more than one token can match the same string, the last + * added wins. + * @memberOf XRegExp + * @param {RegExp} regex Regex object that matches the new token. + * @param {Function} handler Function that returns a new pattern string (using native regex syntax) + * to replace the matched token within all future XRegExp regexes. Has access to persistent + * properties of the regex being built, through `this`. Invoked with two arguments: + * <li>The match array, with named backreference properties. + * <li>The regex scope where the match was found. + * @param {Object} [options] Options object with optional properties: + * <li>`scope` {String} Scopes where the token applies: 'default', 'class', or 'all'. + * <li>`trigger` {Function} Function that returns `true` when the token should be applied; e.g., + * if a flag is set. If `false` is returned, the matched string can be matched by other tokens. + * Has access to persistent properties of the regex being built, through `this` (including + * function `this.hasFlag`). + * <li>`customFlags` {String} Nonnative flags used by the token's handler or trigger functions. + * Prevents XRegExp from throwing an invalid flag error when the specified flags are used. + * @example + * + * // Basic usage: Adds \a for ALERT character + * XRegExp.addToken( + * /\\a/, + * function () {return '\\x07';}, + * {scope: 'all'} + * ); + * XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true + */ + self.addToken = addToken.off; + +/** + * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with + * the same pattern and flag combination, the cached copy is returned. + * @memberOf XRegExp + * @param {String} pattern Regex pattern string. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Cached XRegExp object. + * @example + * + * while (match = XRegExp.cache('.', 'gs').exec(str)) { + * // The regex is compiled once only + * } + */ + self.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return cache[key] || (cache[key] = self(pattern, flags)); + }; + +/** + * Escapes any regular expression metacharacters, for use when matching literal strings. The result + * can safely be used at any point within a regex that uses any flags. + * @memberOf XRegExp + * @param {String} str String to escape. + * @returns {String} String with regex metacharacters escaped. + * @example + * + * XRegExp.escape('Escaped? <.>'); + * // -> 'Escaped\?\ <\.>' + */ + self.escape = function (str) { + return nativ.replace.call(str, /[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + +/** + * Executes a regex search in a specified string. Returns a match array or `null`. If the provided + * regex uses named capture, named backreference properties are included on the match array. + * Optional `pos` and `sticky` arguments specify the search start position, and whether the match + * must start at the specified position only. The `lastIndex` property of the provided regex is not + * used, but is updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.exec` and can be used reliably cross-browser. + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Array} Match array with named backreference properties, or null. + * @example + * + * // Basic use, with named backreference + * var match = XRegExp.exec('U+2620', XRegExp('U\\+(?<hex>[0-9A-F]{4})')); + * match.hex; // -> '2620' + * + * // With pos and sticky, in a loop + * var pos = 2, result = [], match; + * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) { + * result.push(match[1]); + * pos = match.index + match[0].length; + * } + * // result -> ['2', '3', '4'] + */ + self.exec = function (str, regex, pos, sticky) { + var r2 = copy(regex, "g" + (sticky && hasNativeY ? "y" : ""), (sticky === false ? "y" : "")), + match; + r2.lastIndex = pos = pos || 0; + match = fixed.exec.call(r2, str); // Fixed `exec` required for `lastIndex` fix, etc. + if (sticky && match && match.index !== pos) { + match = null; + } + if (regex.global) { + regex.lastIndex = match ? r2.lastIndex : 0; + } + return match; + }; + +/** + * Executes a provided function once per regex match. + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Function} callback Function to execute for each match. Invoked with four arguments: + * <li>The match array, with named backreference properties. + * <li>The zero-based match index. + * <li>The string being traversed. + * <li>The regex object being used to traverse the string. + * @param {*} [context] Object to use as `this` when executing `callback`. + * @returns {*} Provided `context` object. + * @example + * + * // Extracts every other digit from a string + * XRegExp.forEach('1a2345', /\d/, function (match, i) { + * if (i % 2) this.push(+match[0]); + * }, []); + * // -> [2, 4] + */ + self.forEach = function (str, regex, callback, context) { + var pos = 0, + i = -1, + match; + while ((match = self.exec(str, regex, pos))) { + callback.call(context, match, ++i, str, regex); + pos = match.index + (match[0].length || 1); + } + return context; + }; + +/** + * Copies a regex object and adds flag `g`. The copy maintains special properties for named + * capture, is augmented with `XRegExp.prototype` methods, and has a fresh `lastIndex` property + * (set to zero). Native regexes are not recompiled using XRegExp syntax. + * @memberOf XRegExp + * @param {RegExp} regex Regex to globalize. + * @returns {RegExp} Copy of the provided regex with flag `g` added. + * @example + * + * var globalCopy = XRegExp.globalize(/regex/); + * globalCopy.global; // -> true + */ + self.globalize = function (regex) { + return copy(regex, "g"); + }; + +/** + * Installs optional features according to the specified options. + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.install({ + * // Overrides native regex methods with fixed/extended versions that support named + * // backreferences and fix numerous cross-browser bugs + * natives: true, + * + * // Enables extensibility of XRegExp syntax and flags + * extensibility: true + * }); + * + * // With an options string + * XRegExp.install('natives extensibility'); + * + * // Using a shortcut to install all optional features + * XRegExp.install('all'); + */ + self.install = function (options) { + options = prepareOptions(options); + if (!features.natives && options.natives) { + setNatives(true); + } + if (!features.extensibility && options.extensibility) { + setExtensibility(true); + } + }; + +/** + * Checks whether an individual optional feature is installed. + * @memberOf XRegExp + * @param {String} feature Name of the feature to check. One of: + * <li>`natives` + * <li>`extensibility` + * @returns {Boolean} Whether the feature is installed. + * @example + * + * XRegExp.isInstalled('natives'); + */ + self.isInstalled = function (feature) { + return !!(features[feature]); + }; + +/** + * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes + * created in another frame, when `instanceof` and `constructor` checks would fail. + * @memberOf XRegExp + * @param {*} value Object to check. + * @returns {Boolean} Whether the object is a `RegExp` object. + * @example + * + * XRegExp.isRegExp('string'); // -> false + * XRegExp.isRegExp(/regex/i); // -> true + * XRegExp.isRegExp(RegExp('^', 'm')); // -> true + * XRegExp.isRegExp(XRegExp('(?s).')); // -> true + */ + self.isRegExp = function (value) { + return isType(value, "regexp"); + }; + +/** + * Retrieves the matches from searching a string using a chain of regexes that successively search + * within previous matches. The provided `chain` array can contain regexes and objects with `regex` + * and `backref` properties. When a backreference is specified, the named or numbered backreference + * is passed forward to the next regex or returned. + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} chain Regexes that each search for matches within preceding results. + * @returns {Array} Matches by the last regex in the chain, or an empty array. + * @example + * + * // Basic usage; matches numbers within <b> tags + * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [ + * XRegExp('(?is)<b>.*?</b>'), + * /\d+/ + * ]); + * // -> ['2', '4', '56'] + * + * // Passing forward and returning specific backreferences + * html = '<a href="http://xregexp.com/api/">XRegExp</a>\ + * <a href="http://www.google.com/">Google</a>'; + * XRegExp.matchChain(html, [ + * {regex: /<a href="([^"]+)">/i, backref: 1}, + * {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'} + * ]); + * // -> ['xregexp.com', 'www.google.com'] + */ + self.matchChain = function (str, chain) { + return (function recurseChain(values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + matches = [], + addMatch = function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }, + i; + for (i = 0; i < values.length; ++i) { + self.forEach(values[i], item.regex, addMatch); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : + recurseChain(matches, level + 1); + }([str], 0)); + }; + +/** + * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string + * or regex, and the replacement can be a string or a function to be called for each match. To + * perform a global search and replace, use the optional `scope` argument or include flag `g` if + * using a regex. Replacement strings can use `${n}` for named and numbered backreferences. + * Replacement functions can use named backreferences via `arguments[0].name`. Also fixes browser + * bugs compared to the native `String.prototype.replace` and can be used reliably cross-browser. + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * Replacement strings can include special replacement syntax: + * <li>$$ - Inserts a literal '$'. + * <li>$&, $0 - Inserts the matched substring. + * <li>$` - Inserts the string that precedes the matched substring (left context). + * <li>$' - Inserts the string that follows the matched substring (right context). + * <li>$n, $nn - Where n/nn are digits referencing an existent capturing group, inserts + * backreference n/nn. + * <li>${n} - Where n is a name or any number of digits that reference an existent capturing + * group, inserts backreference n. + * Replacement functions are invoked with three or more arguments: + * <li>The matched substring (corresponds to $& above). Named backreferences are accessible as + * properties of this first argument. + * <li>0..n arguments, one for each backreference (corresponding to $1, $2, etc. above). + * <li>The zero-based index of the match within the total search string. + * <li>The total string being searched. + * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not + * explicitly specified and using a regex with flag `g`, `scope` is 'all'. + * @returns {String} New string with one or all matches replaced. + * @example + * + * // Regex search, using named backreferences in replacement string + * var name = XRegExp('(?<first>\\w+) (?<last>\\w+)'); + * XRegExp.replace('John Smith', name, '${last}, ${first}'); + * // -> 'Smith, John' + * + * // Regex search, using named backreferences in replacement function + * XRegExp.replace('John Smith', name, function (match) { + * return match.last + ', ' + match.first; + * }); + * // -> 'Smith, John' + * + * // Global string search/replacement + * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all'); + * // -> 'XRegExp builds XRegExps' + */ + self.replace = function (str, search, replacement, scope) { + var isRegex = self.isRegExp(search), + search2 = search, + result; + if (isRegex) { + if (scope === undef && search.global) { + scope = "all"; // Follow flag g when `scope` isn't explicit + } + // Note that since a copy is used, `search`'s `lastIndex` isn't updated *during* replacement iterations + search2 = copy(search, scope === "all" ? "g" : "", scope === "all" ? "" : "g"); + } else if (scope === "all") { + search2 = new RegExp(self.escape(String(search)), "g"); + } + result = fixed.replace.call(String(str), search2, replacement); // Fixed `replace` required for named backreferences, etc. + if (isRegex && search.global) { + search.lastIndex = 0; // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + } + return result; + }; + +/** + * Splits a string into an array of strings using a regex or string separator. Matches of the + * separator are not included in the result array. However, if `separator` is a regex that contains + * capturing groups, backreferences are spliced into the result each time `separator` is matched. + * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably + * cross-browser. + * @memberOf XRegExp + * @param {String} str String to split. + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + * @example + * + * // Basic use + * XRegExp.split('a b c', ' '); + * // -> ['a', 'b', 'c'] + * + * // With limit + * XRegExp.split('a b c', ' ', 2); + * // -> ['a', 'b'] + * + * // Backreferences in result array + * XRegExp.split('..word1..', /([a-z]+)(\d+)/i); + * // -> ['..', 'word', '1', '..'] + */ + self.split = function (str, separator, limit) { + return fixed.split.call(str, separator, limit); + }; + +/** + * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and + * `sticky` arguments specify the search start position, and whether the match must start at the + * specified position only. The `lastIndex` property of the provided regex is not used, but is + * updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.test` and can be used reliably cross-browser. + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Boolean} Whether the regex matched the provided value. + * @example + * + * // Basic use + * XRegExp.test('abc', /c/); // -> true + * + * // With pos and sticky + * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false + */ + self.test = function (str, regex, pos, sticky) { + // Do this the easy way :-) + return !!self.exec(str, regex, pos, sticky); + }; + +/** + * Uninstalls optional features according to the specified options. + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.uninstall({ + * // Restores native regex methods + * natives: true, + * + * // Disables additional syntax and flag extensions + * extensibility: true + * }); + * + * // With an options string + * XRegExp.uninstall('natives extensibility'); + * + * // Using a shortcut to uninstall all optional features + * XRegExp.uninstall('all'); + */ + self.uninstall = function (options) { + options = prepareOptions(options); + if (features.natives && options.natives) { + setNatives(false); + } + if (features.extensibility && options.extensibility) { + setExtensibility(false); + } + }; + +/** + * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as + * regex objects or strings. Metacharacters are escaped in patterns provided as strings. + * Backreferences in provided regex objects are automatically renumbered to work correctly. Native + * flags used by provided regexes are ignored in favor of the `flags` argument. + * @memberOf XRegExp + * @param {Array} patterns Regexes and strings to combine. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Union of the provided regexes and strings. + * @example + * + * XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i'); + * // -> /a\+b\*c|(dogs)\1|(cats)\2/i + * + * XRegExp.union([XRegExp('(?<pet>dogs)\\k<pet>'), XRegExp('(?<pet>cats)\\k<pet>')]); + * // -> XRegExp('(?<pet>dogs)\\k<pet>|(?<pet>cats)\\k<pet>') + */ + self.union = function (patterns, flags) { + var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g, + numCaptures = 0, + numPriorCaptures, + captureNames, + rewrite = function (match, paren, backref) { + var name = captureNames[numCaptures - numPriorCaptures]; + if (paren) { // Capturing group + ++numCaptures; + if (name) { // If the current capture has a name + return "(?<" + name + ">"; + } + } else if (backref) { // Backreference + return "\\" + (+backref + numPriorCaptures); + } + return match; + }, + output = [], + pattern, + i; + if (!(isType(patterns, "array") && patterns.length)) { + throw new TypeError("patterns must be a nonempty array"); + } + for (i = 0; i < patterns.length; ++i) { + pattern = patterns[i]; + if (self.isRegExp(pattern)) { + numPriorCaptures = numCaptures; + captureNames = (pattern.xregexp && pattern.xregexp.captureNames) || []; + // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns + // are independently valid; helps keep this simple. Named captures are put back + output.push(self(pattern.source).source.replace(parts, rewrite)); + } else { + output.push(self.escape(pattern)); + } + } + return self(output.join("|"), flags); + }; + +/** + * The XRegExp version number. + * @static + * @memberOf XRegExp + * @type String + */ + self.version = "2.0.0"; + +/*-------------------------------------- + * Fixed/extended native methods + *------------------------------------*/ + +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `RegExp.prototype.exec`. Calling `XRegExp.install('natives')` uses this to + * override the native method. Use via `XRegExp.exec` without overriding natives. + * @private + * @param {String} str String to search. + * @returns {Array} Match array with named backreference properties, or null. + */ + fixed.exec = function (str) { + var match, name, r2, origLastIndex, i; + if (!this.global) { + origLastIndex = this.lastIndex; + } + match = nativ.exec.apply(this, arguments); + if (match) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && lastIndexOf(match, "") > -1) { + r2 = new RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call(String(str).slice(match.index), r2, function () { + var i; + for (i = 1; i < arguments.length - 2; ++i) { + if (arguments[i] === undef) { + match[i] = undef; + } + } + }); + } + // Attach named capture properties + if (this.xregexp && this.xregexp.captureNames) { + for (i = 1; i < match.length; ++i) { + name = this.xregexp.captureNames[i - 1]; + if (name) { + match[name] = match[i]; + } + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (this.global && !match[0].length && (this.lastIndex > match.index)) { + this.lastIndex = match.index; + } + } + if (!this.global) { + this.lastIndex = origLastIndex; // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + } + return match; + }; + +/** + * Fixes browser bugs in the native `RegExp.prototype.test`. Calling `XRegExp.install('natives')` + * uses this to override the native method. + * @private + * @param {String} str String to search. + * @returns {Boolean} Whether the regex matched the provided value. + */ + fixed.test = function (str) { + // Do this the easy way :-) + return !!fixed.exec.call(this, str); + }; + +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `String.prototype.match`. Calling `XRegExp.install('natives')` uses this to + * override the native method. + * @private + * @param {RegExp} regex Regex to search with. + * @returns {Array} If `regex` uses flag g, an array of match strings or null. Without flag g, the + * result of calling `regex.exec(this)`. + */ + fixed.match = function (regex) { + if (!self.isRegExp(regex)) { + regex = new RegExp(regex); // Use native `RegExp` + } else if (regex.global) { + var result = nativ.match.apply(this, arguments); + regex.lastIndex = 0; // Fixes IE bug + return result; + } + return fixed.exec.call(regex, this); + }; + +/** + * Adds support for `${n}` tokens for named and numbered backreferences in replacement text, and + * provides named backreferences to replacement functions as `arguments[0].name`. Also fixes + * browser bugs in replacement text syntax when performing a replacement using a nonregex search + * value, and the value of a replacement regex's `lastIndex` property during replacement iterations + * and upon completion. Note that this doesn't support SpiderMonkey's proprietary third (`flags`) + * argument. Calling `XRegExp.install('natives')` uses this to override the native method. Use via + * `XRegExp.replace` without overriding natives. + * @private + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * @returns {String} New string with one or all matches replaced. + */ + fixed.replace = function (search, replacement) { + var isRegex = self.isRegExp(search), captureNames, result, str, origLastIndex; + if (isRegex) { + if (search.xregexp) { + captureNames = search.xregexp.captureNames; + } + if (!search.global) { + origLastIndex = search.lastIndex; + } + } else { + search += ""; + } + if (isType(replacement, "function")) { + result = nativ.replace.call(String(this), search, function () { + var args = arguments, i; + if (captureNames) { + // Change the `arguments[0]` string primitive to a `String` object that can store properties + args[0] = new String(args[0]); + // Store named backreferences on the first argument + for (i = 0; i < captureNames.length; ++i) { + if (captureNames[i]) { + args[0][captureNames[i]] = args[i + 1]; + } + } + } + // Update `lastIndex` before calling `replacement`. + // Fixes IE, Chrome, Firefox, Safari bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1) + if (isRegex && search.global) { + search.lastIndex = args[args.length - 2] + args[0].length; + } + return replacement.apply(null, args); + }); + } else { + str = String(this); // Ensure `args[args.length - 1]` will be a string when given nonstring `this` + result = nativ.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return nativ.replace.call(String(replacement), replacementToken, function ($0, $1, $2) { + var n; + // Named or numbered backreference with curly brackets + if ($1) { + /* XRegExp behavior for `${n}`: + * 1. Backreference to numbered capture, where `n` is 1+ digits. `0`, `00`, etc. is the entire match. + * 2. Backreference to named capture `n`, if it exists and is not a number overridden by numbered capture. + * 3. Otherwise, it's an error. + */ + n = +$1; // Type-convert; drop leading zeros + if (n <= args.length - 3) { + return args[n] || ""; + } + n = captureNames ? lastIndexOf(captureNames, $1) : -1; + if (n < 0) { + throw new SyntaxError("backreference to undefined group " + $0); + } + return args[n + 1] || ""; + } + // Else, special variable or numbered backreference (without curly brackets) + if ($2 === "$") return "$"; + if ($2 === "&" || +$2 === 0) return args[0]; // $&, $0 (not followed by 1-9), $00 + if ($2 === "`") return args[args.length - 1].slice(0, args[args.length - 2]); + if ($2 === "'") return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Else, numbered backreference (without curly brackets) + $2 = +$2; // Type-convert; drop leading zero + /* XRegExp behavior: + * - Backreferences without curly brackets end after 1 or 2 digits. Use `${..}` for more digits. + * - `$1` is an error if there are no capturing groups. + * - `$10` is an error if there are less than 10 capturing groups. Use `${1}0` instead. + * - `$01` is equivalent to `$1` if a capturing group exists, otherwise it's an error. + * - `$0` (not followed by 1-9), `$00`, and `$&` are the entire match. + * Native behavior, for comparison: + * - Backreferences end after 1 or 2 digits. Cannot use backreference to capturing group 100+. + * - `$1` is a literal `$1` if there are no capturing groups. + * - `$10` is `$1` followed by a literal `0` if there are less than 10 capturing groups. + * - `$01` is equivalent to `$1` if a capturing group exists, otherwise it's a literal `$01`. + * - `$0` is a literal `$0`. `$&` is the entire match. + */ + if (!isNaN($2)) { + if ($2 > args.length - 3) { + throw new SyntaxError("backreference to undefined group " + $0); + } + return args[$2] || ""; + } + throw new SyntaxError("invalid token " + $0); + }); + }); + } + if (isRegex) { + if (search.global) { + search.lastIndex = 0; // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + } else { + search.lastIndex = origLastIndex; // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + } + } + return result; + }; + +/** + * Fixes browser bugs in the native `String.prototype.split`. Calling `XRegExp.install('natives')` + * uses this to override the native method. Use via `XRegExp.split` without overriding natives. + * @private + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + */ + fixed.split = function (separator, limit) { + if (!self.isRegExp(separator)) { + return nativ.split.apply(this, arguments); // use faster native method + } + var str = String(this), + origLastIndex = separator.lastIndex, + output = [], + lastLastIndex = 0, + lastLength; + /* Values for `limit`, per the spec: + * If undefined: pow(2,32) - 1 + * If 0, Infinity, or NaN: 0 + * If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32); + * If negative number: pow(2,32) - floor(abs(limit)) + * If other: Type-convert, then use the above rules + */ + limit = (limit === undef ? -1 : limit) >>> 0; + self.forEach(str, separator, function (match) { + if ((match.index + match[0].length) > lastLastIndex) { // != `if (match[0].length)` + output.push(str.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < str.length) { + Array.prototype.push.apply(output, match.slice(1)); + } + lastLength = match[0].length; + lastLastIndex = match.index + lastLength; + } + }); + if (lastLastIndex === str.length) { + if (!nativ.test.call(separator, "") || lastLength) { + output.push(""); + } + } else { + output.push(str.slice(lastLastIndex)); + } + separator.lastIndex = origLastIndex; + return output.length > limit ? output.slice(0, limit) : output; + }; + +/*-------------------------------------- + * Built-in tokens + *------------------------------------*/ + +// Shortcut + add = addToken.on; + +/* Letter identity escapes that natively match literal characters: \p, \P, etc. + * Should be SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross- + * browser consistency and to reserve their syntax, but lets them be superseded by XRegExp addons. + */ + add(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4})|x(?![\dA-Fa-f]{2}))/, + function (match, scope) { + // \B is allowed in default scope only + if (match[1] === "B" && scope === defaultScope) { + return match[0]; + } + throw new SyntaxError("invalid escape " + match[0]); + }, + {scope: "all"}); + +/* Empty character class: [] or [^] + * Fixes a critical cross-browser syntax inconsistency. Unless this is standardized (per the spec), + * regex syntax can't be accurately parsed because character class endings can't be determined. + */ + add(/\[(\^?)]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[1] ? "[\\s\\S]" : "\\b\\B"; + }); + +/* Comment pattern: (?# ) + * Inline comments are an alternative to the line comments allowed in free-spacing mode (flag x). + */ + add(/(?:\(\?#[^)]*\))+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }); + +/* Named backreference: \k<name> + * Backreference names can use the characters A-Z, a-z, 0-9, _, and $ only. + */ + add(/\\k<([\w$]+)>/, + function (match) { + var index = isNaN(match[1]) ? (lastIndexOf(this.captureNames, match[1]) + 1) : +match[1], + endIndex = match.index + match[0].length; + if (!index || index > this.captureNames.length) { + throw new SyntaxError("backreference to undefined group " + match[0]); + } + // Keep backreferences separate from subsequent literal numbers + return "\\" + index + ( + endIndex === match.input.length || isNaN(match.input.charAt(endIndex)) ? "" : "(?:)" + ); + }); + +/* Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only. + */ + add(/(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + { + trigger: function () { + return this.hasFlag("x"); + }, + customFlags: "x" + }); + +/* Dot, in dotall mode (aka singleline mode, flag s) only. + */ + add(/\./, + function () { + return "[\\s\\S]"; + }, + { + trigger: function () { + return this.hasFlag("s"); + }, + customFlags: "s" + }); + +/* Named capturing group; match the opening delimiter only: (?<name> + * Capture names can use the characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. + * Supports Python-style (?P<name> as an alternate syntax to avoid issues in recent Opera (which + * natively supports the Python-style syntax). Otherwise, XRegExp might treat numbered + * backreferences to Python-style named capture as octals. + */ + add(/\(\?P?<([\w$]+)>/, + function (match) { + if (!isNaN(match[1])) { + // Avoid incorrect lookups, since named backreferences are added to match arrays + throw new SyntaxError("can't use integer as capture name " + match[0]); + } + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + }); + +/* Numbered backreference or octal, plus any following digits: \0, \11, etc. + * Octals except \0 not followed by 0-9 and backreferences to unopened capture groups throw an + * error. Other matches are returned unaltered. IE <= 8 doesn't support backreferences greater than + * \99 in regex syntax. + */ + add(/\\(\d+)/, + function (match, scope) { + if (!(scope === defaultScope && /^[1-9]/.test(match[1]) && +match[1] <= this.captureNames.length) && + match[1] !== "0") { + throw new SyntaxError("can't use octal escape or backreference to undefined group " + match[0]); + } + return match[0]; + }, + {scope: "all"}); + +/* Capturing group; match the opening parenthesis only. + * Required for support of named capturing groups. Also adds explicit capture mode (flag n). + */ + add(/\((?!\?)/, + function () { + if (this.hasFlag("n")) { + return "(?:"; + } + this.captureNames.push(null); + return "("; + }, + {customFlags: "n"}); + +/*-------------------------------------- + * Expose XRegExp + *------------------------------------*/ + +// For CommonJS enviroments + if (typeof exports !== "undefined") { + exports.XRegExp = self; + } + + return self; + +}()); + + +/***** unicode-base.js *****/ + +/*! + * XRegExp Unicode Base v1.0.0 + * (c) 2008-2012 Steven Levithan <http://xregexp.com/> + * MIT License + * Uses Unicode 6.1 <http://unicode.org/> + */ + +/** + * Adds support for the `\p{L}` or `\p{Letter}` Unicode category. Addon packages for other Unicode + * categories, scripts, blocks, and properties are available separately. All Unicode tokens can be + * inverted using `\P{..}` or `\p{^..}`. Token names are case insensitive, and any spaces, hyphens, + * and underscores are ignored. + * @requires XRegExp + */ +(function (XRegExp) { + "use strict"; + + var unicode = {}; + +/*-------------------------------------- + * Private helper functions + *------------------------------------*/ + +// Generates a standardized token name (lowercase, with hyphens, spaces, and underscores removed) + function slug(name) { + return name.replace(/[- _]+/g, "").toLowerCase(); + } + +// Expands a list of Unicode code points and ranges to be usable in a regex character class + function expand(str) { + return str.replace(/\w{4}/g, "\\u$&"); + } + +// Adds leading zeros if shorter than four characters + function pad4(str) { + while (str.length < 4) { + str = "0" + str; + } + return str; + } + +// Converts a hexadecimal number to decimal + function dec(hex) { + return parseInt(hex, 16); + } + +// Converts a decimal number to hexadecimal + function hex(dec) { + return parseInt(dec, 10).toString(16); + } + +// Inverts a list of Unicode code points and ranges + function invert(range) { + var output = [], + lastEnd = -1, + start; + XRegExp.forEach(range, /\\u(\w{4})(?:-\\u(\w{4}))?/, function (m) { + start = dec(m[1]); + if (start > (lastEnd + 1)) { + output.push("\\u" + pad4(hex(lastEnd + 1))); + if (start > (lastEnd + 2)) { + output.push("-\\u" + pad4(hex(start - 1))); + } + } + lastEnd = dec(m[2] || m[1]); + }); + if (lastEnd < 0xFFFF) { + output.push("\\u" + pad4(hex(lastEnd + 1))); + if (lastEnd < 0xFFFE) { + output.push("-\\uFFFF"); + } + } + return output.join(""); + } + +// Generates an inverted token on first use + function cacheInversion(item) { + return unicode["^" + item] || (unicode["^" + item] = invert(unicode[item])); + } + +/*-------------------------------------- + * Core functionality + *------------------------------------*/ + + XRegExp.install("extensibility"); + +/** + * Adds to the list of Unicode properties that XRegExp regexes can match via \p{..} or \P{..}. + * @memberOf XRegExp + * @param {Object} pack Named sets of Unicode code points and ranges. + * @param {Object} [aliases] Aliases for the primary token names. + * @example + * + * XRegExp.addUnicodePackage({ + * XDigit: '0030-00390041-00460061-0066' // 0-9A-Fa-f + * }, { + * XDigit: 'Hexadecimal' + * }); + */ + XRegExp.addUnicodePackage = function (pack, aliases) { + var p; + if (!XRegExp.isInstalled("extensibility")) { + throw new Error("extensibility must be installed before adding Unicode packages"); + } + if (pack) { + for (p in pack) { + if (pack.hasOwnProperty(p)) { + unicode[slug(p)] = expand(pack[p]); + } + } + } + if (aliases) { + for (p in aliases) { + if (aliases.hasOwnProperty(p)) { + unicode[slug(aliases[p])] = unicode[slug(p)]; + } + } + } + }; + +/* Adds data for the Unicode `Letter` category. Addon packages include other categories, scripts, + * blocks, and properties. + */ + XRegExp.addUnicodePackage({ + L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705D0-05EA05F0-05F20620-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280840-085808A008A2-08AC0904-0939093D09500958-09610971-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDAAE0-AAEAAAF2-AAF4AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC" + }, { + L: "Letter" + }); + +/* Adds Unicode property syntax to XRegExp: \p{..}, \P{..}, \p{^..} + */ + XRegExp.addToken( + /\\([pP]){(\^?)([^}]*)}/, + function (match, scope) { + var inv = (match[1] === "P" || match[2]) ? "^" : "", + item = slug(match[3]); + // The double negative \P{^..} is invalid + if (match[1] === "P" && match[2]) { + throw new SyntaxError("invalid double negation \\P{^"); + } + if (!unicode.hasOwnProperty(item)) { + throw new SyntaxError("invalid or unknown Unicode property " + match[0]); + } + return scope === "class" ? + (inv ? cacheInversion(item) : unicode[item]) : + "[" + inv + unicode[item] + "]"; + }, + {scope: "all"} + ); + +}(XRegExp)); + + +/***** unicode-categories.js *****/ + +/*! + * XRegExp Unicode Categories v1.2.0 + * (c) 2010-2012 Steven Levithan <http://xregexp.com/> + * MIT License + * Uses Unicode 6.1 <http://unicode.org/> + */ + +/** + * Adds support for all Unicode categories (aka properties) E.g., `\p{Lu}` or + * `\p{Uppercase Letter}`. Token names are case insensitive, and any spaces, hyphens, and + * underscores are ignored. + * @requires XRegExp, XRegExp Unicode Base + */ +(function (XRegExp) { + "use strict"; + + if (!XRegExp.addUnicodePackage) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Categories"); + } + + XRegExp.install("extensibility"); + + XRegExp.addUnicodePackage({ + //L: "", // Included in the Unicode Base addon + Ll: "0061-007A00B500DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1D2B1D6B-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7B2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7FAFB00-FB06FB13-FB17FF41-FF5A", + Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A", + Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", + Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D6A1D781D9B-1DBF2071207F2090-209C2C7C2C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A7F8A7F9A9CFAA70AADDAAF3AAF4FF70FF9EFF9F", + Lo: "00AA00BA01BB01C0-01C3029405D0-05EA05F0-05F20620-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150840-085808A008A2-08AC0904-0939093D09500958-09610972-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA10FD-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF11CF51CF62135-21382D30-2D672D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCAAE0-AAEAAAF2AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", + M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0903093A-093C093E-094F0951-0957096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F8D-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135D-135F1712-17141732-1734175217531772177317B4-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAD1BE6-1BF31C24-1C371CD0-1CD21CD4-1CE81CED1CF2-1CF41DC0-1DE61DFC-1DFF20D0-20F02CEF-2CF12D7F2DE0-2DFF302A-302F3099309AA66F-A672A674-A67DA69FA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAEB-AAEFAAF5AAF6ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", + Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0902093A093C0941-0948094D0951-095709620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F8D-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135D-135F1712-17141732-1734175217531772177317B417B517B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91BAB1BE61BE81BE91BED1BEF-1BF11C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF20D0-20DC20E120E5-20F02CEF-2CF12D7F2DE0-2DFF302A-302D3099309AA66FA674-A67DA69FA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAECAAEDAAF6ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", + Mc: "0903093B093E-09400949-094C094E094F0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1BAC1BAD1BE71BEA-1BEC1BEE1BF21BF31C24-1C2B1C341C351CE11CF21CF3302E302FA823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BAAEBAAEEAAEFAAF5ABE3ABE4ABE6ABE7ABE9ABEAABEC", + Me: "0488048920DD-20E020E2-20E4A670-A672", + N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0B72-0B770BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", + Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19D91A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", + Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", + No: "00B200B300B900BC-00BE09F4-09F90B72-0B770BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F919DA20702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA830-A835", + P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100A700AB00B600B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F3A-0F3D0F850FD0-0FD40FD90FDA104A-104F10FB1360-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2D702E00-2E2E2E30-2E3B3001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", + Pd: "002D058A05BE140018062010-20152E172E1A2E3A2E3B301C303030A0FE31FE32FE58FE63FF0D", + Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", + Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", + Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", + Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", + Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", + Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100A700B600B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F850FD0-0FD40FD90FDA104A-104F10FB1360-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2D702E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E30-2E393001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", + S: "0024002B003C-003E005E0060007C007E00A2-00A600A800A900AC00AE-00B100B400B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F60482058F0606-0608060B060E060F06DE06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0D790E3F0F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-139917DB194019DE-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B9210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23F32400-24262440-244A249C-24E92500-26FF2701-27672794-27C427C7-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FBB2-FBC1FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", + Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C21182140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", + Sc: "002400A2-00A5058F060B09F209F309FB0AF10BF90E3F17DB20A0-20B9A838FDFCFE69FF04FFE0FFE1FFE5FFE6", + Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFBB2-FBC1FF3EFF40FFE3", + So: "00A600A900AE00B00482060E060F06DE06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0D790F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-1399194019DE-19FF1B61-1B6A1B74-1B7C210021012103-210621082109211421162117211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23F32400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26FF2701-27672794-27BF2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", + Z: "002000A01680180E2000-200A20282029202F205F3000", + Zs: "002000A01680180E2000-200A202F205F3000", + Zl: "2028", + Zp: "2029", + C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-0605061C061D06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", + Cc: "0000-001F007F-009F", + Cf: "00AD0600-060406DD070F200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", + Co: "E000-F8FF", + Cs: "D800-DFFF", + Cn: "03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-05FF0605061C061D070E074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" + }, { + //L: "Letter", // Included in the Unicode Base addon + Ll: "Lowercase_Letter", + Lu: "Uppercase_Letter", + Lt: "Titlecase_Letter", + Lm: "Modifier_Letter", + Lo: "Other_Letter", + M: "Mark", + Mn: "Nonspacing_Mark", + Mc: "Spacing_Mark", + Me: "Enclosing_Mark", + N: "Number", + Nd: "Decimal_Number", + Nl: "Letter_Number", + No: "Other_Number", + P: "Punctuation", + Pd: "Dash_Punctuation", + Ps: "Open_Punctuation", + Pe: "Close_Punctuation", + Pi: "Initial_Punctuation", + Pf: "Final_Punctuation", + Pc: "Connector_Punctuation", + Po: "Other_Punctuation", + S: "Symbol", + Sm: "Math_Symbol", + Sc: "Currency_Symbol", + Sk: "Modifier_Symbol", + So: "Other_Symbol", + Z: "Separator", + Zs: "Space_Separator", + Zl: "Line_Separator", + Zp: "Paragraph_Separator", + C: "Other", + Cc: "Control", + Cf: "Format", + Co: "Private_Use", + Cs: "Surrogate", + Cn: "Unassigned" + }); + +}(XRegExp)); + + +/***** unicode-scripts.js *****/ + +/*! + * XRegExp Unicode Scripts v1.2.0 + * (c) 2010-2012 Steven Levithan <http://xregexp.com/> + * MIT License + * Uses Unicode 6.1 <http://unicode.org/> + */ + +/** + * Adds support for all Unicode scripts in the Basic Multilingual Plane (U+0000-U+FFFF). + * E.g., `\p{Latin}`. Token names are case insensitive, and any spaces, hyphens, and underscores + * are ignored. + * @requires XRegExp, XRegExp Unicode Base + */ +(function (XRegExp) { + "use strict"; + + if (!XRegExp.addUnicodePackage) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts"); + } + + XRegExp.install("extensibility"); + + XRegExp.addUnicodePackage({ + Arabic: "0600-06040606-060B060D-061A061E0620-063F0641-064A0656-065E066A-066F0671-06DC06DE-06FF0750-077F08A008A2-08AC08E4-08FEFB50-FBC1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFCFE70-FE74FE76-FEFC", + Armenian: "0531-05560559-055F0561-0587058A058FFB13-FB17", + Balinese: "1B00-1B4B1B50-1B7C", + Bamum: "A6A0-A6F7", + Batak: "1BC0-1BF31BFC-1BFF", + Bengali: "0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB", + Bopomofo: "02EA02EB3105-312D31A0-31BA", + Braille: "2800-28FF", + Buginese: "1A00-1A1B1A1E1A1F", + Buhid: "1740-1753", + Canadian_Aboriginal: "1400-167F18B0-18F5", + Cham: "AA00-AA36AA40-AA4DAA50-AA59AA5C-AA5F", + Cherokee: "13A0-13F4", + Common: "0000-0040005B-0060007B-00A900AB-00B900BB-00BF00D700F702B9-02DF02E5-02E902EC-02FF0374037E038503870589060C061B061F06400660-066906DD096409650E3F0FD5-0FD810FB16EB-16ED173517361802180318051CD31CE11CE9-1CEC1CEE-1CF31CF51CF62000-200B200E-2064206A-20702074-207E2080-208E20A0-20B92100-21252127-2129212C-21312133-214D214F-215F21892190-23F32400-24262440-244A2460-26FF2701-27FF2900-2B4C2B50-2B592E00-2E3B2FF0-2FFB3000-300430063008-30203030-3037303C-303F309B309C30A030FB30FC3190-319F31C0-31E33220-325F327F-32CF3358-33FF4DC0-4DFFA700-A721A788-A78AA830-A839FD3EFD3FFDFDFE10-FE19FE30-FE52FE54-FE66FE68-FE6BFEFFFF01-FF20FF3B-FF40FF5B-FF65FF70FF9EFF9FFFE0-FFE6FFE8-FFEEFFF9-FFFD", + Coptic: "03E2-03EF2C80-2CF32CF9-2CFF", + Cyrillic: "0400-04840487-05271D2B1D782DE0-2DFFA640-A697A69F", + Devanagari: "0900-09500953-09630966-09770979-097FA8E0-A8FB", + Ethiopic: "1200-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-13992D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDEAB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2E", + Georgian: "10A0-10C510C710CD10D0-10FA10FC-10FF2D00-2D252D272D2D", + Glagolitic: "2C00-2C2E2C30-2C5E", + Greek: "0370-03730375-0377037A-037D038403860388-038A038C038E-03A103A3-03E103F0-03FF1D26-1D2A1D5D-1D611D66-1D6A1DBF1F00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2126", + Gujarati: "0A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF1", + Gurmukhi: "0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A75", + Han: "2E80-2E992E9B-2EF32F00-2FD5300530073021-30293038-303B3400-4DB54E00-9FCCF900-FA6DFA70-FAD9", + Hangul: "1100-11FF302E302F3131-318E3200-321E3260-327EA960-A97CAC00-D7A3D7B0-D7C6D7CB-D7FBFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", + Hanunoo: "1720-1734", + Hebrew: "0591-05C705D0-05EA05F0-05F4FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FB4F", + Hiragana: "3041-3096309D-309F", + Inherited: "0300-036F04850486064B-0655065F0670095109521CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF200C200D20D0-20F0302A-302D3099309AFE00-FE0FFE20-FE26", + Javanese: "A980-A9CDA9CF-A9D9A9DEA9DF", + Kannada: "0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF2", + Katakana: "30A1-30FA30FD-30FF31F0-31FF32D0-32FE3300-3357FF66-FF6FFF71-FF9D", + Kayah_Li: "A900-A92F", + Khmer: "1780-17DD17E0-17E917F0-17F919E0-19FF", + Lao: "0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF", + Latin: "0041-005A0061-007A00AA00BA00C0-00D600D8-00F600F8-02B802E0-02E41D00-1D251D2C-1D5C1D62-1D651D6B-1D771D79-1DBE1E00-1EFF2071207F2090-209C212A212B2132214E2160-21882C60-2C7FA722-A787A78B-A78EA790-A793A7A0-A7AAA7F8-A7FFFB00-FB06FF21-FF3AFF41-FF5A", + Lepcha: "1C00-1C371C3B-1C491C4D-1C4F", + Limbu: "1900-191C1920-192B1930-193B19401944-194F", + Lisu: "A4D0-A4FF", + Malayalam: "0D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F", + Mandaic: "0840-085B085E", + Meetei_Mayek: "AAE0-AAF6ABC0-ABEDABF0-ABF9", + Mongolian: "1800180118041806-180E1810-18191820-18771880-18AA", + Myanmar: "1000-109FAA60-AA7B", + New_Tai_Lue: "1980-19AB19B0-19C919D0-19DA19DE19DF", + Nko: "07C0-07FA", + Ogham: "1680-169C", + Ol_Chiki: "1C50-1C7F", + Oriya: "0B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B77", + Phags_Pa: "A840-A877", + Rejang: "A930-A953A95F", + Runic: "16A0-16EA16EE-16F0", + Samaritan: "0800-082D0830-083E", + Saurashtra: "A880-A8C4A8CE-A8D9", + Sinhala: "0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF4", + Sundanese: "1B80-1BBF1CC0-1CC7", + Syloti_Nagri: "A800-A82B", + Syriac: "0700-070D070F-074A074D-074F", + Tagalog: "1700-170C170E-1714", + Tagbanwa: "1760-176C176E-177017721773", + Tai_Le: "1950-196D1970-1974", + Tai_Tham: "1A20-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD", + Tai_Viet: "AA80-AAC2AADB-AADF", + Tamil: "0B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA", + Telugu: "0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F", + Thaana: "0780-07B1", + Thai: "0E01-0E3A0E40-0E5B", + Tibetan: "0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FD40FD90FDA", + Tifinagh: "2D30-2D672D6F2D702D7F", + Vai: "A500-A62B", + Yi: "A000-A48CA490-A4C6" + }); + +}(XRegExp)); + + +/***** unicode-blocks.js *****/ + +/*! + * XRegExp Unicode Blocks v1.2.0 + * (c) 2010-2012 Steven Levithan <http://xregexp.com/> + * MIT License + * Uses Unicode 6.1 <http://unicode.org/> + */ + +/** + * Adds support for all Unicode blocks in the Basic Multilingual Plane (U+0000-U+FFFF). Unicode + * blocks use the prefix "In". E.g., `\p{InBasicLatin}`. Token names are case insensitive, and any + * spaces, hyphens, and underscores are ignored. + * @requires XRegExp, XRegExp Unicode Base + */ +(function (XRegExp) { + "use strict"; + + if (!XRegExp.addUnicodePackage) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Blocks"); + } + + XRegExp.install("extensibility"); + + XRegExp.addUnicodePackage({ + InBasic_Latin: "0000-007F", + InLatin_1_Supplement: "0080-00FF", + InLatin_Extended_A: "0100-017F", + InLatin_Extended_B: "0180-024F", + InIPA_Extensions: "0250-02AF", + InSpacing_Modifier_Letters: "02B0-02FF", + InCombining_Diacritical_Marks: "0300-036F", + InGreek_and_Coptic: "0370-03FF", + InCyrillic: "0400-04FF", + InCyrillic_Supplement: "0500-052F", + InArmenian: "0530-058F", + InHebrew: "0590-05FF", + InArabic: "0600-06FF", + InSyriac: "0700-074F", + InArabic_Supplement: "0750-077F", + InThaana: "0780-07BF", + InNKo: "07C0-07FF", + InSamaritan: "0800-083F", + InMandaic: "0840-085F", + InArabic_Extended_A: "08A0-08FF", + InDevanagari: "0900-097F", + InBengali: "0980-09FF", + InGurmukhi: "0A00-0A7F", + InGujarati: "0A80-0AFF", + InOriya: "0B00-0B7F", + InTamil: "0B80-0BFF", + InTelugu: "0C00-0C7F", + InKannada: "0C80-0CFF", + InMalayalam: "0D00-0D7F", + InSinhala: "0D80-0DFF", + InThai: "0E00-0E7F", + InLao: "0E80-0EFF", + InTibetan: "0F00-0FFF", + InMyanmar: "1000-109F", + InGeorgian: "10A0-10FF", + InHangul_Jamo: "1100-11FF", + InEthiopic: "1200-137F", + InEthiopic_Supplement: "1380-139F", + InCherokee: "13A0-13FF", + InUnified_Canadian_Aboriginal_Syllabics: "1400-167F", + InOgham: "1680-169F", + InRunic: "16A0-16FF", + InTagalog: "1700-171F", + InHanunoo: "1720-173F", + InBuhid: "1740-175F", + InTagbanwa: "1760-177F", + InKhmer: "1780-17FF", + InMongolian: "1800-18AF", + InUnified_Canadian_Aboriginal_Syllabics_Extended: "18B0-18FF", + InLimbu: "1900-194F", + InTai_Le: "1950-197F", + InNew_Tai_Lue: "1980-19DF", + InKhmer_Symbols: "19E0-19FF", + InBuginese: "1A00-1A1F", + InTai_Tham: "1A20-1AAF", + InBalinese: "1B00-1B7F", + InSundanese: "1B80-1BBF", + InBatak: "1BC0-1BFF", + InLepcha: "1C00-1C4F", + InOl_Chiki: "1C50-1C7F", + InSundanese_Supplement: "1CC0-1CCF", + InVedic_Extensions: "1CD0-1CFF", + InPhonetic_Extensions: "1D00-1D7F", + InPhonetic_Extensions_Supplement: "1D80-1DBF", + InCombining_Diacritical_Marks_Supplement: "1DC0-1DFF", + InLatin_Extended_Additional: "1E00-1EFF", + InGreek_Extended: "1F00-1FFF", + InGeneral_Punctuation: "2000-206F", + InSuperscripts_and_Subscripts: "2070-209F", + InCurrency_Symbols: "20A0-20CF", + InCombining_Diacritical_Marks_for_Symbols: "20D0-20FF", + InLetterlike_Symbols: "2100-214F", + InNumber_Forms: "2150-218F", + InArrows: "2190-21FF", + InMathematical_Operators: "2200-22FF", + InMiscellaneous_Technical: "2300-23FF", + InControl_Pictures: "2400-243F", + InOptical_Character_Recognition: "2440-245F", + InEnclosed_Alphanumerics: "2460-24FF", + InBox_Drawing: "2500-257F", + InBlock_Elements: "2580-259F", + InGeometric_Shapes: "25A0-25FF", + InMiscellaneous_Symbols: "2600-26FF", + InDingbats: "2700-27BF", + InMiscellaneous_Mathematical_Symbols_A: "27C0-27EF", + InSupplemental_Arrows_A: "27F0-27FF", + InBraille_Patterns: "2800-28FF", + InSupplemental_Arrows_B: "2900-297F", + InMiscellaneous_Mathematical_Symbols_B: "2980-29FF", + InSupplemental_Mathematical_Operators: "2A00-2AFF", + InMiscellaneous_Symbols_and_Arrows: "2B00-2BFF", + InGlagolitic: "2C00-2C5F", + InLatin_Extended_C: "2C60-2C7F", + InCoptic: "2C80-2CFF", + InGeorgian_Supplement: "2D00-2D2F", + InTifinagh: "2D30-2D7F", + InEthiopic_Extended: "2D80-2DDF", + InCyrillic_Extended_A: "2DE0-2DFF", + InSupplemental_Punctuation: "2E00-2E7F", + InCJK_Radicals_Supplement: "2E80-2EFF", + InKangxi_Radicals: "2F00-2FDF", + InIdeographic_Description_Characters: "2FF0-2FFF", + InCJK_Symbols_and_Punctuation: "3000-303F", + InHiragana: "3040-309F", + InKatakana: "30A0-30FF", + InBopomofo: "3100-312F", + InHangul_Compatibility_Jamo: "3130-318F", + InKanbun: "3190-319F", + InBopomofo_Extended: "31A0-31BF", + InCJK_Strokes: "31C0-31EF", + InKatakana_Phonetic_Extensions: "31F0-31FF", + InEnclosed_CJK_Letters_and_Months: "3200-32FF", + InCJK_Compatibility: "3300-33FF", + InCJK_Unified_Ideographs_Extension_A: "3400-4DBF", + InYijing_Hexagram_Symbols: "4DC0-4DFF", + InCJK_Unified_Ideographs: "4E00-9FFF", + InYi_Syllables: "A000-A48F", + InYi_Radicals: "A490-A4CF", + InLisu: "A4D0-A4FF", + InVai: "A500-A63F", + InCyrillic_Extended_B: "A640-A69F", + InBamum: "A6A0-A6FF", + InModifier_Tone_Letters: "A700-A71F", + InLatin_Extended_D: "A720-A7FF", + InSyloti_Nagri: "A800-A82F", + InCommon_Indic_Number_Forms: "A830-A83F", + InPhags_pa: "A840-A87F", + InSaurashtra: "A880-A8DF", + InDevanagari_Extended: "A8E0-A8FF", + InKayah_Li: "A900-A92F", + InRejang: "A930-A95F", + InHangul_Jamo_Extended_A: "A960-A97F", + InJavanese: "A980-A9DF", + InCham: "AA00-AA5F", + InMyanmar_Extended_A: "AA60-AA7F", + InTai_Viet: "AA80-AADF", + InMeetei_Mayek_Extensions: "AAE0-AAFF", + InEthiopic_Extended_A: "AB00-AB2F", + InMeetei_Mayek: "ABC0-ABFF", + InHangul_Syllables: "AC00-D7AF", + InHangul_Jamo_Extended_B: "D7B0-D7FF", + InHigh_Surrogates: "D800-DB7F", + InHigh_Private_Use_Surrogates: "DB80-DBFF", + InLow_Surrogates: "DC00-DFFF", + InPrivate_Use_Area: "E000-F8FF", + InCJK_Compatibility_Ideographs: "F900-FAFF", + InAlphabetic_Presentation_Forms: "FB00-FB4F", + InArabic_Presentation_Forms_A: "FB50-FDFF", + InVariation_Selectors: "FE00-FE0F", + InVertical_Forms: "FE10-FE1F", + InCombining_Half_Marks: "FE20-FE2F", + InCJK_Compatibility_Forms: "FE30-FE4F", + InSmall_Form_Variants: "FE50-FE6F", + InArabic_Presentation_Forms_B: "FE70-FEFF", + InHalfwidth_and_Fullwidth_Forms: "FF00-FFEF", + InSpecials: "FFF0-FFFF" + }); + +}(XRegExp)); + + +/***** unicode-properties.js *****/ + +/*! + * XRegExp Unicode Properties v1.0.0 + * (c) 2012 Steven Levithan <http://xregexp.com/> + * MIT License + * Uses Unicode 6.1 <http://unicode.org/> + */ + +/** + * Adds Unicode properties necessary to meet Level 1 Unicode support (detailed in UTS#18 RL1.2). + * Includes code points from the Basic Multilingual Plane (U+0000-U+FFFF) only. Token names are + * case insensitive, and any spaces, hyphens, and underscores are ignored. + * @requires XRegExp, XRegExp Unicode Base + */ +(function (XRegExp) { + "use strict"; + + if (!XRegExp.addUnicodePackage) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Properties"); + } + + XRegExp.install("extensibility"); + + XRegExp.addUnicodePackage({ + Alphabetic: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE03450370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705B0-05BD05BF05C105C205C405C505C705D0-05EA05F0-05F20610-061A0620-06570659-065F066E-06D306D5-06DC06E1-06E806ED-06EF06FA-06FC06FF0710-073F074D-07B107CA-07EA07F407F507FA0800-0817081A-082C0840-085808A008A2-08AC08E4-08E908F0-08FE0900-093B093D-094C094E-09500955-09630971-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BD-09C409C709C809CB09CC09CE09D709DC09DD09DF-09E309F009F10A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3E-0A420A470A480A4B0A4C0A510A59-0A5C0A5E0A70-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD-0AC50AC7-0AC90ACB0ACC0AD00AE0-0AE30B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D-0B440B470B480B4B0B4C0B560B570B5C0B5D0B5F-0B630B710B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCC0BD00BD70C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4C0C550C560C580C590C60-0C630C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD-0CC40CC6-0CC80CCA-0CCC0CD50CD60CDE0CE0-0CE30CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4C0D4E0D570D60-0D630D7A-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCF-0DD40DD60DD8-0DDF0DF20DF30E01-0E3A0E40-0E460E4D0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60ECD0EDC-0EDF0F000F40-0F470F49-0F6C0F71-0F810F88-0F970F99-0FBC1000-10361038103B-103F1050-10621065-1068106E-1086108E109C109D10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135F1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA16EE-16F01700-170C170E-17131720-17331740-17531760-176C176E-1770177217731780-17B317B6-17C817D717DC1820-18771880-18AA18B0-18F51900-191C1920-192B1930-19381950-196D1970-19741980-19AB19B0-19C91A00-1A1B1A20-1A5E1A61-1A741AA71B00-1B331B35-1B431B45-1B4B1B80-1BA91BAC-1BAF1BBA-1BE51BE7-1BF11C00-1C351C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF31CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E2160-218824B6-24E92C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2DFF2E2F3005-30073021-30293031-30353038-303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA674-A67BA67F-A697A69F-A6EFA717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A827A840-A873A880-A8C3A8F2-A8F7A8FBA90A-A92AA930-A952A960-A97CA980-A9B2A9B4-A9BFA9CFAA00-AA36AA40-AA4DAA60-AA76AA7AAA80-AABEAAC0AAC2AADB-AADDAAE0-AAEFAAF2-AAF5AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEAAC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", + Uppercase: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F21452160-216F218324B6-24CF2C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A", + Lowercase: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02B802C002C102E0-02E40345037103730377037A-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1DBF1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF72071207F2090-209C210A210E210F2113212F21342139213C213D2146-2149214E2170-217F218424D0-24E92C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7D2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76F-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7F8-A7FAFB00-FB06FB13-FB17FF41-FF5A", + White_Space: "0009-000D0020008500A01680180E2000-200A20282029202F205F3000", + Noncharacter_Code_Point: "FDD0-FDEFFFFEFFFF", + Default_Ignorable_Code_Point: "00AD034F115F116017B417B5180B-180D200B-200F202A-202E2060-206F3164FE00-FE0FFEFFFFA0FFF0-FFF8", + // \p{Any} matches a code unit. To match any code point via surrogate pairs, use (?:[\0-\uD7FF\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF]) + Any: "0000-FFFF", // \p{^Any} compiles to [^\u0000-\uFFFF]; [\p{^Any}] to [] + Ascii: "0000-007F", + // \p{Assigned} is equivalent to \p{^Cn} + //Assigned: XRegExp("[\\p{^Cn}]").source.replace(/[[\]]|\\u/g, "") // Negation inside a character class triggers inversion + Assigned: "0000-0377037A-037E0384-038A038C038E-03A103A3-05270531-05560559-055F0561-05870589058A058F0591-05C705D0-05EA05F0-05F40600-06040606-061B061E-070D070F-074A074D-07B107C0-07FA0800-082D0830-083E0840-085B085E08A008A2-08AC08E4-08FE0900-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF10B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B770B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF40E01-0E3A0E3F-0E5B0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FDA1000-10C510C710CD10D0-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-139913A0-13F41400-169C16A0-16F01700-170C170E-17141720-17361740-17531760-176C176E-1770177217731780-17DD17E0-17E917F0-17F91800-180E1810-18191820-18771880-18AA18B0-18F51900-191C1920-192B1930-193B19401944-196D1970-19741980-19AB19B0-19C919D0-19DA19DE-1A1B1A1E-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD1B00-1B4B1B50-1B7C1B80-1BF31BFC-1C371C3B-1C491C4D-1C7F1CC0-1CC71CD0-1CF61D00-1DE61DFC-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2000-2064206A-20712074-208E2090-209C20A0-20B920D0-20F02100-21892190-23F32400-24262440-244A2460-26FF2701-2B4C2B50-2B592C00-2C2E2C30-2C5E2C60-2CF32CF9-2D252D272D2D2D30-2D672D6F2D702D7F-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2E3B2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB3000-303F3041-30963099-30FF3105-312D3131-318E3190-31BA31C0-31E331F0-321E3220-32FE3300-4DB54DC0-9FCCA000-A48CA490-A4C6A4D0-A62BA640-A697A69F-A6F7A700-A78EA790-A793A7A0-A7AAA7F8-A82BA830-A839A840-A877A880-A8C4A8CE-A8D9A8E0-A8FBA900-A953A95F-A97CA980-A9CDA9CF-A9D9A9DEA9DFAA00-AA36AA40-AA4DAA50-AA59AA5C-AA7BAA80-AAC2AADB-AAF6AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEDABF0-ABF9AC00-D7A3D7B0-D7C6D7CB-D7FBD800-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBC1FBD3-FD3FFD50-FD8FFD92-FDC7FDF0-FDFDFE00-FE19FE20-FE26FE30-FE52FE54-FE66FE68-FE6BFE70-FE74FE76-FEFCFEFFFF01-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDCFFE0-FFE6FFE8-FFEEFFF9-FFFD" + }); + +}(XRegExp)); + + +/***** matchrecursive.js *****/ + +/*! + * XRegExp.matchRecursive v0.2.0 + * (c) 2009-2012 Steven Levithan <http://xregexp.com/> + * MIT License + */ + +(function (XRegExp) { + "use strict"; + +/** + * Returns a match detail object composed of the provided values. + * @private + */ + function row(value, name, start, end) { + return {value:value, name:name, start:start, end:end}; + } + +/** + * Returns an array of match strings between outermost left and right delimiters, or an array of + * objects with detailed match parts and position data. An error is thrown if delimiters are + * unbalanced within the data. + * @memberOf XRegExp + * @param {String} str String to search. + * @param {String} left Left delimiter as an XRegExp pattern. + * @param {String} right Right delimiter as an XRegExp pattern. + * @param {String} [flags] Flags for the left and right delimiters. Use any of: `gimnsxy`. + * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options. + * @returns {Array} Array of matches, or an empty array. + * @example + * + * // Basic usage + * var str = '(t((e))s)t()(ing)'; + * XRegExp.matchRecursive(str, '\\(', '\\)', 'g'); + * // -> ['t((e))s', '', 'ing'] + * + * // Extended information mode with valueNames + * str = 'Here is <div> <div>an</div></div> example'; + * XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', { + * valueNames: ['between', 'left', 'match', 'right'] + * }); + * // -> [ + * // {name: 'between', value: 'Here is ', start: 0, end: 8}, + * // {name: 'left', value: '<div>', start: 8, end: 13}, + * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27}, + * // {name: 'right', value: '</div>', start: 27, end: 33}, + * // {name: 'between', value: ' example', start: 33, end: 41} + * // ] + * + * // Omitting unneeded parts with null valueNames, and using escapeChar + * str = '...{1}\\{{function(x,y){return y+x;}}'; + * XRegExp.matchRecursive(str, '{', '}', 'g', { + * valueNames: ['literal', null, 'value', null], + * escapeChar: '\\' + * }); + * // -> [ + * // {name: 'literal', value: '...', start: 0, end: 3}, + * // {name: 'value', value: '1', start: 4, end: 5}, + * // {name: 'literal', value: '\\{', start: 6, end: 8}, + * // {name: 'value', value: 'function(x,y){return y+x;}', start: 9, end: 35} + * // ] + * + * // Sticky mode via flag y + * str = '<1><<<2>>><3>4<5>'; + * XRegExp.matchRecursive(str, '<', '>', 'gy'); + * // -> ['1', '<<2>>', '3'] + */ + XRegExp.matchRecursive = function (str, left, right, flags, options) { + flags = flags || ""; + options = options || {}; + var global = flags.indexOf("g") > -1, + sticky = flags.indexOf("y") > -1, + basicFlags = flags.replace(/y/g, ""), // Flag y controlled internally + escapeChar = options.escapeChar, + vN = options.valueNames, + output = [], + openTokens = 0, + delimStart = 0, + delimEnd = 0, + lastOuterEnd = 0, + outerStart, + innerStart, + leftMatch, + rightMatch, + esc; + left = XRegExp(left, basicFlags); + right = XRegExp(right, basicFlags); + + if (escapeChar) { + if (escapeChar.length > 1) { + throw new SyntaxError("can't use more than one escape character"); + } + escapeChar = XRegExp.escape(escapeChar); + // Using XRegExp.union safely rewrites backreferences in `left` and `right` + esc = new RegExp( + "(?:" + escapeChar + "[\\S\\s]|(?:(?!" + XRegExp.union([left, right]).source + ")[^" + escapeChar + "])+)+", + flags.replace(/[^im]+/g, "") // Flags gy not needed here; flags nsx handled by XRegExp + ); + } + + while (true) { + // If using an escape character, advance to the delimiter's next starting position, + // skipping any escaped characters in between + if (escapeChar) { + delimEnd += (XRegExp.exec(str, esc, delimEnd, "sticky") || [""])[0].length; + } + leftMatch = XRegExp.exec(str, left, delimEnd); + rightMatch = XRegExp.exec(str, right, delimEnd); + // Keep the leftmost match only + if (leftMatch && rightMatch) { + if (leftMatch.index <= rightMatch.index) { + rightMatch = null; + } else { + leftMatch = null; + } + } + /* Paths (LM:leftMatch, RM:rightMatch, OT:openTokens): + LM | RM | OT | Result + 1 | 0 | 1 | loop + 1 | 0 | 0 | loop + 0 | 1 | 1 | loop + 0 | 1 | 0 | throw + 0 | 0 | 1 | throw + 0 | 0 | 0 | break + * Doesn't include the sticky mode special case + * Loop ends after the first completed match if `!global` */ + if (leftMatch || rightMatch) { + delimStart = (leftMatch || rightMatch).index; + delimEnd = delimStart + (leftMatch || rightMatch)[0].length; + } else if (!openTokens) { + break; + } + if (sticky && !openTokens && delimStart > lastOuterEnd) { + break; + } + if (leftMatch) { + if (!openTokens) { + outerStart = delimStart; + innerStart = delimEnd; + } + ++openTokens; + } else if (rightMatch && openTokens) { + if (!--openTokens) { + if (vN) { + if (vN[0] && outerStart > lastOuterEnd) { + output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart)); + } + if (vN[1]) { + output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart)); + } + if (vN[2]) { + output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart)); + } + if (vN[3]) { + output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd)); + } + } else { + output.push(str.slice(innerStart, delimStart)); + } + lastOuterEnd = delimEnd; + if (!global) { + break; + } + } + } else { + throw new Error("string contains unbalanced delimiters"); + } + // If the delimiter matched an empty string, avoid an infinite loop + if (delimStart === delimEnd) { + ++delimEnd; + } + } + + if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) { + output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length)); + } + + return output; + }; + +}(XRegExp)); + + +/***** build.js *****/ + +/*! + * XRegExp.build v0.1.0 + * (c) 2012 Steven Levithan <http://xregexp.com/> + * MIT License + * Inspired by RegExp.create by Lea Verou <http://lea.verou.me/> + */ + +(function (XRegExp) { + "use strict"; + + var subparts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g, + parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subparts], "g"); + +/** + * Strips a leading `^` and trailing unescaped `$`, if both are present. + * @private + * @param {String} pattern Pattern to process. + * @returns {String} Pattern with edge anchors removed. + */ + function deanchor(pattern) { + var startAnchor = /^(?:\(\?:\))?\^/, // Leading `^` or `(?:)^` (handles /x cruft) + endAnchor = /\$(?:\(\?:\))?$/; // Trailing `$` or `$(?:)` (handles /x cruft) + if (endAnchor.test(pattern.replace(/\\[\s\S]/g, ""))) { // Ensure trailing `$` isn't escaped + return pattern.replace(startAnchor, "").replace(endAnchor, ""); + } + return pattern; + } + +/** + * Converts the provided value to an XRegExp. + * @private + * @param {String|RegExp} value Value to convert. + * @returns {RegExp} XRegExp object with XRegExp syntax applied. + */ + function asXRegExp(value) { + return XRegExp.isRegExp(value) ? + (value.xregexp && !value.xregexp.isNative ? value : XRegExp(value.source)) : + XRegExp(value); + } + +/** + * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in the + * outer pattern and provided subpatterns are automatically renumbered to work correctly. Native + * flags used by provided subpatterns are ignored in favor of the `flags` argument. + * @memberOf XRegExp + * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows + * `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within + * character classes. + * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A + * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Regex with interpolated subpatterns. + * @example + * + * var time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', { + * hours: XRegExp.build('{{h12}} : | {{h24}}', { + * h12: /1[0-2]|0?[1-9]/, + * h24: /2[0-3]|[01][0-9]/ + * }, 'x'), + * minutes: /^[0-5][0-9]$/ + * }); + * time.test('10:59'); // -> true + * XRegExp.exec('10:59', time).minutes; // -> '59' + */ + XRegExp.build = function (pattern, subs, flags) { + var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern), + data = {}, + numCaps = 0, // Caps is short for captures + numPriorCaps, + numOuterCaps = 0, + outerCapsMap = [0], + outerCapNames, + sub, + p; + + // Add flags within a leading mode modifier to the overall pattern's flags + if (inlineFlags) { + flags = flags || ""; + inlineFlags[1].replace(/./g, function (flag) { + flags += (flags.indexOf(flag) > -1 ? "" : flag); // Don't add duplicates + }); + } + + for (p in subs) { + if (subs.hasOwnProperty(p)) { + // Passing to XRegExp enables entended syntax for subpatterns provided as strings + // and ensures independent validity, lest an unescaped `(`, `)`, `[`, or trailing + // `\` breaks the `(?:)` wrapper. For subpatterns provided as regexes, it dies on + // octals and adds the `xregexp` property, for simplicity + sub = asXRegExp(subs[p]); + // Deanchoring allows embedding independently useful anchored regexes. If you + // really need to keep your anchors, double them (i.e., `^^...$$`) + data[p] = {pattern: deanchor(sub.source), names: sub.xregexp.captureNames || []}; + } + } + + // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid; + // helps keep this simple. Named captures will be put back + pattern = asXRegExp(pattern); + outerCapNames = pattern.xregexp.captureNames || []; + pattern = pattern.source.replace(parts, function ($0, $1, $2, $3, $4) { + var subName = $1 || $2, capName, intro; + if (subName) { // Named subpattern + if (!data.hasOwnProperty(subName)) { + throw new ReferenceError("undefined property " + $0); + } + if ($1) { // Named subpattern was wrapped in a capturing group + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; + // If it's a named group, preserve the name. Otherwise, use the subpattern name + // as the capture name + intro = "(?<" + (capName || subName) + ">"; + } else { + intro = "(?:"; + } + numPriorCaps = numCaps; + return intro + data[subName].pattern.replace(subparts, function (match, paren, backref) { + if (paren) { // Capturing group + capName = data[subName].names[numCaps - numPriorCaps]; + ++numCaps; + if (capName) { // If the current capture has a name, preserve the name + return "(?<" + capName + ">"; + } + } else if (backref) { // Backreference + return "\\" + (+backref + numPriorCaps); // Rewrite the backreference + } + return match; + }) + ")"; + } + if ($3) { // Capturing group + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; + if (capName) { // If the current capture has a name, preserve the name + return "(?<" + capName + ">"; + } + } else if ($4) { // Backreference + return "\\" + outerCapsMap[+$4]; // Rewrite the backreference + } + return $0; + }); + + return XRegExp(pattern, flags); + }; + +}(XRegExp)); + + +/***** prototypes.js *****/ + +/*! + * XRegExp Prototype Methods v1.0.0 + * (c) 2012 Steven Levithan <http://xregexp.com/> + * MIT License + */ + +/** + * Adds a collection of methods to `XRegExp.prototype`. RegExp objects copied by XRegExp are also + * augmented with any `XRegExp.prototype` methods. Hence, the following work equivalently: + * + * XRegExp('[a-z]', 'ig').xexec('abc'); + * XRegExp(/[a-z]/ig).xexec('abc'); + * XRegExp.globalize(/[a-z]/i).xexec('abc'); + */ +(function (XRegExp) { + "use strict"; + +/** + * Copy properties of `b` to `a`. + * @private + * @param {Object} a Object that will receive new properties. + * @param {Object} b Object whose properties will be copied. + */ + function extend(a, b) { + for (var p in b) { + if (b.hasOwnProperty(p)) { + a[p] = b[p]; + } + } + //return a; + } + + extend(XRegExp.prototype, { + +/** + * Implicitly calls the regex's `test` method with the first value in the provided arguments array. + * @memberOf XRegExp.prototype + * @param {*} context Ignored. Accepted only for congruity with `Function.prototype.apply`. + * @param {Array} args Array with the string to search as its first value. + * @returns {Boolean} Whether the regex matched the provided value. + * @example + * + * XRegExp('[a-z]').apply(null, ['abc']); // -> true + */ + apply: function (context, args) { + return this.test(args[0]); + }, + +/** + * Implicitly calls the regex's `test` method with the provided string. + * @memberOf XRegExp.prototype + * @param {*} context Ignored. Accepted only for congruity with `Function.prototype.call`. + * @param {String} str String to search. + * @returns {Boolean} Whether the regex matched the provided value. + * @example + * + * XRegExp('[a-z]').call(null, 'abc'); // -> true + */ + call: function (context, str) { + return this.test(str); + }, + +/** + * Implicitly calls {@link #XRegExp.forEach}. + * @memberOf XRegExp.prototype + * @example + * + * XRegExp('\\d').forEach('1a2345', function (match, i) { + * if (i % 2) this.push(+match[0]); + * }, []); + * // -> [2, 4] + */ + forEach: function (str, callback, context) { + return XRegExp.forEach(str, this, callback, context); + }, + +/** + * Implicitly calls {@link #XRegExp.globalize}. + * @memberOf XRegExp.prototype + * @example + * + * var globalCopy = XRegExp('regex').globalize(); + * globalCopy.global; // -> true + */ + globalize: function () { + return XRegExp.globalize(this); + }, + +/** + * Implicitly calls {@link #XRegExp.exec}. + * @memberOf XRegExp.prototype + * @example + * + * var match = XRegExp('U\\+(?<hex>[0-9A-F]{4})').xexec('U+2620'); + * match.hex; // -> '2620' + */ + xexec: function (str, pos, sticky) { + return XRegExp.exec(str, this, pos, sticky); + }, + +/** + * Implicitly calls {@link #XRegExp.test}. + * @memberOf XRegExp.prototype + * @example + * + * XRegExp('c').xtest('abc'); // -> true + */ + xtest: function (str, pos, sticky) { + return XRegExp.test(str, this, pos, sticky); + } + + }); + +}(XRegExp)); + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js new file mode 100644 index 0000000..a190558 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js @@ -0,0 +1,18 @@ +//XRegExp 2.0.0 <xregexp.com> MIT License +var XRegExp;XRegExp=XRegExp||function(n){"use strict";function v(n,i,r){var u;for(u in t.prototype)t.prototype.hasOwnProperty(u)&&(n[u]=t.prototype[u]);return n.xregexp={captureNames:i,isNative:!!r},n}function g(n){return(n.global?"g":"")+(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.extended?"x":"")+(n.sticky?"y":"")}function o(n,r,u){if(!t.isRegExp(n))throw new TypeError("type RegExp expected");var f=i.replace.call(g(n)+(r||""),h,"");return u&&(f=i.replace.call(f,new RegExp("["+u+"]+","g"),"")),n=n.xregexp&&!n.xregexp.isNative?v(t(n.source,f),n.xregexp.captureNames?n.xregexp.captureNames.slice(0):null):v(new RegExp(n.source,f),null,!0)}function a(n,t){var i=n.length;if(Array.prototype.lastIndexOf)return n.lastIndexOf(t);while(i--)if(n[i]===t)return i;return-1}function s(n,t){return Object.prototype.toString.call(n).toLowerCase()==="[object "+t+"]"}function d(n){return n=n||{},n==="all"||n.all?n={natives:!0,extensibility:!0}:s(n,"string")&&(n=t.forEach(n,/[^\s,]+/,function(n){this[n]=!0},{})),n}function ut(n,t,i,u){var o=p.length,s=null,e,f;y=!0;try{while(o--)if(f=p[o],(f.scope==="all"||f.scope===i)&&(!f.trigger||f.trigger.call(u))&&(f.pattern.lastIndex=t,e=r.exec.call(f.pattern,n),e&&e.index===t)){s={output:f.handler.call(u,e,i),match:e};break}}catch(h){throw h;}finally{y=!1}return s}function b(n){t.addToken=c[n?"on":"off"],f.extensibility=n}function tt(n){RegExp.prototype.exec=(n?r:i).exec,RegExp.prototype.test=(n?r:i).test,String.prototype.match=(n?r:i).match,String.prototype.replace=(n?r:i).replace,String.prototype.split=(n?r:i).split,f.natives=n}var t,c,u,f={natives:!1,extensibility:!1},i={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},r={},k={},p=[],e="default",rt="class",it={"default":/^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/,"class":/^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/},et=/\$(?:{([\w$]+)}|(\d\d?|[\s\S]))/g,h=/([\s\S])(?=[\s\S]*\1)/g,nt=/^(?:[?*+]|{\d+(?:,\d*)?})\??/,ft=i.exec.call(/()??/,"")[1]===n,l=RegExp.prototype.sticky!==n,y=!1,w="gim"+(l?"y":"");return t=function(r,u){if(t.isRegExp(r)){if(u!==n)throw new TypeError("can't supply flags when constructing one RegExp from another");return o(r)}if(y)throw new Error("can't call the XRegExp constructor within token definition functions");var l=[],a=e,b={hasNamedCapture:!1,captureNames:[],hasFlag:function(n){return u.indexOf(n)>-1}},f=0,c,s,p;if(r=r===n?"":String(r),u=u===n?"":String(u),i.match.call(u,h))throw new SyntaxError("invalid duplicate regular expression flag");for(r=i.replace.call(r,/^\(\?([\w$]+)\)/,function(n,t){if(i.test.call(/[gy]/,t))throw new SyntaxError("can't use flag g or y in mode modifier");return u=i.replace.call(u+t,h,""),""}),t.forEach(u,/[\s\S]/,function(n){if(w.indexOf(n[0])<0)throw new SyntaxError("invalid regular expression flag "+n[0]);});f<r.length;)c=ut(r,f,a,b),c?(l.push(c.output),f+=c.match[0].length||1):(s=i.exec.call(it[a],r.slice(f)),s?(l.push(s[0]),f+=s[0].length):(p=r.charAt(f),p==="["?a=rt:p==="]"&&(a=e),l.push(p),++f));return v(new RegExp(l.join(""),i.replace.call(u,/[^gimy]+/g,"")),b.hasNamedCapture?b.captureNames:null)},c={on:function(n,t,r){r=r||{},n&&p.push({pattern:o(n,"g"+(l?"y":"")),handler:t,scope:r.scope||e,trigger:r.trigger||null}),r.customFlags&&(w=i.replace.call(w+r.customFlags,h,""))},off:function(){throw new Error("extensibility must be installed before using addToken");}},t.addToken=c.off,t.cache=function(n,i){var r=n+"/"+(i||"");return k[r]||(k[r]=t(n,i))},t.escape=function(n){return i.replace.call(n,/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},t.exec=function(n,t,i,u){var e=o(t,"g"+(u&&l?"y":""),u===!1?"y":""),f;return e.lastIndex=i=i||0,f=r.exec.call(e,n),u&&f&&f.index!==i&&(f=null),t.global&&(t.lastIndex=f?e.lastIndex:0),f},t.forEach=function(n,i,r,u){for(var e=0,o=-1,f;f=t.exec(n,i,e);)r.call(u,f,++o,n,i),e=f.index+(f[0].length||1);return u},t.globalize=function(n){return o(n,"g")},t.install=function(n){n=d(n),!f.natives&&n.natives&&tt(!0),!f.extensibility&&n.extensibility&&b(!0)},t.isInstalled=function(n){return!!f[n]},t.isRegExp=function(n){return s(n,"regexp")},t.matchChain=function(n,i){return function r(n,u){for(var o=i[u].regex?i[u]:{regex:i[u]},f=[],s=function(n){f.push(o.backref?n[o.backref]||"":n[0])},e=0;e<n.length;++e)t.forEach(n[e],o.regex,s);return u===i.length-1||!f.length?f:r(f,u+1)}([n],0)},t.replace=function(i,u,f,e){var c=t.isRegExp(u),s=u,h;return c?(e===n&&u.global&&(e="all"),s=o(u,e==="all"?"g":"",e==="all"?"":"g")):e==="all"&&(s=new RegExp(t.escape(String(u)),"g")),h=r.replace.call(String(i),s,f),c&&u.global&&(u.lastIndex=0),h},t.split=function(n,t,i){return r.split.call(n,t,i)},t.test=function(n,i,r,u){return!!t.exec(n,i,r,u)},t.uninstall=function(n){n=d(n),f.natives&&n.natives&&tt(!1),f.extensibility&&n.extensibility&&b(!1)},t.union=function(n,i){var l=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,o=0,f,h,c=function(n,t,i){var r=h[o-f];if(t){if(++o,r)return"(?<"+r+">"}else if(i)return"\\"+(+i+f);return n},e=[],r,u;if(!(s(n,"array")&&n.length))throw new TypeError("patterns must be a nonempty array");for(u=0;u<n.length;++u)r=n[u],t.isRegExp(r)?(f=o,h=r.xregexp&&r.xregexp.captureNames||[],e.push(t(r.source).source.replace(l,c))):e.push(t.escape(r));return t(e.join("|"),i)},t.version="2.0.0",r.exec=function(t){var r,f,e,o,u;if(this.global||(o=this.lastIndex),r=i.exec.apply(this,arguments),r){if(!ft&&r.length>1&&a(r,"")>-1&&(e=new RegExp(this.source,i.replace.call(g(this),"g","")),i.replace.call(String(t).slice(r.index),e,function(){for(var t=1;t<arguments.length-2;++t)arguments[t]===n&&(r[t]=n)})),this.xregexp&&this.xregexp.captureNames)for(u=1;u<r.length;++u)f=this.xregexp.captureNames[u-1],f&&(r[f]=r[u]);this.global&&!r[0].length&&this.lastIndex>r.index&&(this.lastIndex=r.index)}return this.global||(this.lastIndex=o),r},r.test=function(n){return!!r.exec.call(this,n)},r.match=function(n){if(t.isRegExp(n)){if(n.global){var u=i.match.apply(this,arguments);return n.lastIndex=0,u}}else n=new RegExp(n);return r.exec.call(n,this)},r.replace=function(n,r){var e=t.isRegExp(n),u,f,h,o;return e?(n.xregexp&&(u=n.xregexp.captureNames),n.global||(o=n.lastIndex)):n+="",s(r,"function")?f=i.replace.call(String(this),n,function(){var t=arguments,i;if(u)for(t[0]=new String(t[0]),i=0;i<u.length;++i)u[i]&&(t[0][u[i]]=t[i+1]);return e&&n.global&&(n.lastIndex=t[t.length-2]+t[0].length),r.apply(null,t)}):(h=String(this),f=i.replace.call(h,n,function(){var n=arguments;return i.replace.call(String(r),et,function(t,i,r){var f;if(i){if(f=+i,f<=n.length-3)return n[f]||"";if(f=u?a(u,i):-1,f<0)throw new SyntaxError("backreference to undefined group "+t);return n[f+1]||""}if(r==="$")return"$";if(r==="&"||+r==0)return n[0];if(r==="`")return n[n.length-1].slice(0,n[n.length-2]);if(r==="'")return n[n.length-1].slice(n[n.length-2]+n[0].length);if(r=+r,!isNaN(r)){if(r>n.length-3)throw new SyntaxError("backreference to undefined group "+t);return n[r]||""}throw new SyntaxError("invalid token "+t);})})),e&&(n.lastIndex=n.global?0:o),f},r.split=function(r,u){if(!t.isRegExp(r))return i.split.apply(this,arguments);var e=String(this),h=r.lastIndex,f=[],o=0,s;return u=(u===n?-1:u)>>>0,t.forEach(e,r,function(n){n.index+n[0].length>o&&(f.push(e.slice(o,n.index)),n.length>1&&n.index<e.length&&Array.prototype.push.apply(f,n.slice(1)),s=n[0].length,o=n.index+s)}),o===e.length?(!i.test.call(r,"")||s)&&f.push(""):f.push(e.slice(o)),r.lastIndex=h,f.length>u?f.slice(0,u):f},u=c.on,u(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4})|x(?![\dA-Fa-f]{2}))/,function(n,t){if(n[1]==="B"&&t===e)return n[0];throw new SyntaxError("invalid escape "+n[0]);},{scope:"all"}),u(/\[(\^?)]/,function(n){return n[1]?"[\\s\\S]":"\\b\\B"}),u(/(?:\(\?#[^)]*\))+/,function(n){return i.test.call(nt,n.input.slice(n.index+n[0].length))?"":"(?:)"}),u(/\\k<([\w$]+)>/,function(n){var t=isNaN(n[1])?a(this.captureNames,n[1])+1:+n[1],i=n.index+n[0].length;if(!t||t>this.captureNames.length)throw new SyntaxError("backreference to undefined group "+n[0]);return"\\"+t+(i===n.input.length||isNaN(n.input.charAt(i))?"":"(?:)")}),u(/(?:\s+|#.*)+/,function(n){return i.test.call(nt,n.input.slice(n.index+n[0].length))?"":"(?:)"},{trigger:function(){return this.hasFlag("x")},customFlags:"x"}),u(/\./,function(){return"[\\s\\S]"},{trigger:function(){return this.hasFlag("s")},customFlags:"s"}),u(/\(\?P?<([\w$]+)>/,function(n){if(!isNaN(n[1]))throw new SyntaxError("can't use integer as capture name "+n[0]);return this.captureNames.push(n[1]),this.hasNamedCapture=!0,"("}),u(/\\(\d+)/,function(n,t){if(!(t===e&&/^[1-9]/.test(n[1])&&+n[1]<=this.captureNames.length)&&n[1]!=="0")throw new SyntaxError("can't use octal escape or backreference to undefined group "+n[0]);return n[0]},{scope:"all"}),u(/\((?!\?)/,function(){return this.hasFlag("n")?"(?:":(this.captureNames.push(null),"(")},{customFlags:"n"}),typeof exports!="undefined"&&(exports.XRegExp=t),t}(); +//XRegExp Unicode Base 1.0.0 +(function(n){"use strict";function i(n){return n.replace(/[- _]+/g,"").toLowerCase()}function s(n){return n.replace(/\w{4}/g,"\\u$&")}function u(n){while(n.length<4)n="0"+n;return n}function f(n){return parseInt(n,16)}function r(n){return parseInt(n,10).toString(16)}function o(t){var e=[],i=-1,o;return n.forEach(t,/\\u(\w{4})(?:-\\u(\w{4}))?/,function(n){o=f(n[1]),o>i+1&&(e.push("\\u"+u(r(i+1))),o>i+2&&e.push("-\\u"+u(r(o-1)))),i=f(n[2]||n[1])}),i<65535&&(e.push("\\u"+u(r(i+1))),i<65534&&e.push("-\\uFFFF")),e.join("")}function e(n){return t["^"+n]||(t["^"+n]=o(t[n]))}var t={};n.install("extensibility"),n.addUnicodePackage=function(r,u){var f;if(!n.isInstalled("extensibility"))throw new Error("extensibility must be installed before adding Unicode packages");if(r)for(f in r)r.hasOwnProperty(f)&&(t[i(f)]=s(r[f]));if(u)for(f in u)u.hasOwnProperty(f)&&(t[i(u[f])]=t[i(f)])},n.addUnicodePackage({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705D0-05EA05F0-05F20620-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280840-085808A008A2-08AC0904-0939093D09500958-09610971-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDAAE0-AAEAAAF2-AAF4AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC"},{L:"Letter"}),n.addToken(/\\([pP]){(\^?)([^}]*)}/,function(n,r){var f=n[1]==="P"||n[2]?"^":"",u=i(n[3]);if(n[1]==="P"&&n[2])throw new SyntaxError("invalid double negation \\P{^");if(!t.hasOwnProperty(u))throw new SyntaxError("invalid or unknown Unicode property "+n[0]);return r==="class"?f?e(u):t[u]:"["+f+t[u]+"]"},{scope:"all"})})(XRegExp); +//XRegExp Unicode Categories 1.2.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Categories");n.install("extensibility"),n.addUnicodePackage({Ll:"0061-007A00B500DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1D2B1D6B-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7B2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7FAFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D6A1D781D9B-1DBF2071207F2090-209C2C7C2C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A7F8A7F9A9CFAA70AADDAAF3AAF4FF70FF9EFF9F",Lo:"00AA00BA01BB01C0-01C3029405D0-05EA05F0-05F20620-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150840-085808A008A2-08AC0904-0939093D09500958-09610972-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA10FD-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF11CF51CF62135-21382D30-2D672D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCAAE0-AAEAAAF2AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0903093A-093C093E-094F0951-0957096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F8D-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135D-135F1712-17141732-1734175217531772177317B4-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAD1BE6-1BF31C24-1C371CD0-1CD21CD4-1CE81CED1CF2-1CF41DC0-1DE61DFC-1DFF20D0-20F02CEF-2CF12D7F2DE0-2DFF302A-302F3099309AA66F-A672A674-A67DA69FA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAEB-AAEFAAF5AAF6ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065F067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0859-085B08E4-08FE0900-0902093A093C0941-0948094D0951-095709620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F8D-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135D-135F1712-17141732-1734175217531772177317B417B517B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91BAB1BE61BE81BE91BED1BEF-1BF11C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF20D0-20DC20E120E5-20F02CEF-2CF12D7F2DE0-2DFF302A-302D3099309AA66FA674-A67DA69FA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1AAECAAEDAAF6ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093B093E-09400949-094C094E094F0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1BAC1BAD1BE71BEA-1BEC1BEE1BF21BF31C24-1C2B1C341C351CE11CF21CF3302E302FA823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BAAEBAAEEAAEFAAF5ABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048920DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0B72-0B770BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19D91A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90B72-0B770BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F919DA20702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293248-324F3251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100A700AB00B600B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F3A-0F3D0F850FD0-0FD40FD90FDA104A-104F10FB1360-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2D702E00-2E2E2E30-2E3B3001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A2E3A2E3B301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100A700B600B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E085E0964096509700AF00DF40E4F0E5A0E5B0F04-0F120F140F850FD0-0FD40FD90FDA104A-104F10FB1360-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A194419451A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601BFC-1BFF1C3B-1C3F1C7E1C7F1CC0-1CC71CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2D702E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E30-2E393001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFAAF0AAF1ABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A600A800A900AC00AE-00B100B400B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F60482058F0606-0608060B060E060F06DE06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0D790E3F0F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-139917DB194019DE-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B9210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23F32400-24262440-244A249C-24E92500-26FF2701-27672794-27C427C7-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FBB2-FBC1FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C21182140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5058F060B09F209F309FB0AF10BF90E3F17DB20A0-20B9A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFBB2-FBC1FF3EFF40FFE3",So:"00A600A900AE00B00482060E060F06DE06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0D790F01-0F030F130F15-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F1390-1399194019DE-19FF1B61-1B6A1B74-1B7C210021012103-210621082109211421162117211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23F32400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26FF2701-27672794-27BF2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-324732503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-0605061C061D06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060406DD070F200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20528-05300557055805600588058B-058E059005C8-05CF05EB-05EF05F5-05FF0605061C061D070E074B074C07B2-07BF07FB-07FF082E082F083F085C085D085F-089F08A108AD-08E308FF097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B78-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D3B0D3C0D450D490D4F-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EE0-0EFF0F480F6D-0F700F980FBD0FCD0FDB-0FFF10C610C8-10CC10CE10CF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B135C137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BF4-1BFB1C38-1C3A1C4A-1C4C1C80-1CBF1CC8-1CCF1CF7-1CFF1DE7-1DFB1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F209D-209F20BA-20CF20F1-20FF218A-218F23F4-23FF2427-243F244B-245F27002B4D-2B4F2B5A-2BFF2C2F2C5F2CF4-2CF82D262D28-2D2C2D2E2D2F2D68-2D6E2D71-2D7E2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E3C-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31BB-31BF31E4-31EF321F32FF4DB6-4DBF9FCD-9FFFA48D-A48FA4C7-A4CFA62C-A63FA698-A69EA6F8-A6FFA78FA794-A79FA7AB-A7F7A82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAF7-AB00AB07AB08AB0FAB10AB17-AB1FAB27AB2F-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBC2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"},{Ll:"Lowercase_Letter",Lu:"Uppercase_Letter",Lt:"Titlecase_Letter",Lm:"Modifier_Letter",Lo:"Other_Letter",M:"Mark",Mn:"Nonspacing_Mark",Mc:"Spacing_Mark",Me:"Enclosing_Mark",N:"Number",Nd:"Decimal_Number",Nl:"Letter_Number",No:"Other_Number",P:"Punctuation",Pd:"Dash_Punctuation",Ps:"Open_Punctuation",Pe:"Close_Punctuation",Pi:"Initial_Punctuation",Pf:"Final_Punctuation",Pc:"Connector_Punctuation",Po:"Other_Punctuation",S:"Symbol",Sm:"Math_Symbol",Sc:"Currency_Symbol",Sk:"Modifier_Symbol",So:"Other_Symbol",Z:"Separator",Zs:"Space_Separator",Zl:"Line_Separator",Zp:"Paragraph_Separator",C:"Other",Cc:"Control",Cf:"Format",Co:"Private_Use",Cs:"Surrogate",Cn:"Unassigned"})})(XRegExp); +//XRegExp Unicode Scripts 1.2.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts");n.install("extensibility"),n.addUnicodePackage({Arabic:"0600-06040606-060B060D-061A061E0620-063F0641-064A0656-065E066A-066F0671-06DC06DE-06FF0750-077F08A008A2-08AC08E4-08FEFB50-FBC1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFCFE70-FE74FE76-FEFC",Armenian:"0531-05560559-055F0561-0587058A058FFB13-FB17",Balinese:"1B00-1B4B1B50-1B7C",Bamum:"A6A0-A6F7",Batak:"1BC0-1BF31BFC-1BFF",Bengali:"0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB",Bopomofo:"02EA02EB3105-312D31A0-31BA",Braille:"2800-28FF",Buginese:"1A00-1A1B1A1E1A1F",Buhid:"1740-1753",Canadian_Aboriginal:"1400-167F18B0-18F5",Cham:"AA00-AA36AA40-AA4DAA50-AA59AA5C-AA5F",Cherokee:"13A0-13F4",Common:"0000-0040005B-0060007B-00A900AB-00B900BB-00BF00D700F702B9-02DF02E5-02E902EC-02FF0374037E038503870589060C061B061F06400660-066906DD096409650E3F0FD5-0FD810FB16EB-16ED173517361802180318051CD31CE11CE9-1CEC1CEE-1CF31CF51CF62000-200B200E-2064206A-20702074-207E2080-208E20A0-20B92100-21252127-2129212C-21312133-214D214F-215F21892190-23F32400-24262440-244A2460-26FF2701-27FF2900-2B4C2B50-2B592E00-2E3B2FF0-2FFB3000-300430063008-30203030-3037303C-303F309B309C30A030FB30FC3190-319F31C0-31E33220-325F327F-32CF3358-33FF4DC0-4DFFA700-A721A788-A78AA830-A839FD3EFD3FFDFDFE10-FE19FE30-FE52FE54-FE66FE68-FE6BFEFFFF01-FF20FF3B-FF40FF5B-FF65FF70FF9EFF9FFFE0-FFE6FFE8-FFEEFFF9-FFFD",Coptic:"03E2-03EF2C80-2CF32CF9-2CFF",Cyrillic:"0400-04840487-05271D2B1D782DE0-2DFFA640-A697A69F",Devanagari:"0900-09500953-09630966-09770979-097FA8E0-A8FB",Ethiopic:"1200-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-13992D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDEAB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2E",Georgian:"10A0-10C510C710CD10D0-10FA10FC-10FF2D00-2D252D272D2D",Glagolitic:"2C00-2C2E2C30-2C5E",Greek:"0370-03730375-0377037A-037D038403860388-038A038C038E-03A103A3-03E103F0-03FF1D26-1D2A1D5D-1D611D66-1D6A1DBF1F00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2126",Gujarati:"0A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF1",Gurmukhi:"0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A75",Han:"2E80-2E992E9B-2EF32F00-2FD5300530073021-30293038-303B3400-4DB54E00-9FCCF900-FA6DFA70-FAD9",Hangul:"1100-11FF302E302F3131-318E3200-321E3260-327EA960-A97CAC00-D7A3D7B0-D7C6D7CB-D7FBFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Hanunoo:"1720-1734",Hebrew:"0591-05C705D0-05EA05F0-05F4FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FB4F",Hiragana:"3041-3096309D-309F",Inherited:"0300-036F04850486064B-0655065F0670095109521CD0-1CD21CD4-1CE01CE2-1CE81CED1CF41DC0-1DE61DFC-1DFF200C200D20D0-20F0302A-302D3099309AFE00-FE0FFE20-FE26",Javanese:"A980-A9CDA9CF-A9D9A9DEA9DF",Kannada:"0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF2",Katakana:"30A1-30FA30FD-30FF31F0-31FF32D0-32FE3300-3357FF66-FF6FFF71-FF9D",Kayah_Li:"A900-A92F",Khmer:"1780-17DD17E0-17E917F0-17F919E0-19FF",Lao:"0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF",Latin:"0041-005A0061-007A00AA00BA00C0-00D600D8-00F600F8-02B802E0-02E41D00-1D251D2C-1D5C1D62-1D651D6B-1D771D79-1DBE1E00-1EFF2071207F2090-209C212A212B2132214E2160-21882C60-2C7FA722-A787A78B-A78EA790-A793A7A0-A7AAA7F8-A7FFFB00-FB06FF21-FF3AFF41-FF5A",Lepcha:"1C00-1C371C3B-1C491C4D-1C4F",Limbu:"1900-191C1920-192B1930-193B19401944-194F",Lisu:"A4D0-A4FF",Malayalam:"0D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F",Mandaic:"0840-085B085E",Meetei_Mayek:"AAE0-AAF6ABC0-ABEDABF0-ABF9",Mongolian:"1800180118041806-180E1810-18191820-18771880-18AA",Myanmar:"1000-109FAA60-AA7B",New_Tai_Lue:"1980-19AB19B0-19C919D0-19DA19DE19DF",Nko:"07C0-07FA",Ogham:"1680-169C",Ol_Chiki:"1C50-1C7F",Oriya:"0B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B77",Phags_Pa:"A840-A877",Rejang:"A930-A953A95F",Runic:"16A0-16EA16EE-16F0",Samaritan:"0800-082D0830-083E",Saurashtra:"A880-A8C4A8CE-A8D9",Sinhala:"0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF4",Sundanese:"1B80-1BBF1CC0-1CC7",Syloti_Nagri:"A800-A82B",Syriac:"0700-070D070F-074A074D-074F",Tagalog:"1700-170C170E-1714",Tagbanwa:"1760-176C176E-177017721773",Tai_Le:"1950-196D1970-1974",Tai_Tham:"1A20-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD",Tai_Viet:"AA80-AAC2AADB-AADF",Tamil:"0B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA",Telugu:"0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F",Thaana:"0780-07B1",Thai:"0E01-0E3A0E40-0E5B",Tibetan:"0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FD40FD90FDA",Tifinagh:"2D30-2D672D6F2D702D7F",Vai:"A500-A62B",Yi:"A000-A48CA490-A4C6"})})(XRegExp); +//XRegExp Unicode Blocks 1.2.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Blocks");n.install("extensibility"),n.addUnicodePackage({InBasic_Latin:"0000-007F",InLatin_1_Supplement:"0080-00FF",InLatin_Extended_A:"0100-017F",InLatin_Extended_B:"0180-024F",InIPA_Extensions:"0250-02AF",InSpacing_Modifier_Letters:"02B0-02FF",InCombining_Diacritical_Marks:"0300-036F",InGreek_and_Coptic:"0370-03FF",InCyrillic:"0400-04FF",InCyrillic_Supplement:"0500-052F",InArmenian:"0530-058F",InHebrew:"0590-05FF",InArabic:"0600-06FF",InSyriac:"0700-074F",InArabic_Supplement:"0750-077F",InThaana:"0780-07BF",InNKo:"07C0-07FF",InSamaritan:"0800-083F",InMandaic:"0840-085F",InArabic_Extended_A:"08A0-08FF",InDevanagari:"0900-097F",InBengali:"0980-09FF",InGurmukhi:"0A00-0A7F",InGujarati:"0A80-0AFF",InOriya:"0B00-0B7F",InTamil:"0B80-0BFF",InTelugu:"0C00-0C7F",InKannada:"0C80-0CFF",InMalayalam:"0D00-0D7F",InSinhala:"0D80-0DFF",InThai:"0E00-0E7F",InLao:"0E80-0EFF",InTibetan:"0F00-0FFF",InMyanmar:"1000-109F",InGeorgian:"10A0-10FF",InHangul_Jamo:"1100-11FF",InEthiopic:"1200-137F",InEthiopic_Supplement:"1380-139F",InCherokee:"13A0-13FF",InUnified_Canadian_Aboriginal_Syllabics:"1400-167F",InOgham:"1680-169F",InRunic:"16A0-16FF",InTagalog:"1700-171F",InHanunoo:"1720-173F",InBuhid:"1740-175F",InTagbanwa:"1760-177F",InKhmer:"1780-17FF",InMongolian:"1800-18AF",InUnified_Canadian_Aboriginal_Syllabics_Extended:"18B0-18FF",InLimbu:"1900-194F",InTai_Le:"1950-197F",InNew_Tai_Lue:"1980-19DF",InKhmer_Symbols:"19E0-19FF",InBuginese:"1A00-1A1F",InTai_Tham:"1A20-1AAF",InBalinese:"1B00-1B7F",InSundanese:"1B80-1BBF",InBatak:"1BC0-1BFF",InLepcha:"1C00-1C4F",InOl_Chiki:"1C50-1C7F",InSundanese_Supplement:"1CC0-1CCF",InVedic_Extensions:"1CD0-1CFF",InPhonetic_Extensions:"1D00-1D7F",InPhonetic_Extensions_Supplement:"1D80-1DBF",InCombining_Diacritical_Marks_Supplement:"1DC0-1DFF",InLatin_Extended_Additional:"1E00-1EFF",InGreek_Extended:"1F00-1FFF",InGeneral_Punctuation:"2000-206F",InSuperscripts_and_Subscripts:"2070-209F",InCurrency_Symbols:"20A0-20CF",InCombining_Diacritical_Marks_for_Symbols:"20D0-20FF",InLetterlike_Symbols:"2100-214F",InNumber_Forms:"2150-218F",InArrows:"2190-21FF",InMathematical_Operators:"2200-22FF",InMiscellaneous_Technical:"2300-23FF",InControl_Pictures:"2400-243F",InOptical_Character_Recognition:"2440-245F",InEnclosed_Alphanumerics:"2460-24FF",InBox_Drawing:"2500-257F",InBlock_Elements:"2580-259F",InGeometric_Shapes:"25A0-25FF",InMiscellaneous_Symbols:"2600-26FF",InDingbats:"2700-27BF",InMiscellaneous_Mathematical_Symbols_A:"27C0-27EF",InSupplemental_Arrows_A:"27F0-27FF",InBraille_Patterns:"2800-28FF",InSupplemental_Arrows_B:"2900-297F",InMiscellaneous_Mathematical_Symbols_B:"2980-29FF",InSupplemental_Mathematical_Operators:"2A00-2AFF",InMiscellaneous_Symbols_and_Arrows:"2B00-2BFF",InGlagolitic:"2C00-2C5F",InLatin_Extended_C:"2C60-2C7F",InCoptic:"2C80-2CFF",InGeorgian_Supplement:"2D00-2D2F",InTifinagh:"2D30-2D7F",InEthiopic_Extended:"2D80-2DDF",InCyrillic_Extended_A:"2DE0-2DFF",InSupplemental_Punctuation:"2E00-2E7F",InCJK_Radicals_Supplement:"2E80-2EFF",InKangxi_Radicals:"2F00-2FDF",InIdeographic_Description_Characters:"2FF0-2FFF",InCJK_Symbols_and_Punctuation:"3000-303F",InHiragana:"3040-309F",InKatakana:"30A0-30FF",InBopomofo:"3100-312F",InHangul_Compatibility_Jamo:"3130-318F",InKanbun:"3190-319F",InBopomofo_Extended:"31A0-31BF",InCJK_Strokes:"31C0-31EF",InKatakana_Phonetic_Extensions:"31F0-31FF",InEnclosed_CJK_Letters_and_Months:"3200-32FF",InCJK_Compatibility:"3300-33FF",InCJK_Unified_Ideographs_Extension_A:"3400-4DBF",InYijing_Hexagram_Symbols:"4DC0-4DFF",InCJK_Unified_Ideographs:"4E00-9FFF",InYi_Syllables:"A000-A48F",InYi_Radicals:"A490-A4CF",InLisu:"A4D0-A4FF",InVai:"A500-A63F",InCyrillic_Extended_B:"A640-A69F",InBamum:"A6A0-A6FF",InModifier_Tone_Letters:"A700-A71F",InLatin_Extended_D:"A720-A7FF",InSyloti_Nagri:"A800-A82F",InCommon_Indic_Number_Forms:"A830-A83F",InPhags_pa:"A840-A87F",InSaurashtra:"A880-A8DF",InDevanagari_Extended:"A8E0-A8FF",InKayah_Li:"A900-A92F",InRejang:"A930-A95F",InHangul_Jamo_Extended_A:"A960-A97F",InJavanese:"A980-A9DF",InCham:"AA00-AA5F",InMyanmar_Extended_A:"AA60-AA7F",InTai_Viet:"AA80-AADF",InMeetei_Mayek_Extensions:"AAE0-AAFF",InEthiopic_Extended_A:"AB00-AB2F",InMeetei_Mayek:"ABC0-ABFF",InHangul_Syllables:"AC00-D7AF",InHangul_Jamo_Extended_B:"D7B0-D7FF",InHigh_Surrogates:"D800-DB7F",InHigh_Private_Use_Surrogates:"DB80-DBFF",InLow_Surrogates:"DC00-DFFF",InPrivate_Use_Area:"E000-F8FF",InCJK_Compatibility_Ideographs:"F900-FAFF",InAlphabetic_Presentation_Forms:"FB00-FB4F",InArabic_Presentation_Forms_A:"FB50-FDFF",InVariation_Selectors:"FE00-FE0F",InVertical_Forms:"FE10-FE1F",InCombining_Half_Marks:"FE20-FE2F",InCJK_Compatibility_Forms:"FE30-FE4F",InSmall_Form_Variants:"FE50-FE6F",InArabic_Presentation_Forms_B:"FE70-FEFF",InHalfwidth_and_Fullwidth_Forms:"FF00-FFEF",InSpecials:"FFF0-FFFF"})})(XRegExp); +//XRegExp Unicode Properties 1.0.0 +(function(n){"use strict";if(!n.addUnicodePackage)throw new ReferenceError("Unicode Base must be loaded before Unicode Properties");n.install("extensibility"),n.addUnicodePackage({Alphabetic:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE03450370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705B0-05BD05BF05C105C205C405C505C705D0-05EA05F0-05F20610-061A0620-06570659-065F066E-06D306D5-06DC06E1-06E806ED-06EF06FA-06FC06FF0710-073F074D-07B107CA-07EA07F407F507FA0800-0817081A-082C0840-085808A008A2-08AC08E4-08E908F0-08FE0900-093B093D-094C094E-09500955-09630971-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BD-09C409C709C809CB09CC09CE09D709DC09DD09DF-09E309F009F10A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3E-0A420A470A480A4B0A4C0A510A59-0A5C0A5E0A70-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD-0AC50AC7-0AC90ACB0ACC0AD00AE0-0AE30B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D-0B440B470B480B4B0B4C0B560B570B5C0B5D0B5F-0B630B710B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCC0BD00BD70C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4C0C550C560C580C590C60-0C630C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD-0CC40CC6-0CC80CCA-0CCC0CD50CD60CDE0CE0-0CE30CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4C0D4E0D570D60-0D630D7A-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCF-0DD40DD60DD8-0DDF0DF20DF30E01-0E3A0E40-0E460E4D0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60ECD0EDC-0EDF0F000F40-0F470F49-0F6C0F71-0F810F88-0F970F99-0FBC1000-10361038103B-103F1050-10621065-1068106E-1086108E109C109D10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135F1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA16EE-16F01700-170C170E-17131720-17331740-17531760-176C176E-1770177217731780-17B317B6-17C817D717DC1820-18771880-18AA18B0-18F51900-191C1920-192B1930-19381950-196D1970-19741980-19AB19B0-19C91A00-1A1B1A20-1A5E1A61-1A741AA71B00-1B331B35-1B431B45-1B4B1B80-1BA91BAC-1BAF1BBA-1BE51BE7-1BF11C00-1C351C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF31CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E2160-218824B6-24E92C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2DFF2E2F3005-30073021-30293031-30353038-303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA674-A67BA67F-A697A69F-A6EFA717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A827A840-A873A880-A8C3A8F2-A8F7A8FBA90A-A92AA930-A952A960-A97CA980-A9B2A9B4-A9BFA9CFAA00-AA36AA40-AA4DAA60-AA76AA7AAA80-AABEAAC0AAC2AADB-AADDAAE0-AAEFAAF2-AAF5AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEAAC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Uppercase:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E05200522052405260531-055610A0-10C510C710CD1E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F21452160-216F218324B6-24CF2C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CED2CF2A640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA660A662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BA78DA790A792A7A0A7A2A7A4A7A6A7A8A7AAFF21-FF3A",Lowercase:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02B802C002C102E0-02E40345037103730377037A-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F05210523052505270561-05871D00-1DBF1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF72071207F2090-209C210A210E210F2113212F21342139213C213D2146-2149214E2170-217F218424D0-24E92C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7D2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2CF32D00-2D252D272D2DA641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA661A663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76F-A778A77AA77CA77FA781A783A785A787A78CA78EA791A793A7A1A7A3A7A5A7A7A7A9A7F8-A7FAFB00-FB06FB13-FB17FF41-FF5A",White_Space:"0009-000D0020008500A01680180E2000-200A20282029202F205F3000",Noncharacter_Code_Point:"FDD0-FDEFFFFEFFFF",Default_Ignorable_Code_Point:"00AD034F115F116017B417B5180B-180D200B-200F202A-202E2060-206F3164FE00-FE0FFEFFFFA0FFF0-FFF8",Any:"0000-FFFF",Ascii:"0000-007F",Assigned:"0000-0377037A-037E0384-038A038C038E-03A103A3-05270531-05560559-055F0561-05870589058A058F0591-05C705D0-05EA05F0-05F40600-06040606-061B061E-070D070F-074A074D-07B107C0-07FA0800-082D0830-083E0840-085B085E08A008A2-08AC08E4-08FE0900-09770979-097F0981-09830985-098C098F09900993-09A809AA-09B009B209B6-09B909BC-09C409C709C809CB-09CE09D709DC09DD09DF-09E309E6-09FB0A01-0A030A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A3C0A3E-0A420A470A480A4B-0A4D0A510A59-0A5C0A5E0A66-0A750A81-0A830A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABC-0AC50AC7-0AC90ACB-0ACD0AD00AE0-0AE30AE6-0AF10B01-0B030B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3C-0B440B470B480B4B-0B4D0B560B570B5C0B5D0B5F-0B630B66-0B770B820B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BBE-0BC20BC6-0BC80BCA-0BCD0BD00BD70BE6-0BFA0C01-0C030C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D-0C440C46-0C480C4A-0C4D0C550C560C580C590C60-0C630C66-0C6F0C78-0C7F0C820C830C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBC-0CC40CC6-0CC80CCA-0CCD0CD50CD60CDE0CE0-0CE30CE6-0CEF0CF10CF20D020D030D05-0D0C0D0E-0D100D12-0D3A0D3D-0D440D46-0D480D4A-0D4E0D570D60-0D630D66-0D750D79-0D7F0D820D830D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60DCA0DCF-0DD40DD60DD8-0DDF0DF2-0DF40E01-0E3A0E3F-0E5B0E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB90EBB-0EBD0EC0-0EC40EC60EC8-0ECD0ED0-0ED90EDC-0EDF0F00-0F470F49-0F6C0F71-0F970F99-0FBC0FBE-0FCC0FCE-0FDA1000-10C510C710CD10D0-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A135D-137C1380-139913A0-13F41400-169C16A0-16F01700-170C170E-17141720-17361740-17531760-176C176E-1770177217731780-17DD17E0-17E917F0-17F91800-180E1810-18191820-18771880-18AA18B0-18F51900-191C1920-192B1930-193B19401944-196D1970-19741980-19AB19B0-19C919D0-19DA19DE-1A1B1A1E-1A5E1A60-1A7C1A7F-1A891A90-1A991AA0-1AAD1B00-1B4B1B50-1B7C1B80-1BF31BFC-1C371C3B-1C491C4D-1C7F1CC0-1CC71CD0-1CF61D00-1DE61DFC-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FC41FC6-1FD31FD6-1FDB1FDD-1FEF1FF2-1FF41FF6-1FFE2000-2064206A-20712074-208E2090-209C20A0-20B920D0-20F02100-21892190-23F32400-24262440-244A2460-26FF2701-2B4C2B50-2B592C00-2C2E2C30-2C5E2C60-2CF32CF9-2D252D272D2D2D30-2D672D6F2D702D7F-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2DE0-2E3B2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB3000-303F3041-30963099-30FF3105-312D3131-318E3190-31BA31C0-31E331F0-321E3220-32FE3300-4DB54DC0-9FCCA000-A48CA490-A4C6A4D0-A62BA640-A697A69F-A6F7A700-A78EA790-A793A7A0-A7AAA7F8-A82BA830-A839A840-A877A880-A8C4A8CE-A8D9A8E0-A8FBA900-A953A95F-A97CA980-A9CDA9CF-A9D9A9DEA9DFAA00-AA36AA40-AA4DAA50-AA59AA5C-AA7BAA80-AAC2AADB-AAF6AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABEDABF0-ABF9AC00-D7A3D7B0-D7C6D7CB-D7FBD800-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1D-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBC1FBD3-FD3FFD50-FD8FFD92-FDC7FDF0-FDFDFE00-FE19FE20-FE26FE30-FE52FE54-FE66FE68-FE6BFE70-FE74FE76-FEFCFEFFFF01-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDCFFE0-FFE6FFE8-FFEEFFF9-FFFD"})})(XRegExp); +//XRegExp.matchRecursive 0.2.0 +(function(n){"use strict";function t(n,t,i,r){return{value:n,name:t,start:i,end:r}}n.matchRecursive=function(i,r,u,f,e){f=f||"",e=e||{};var g=f.indexOf("g")>-1,nt=f.indexOf("y")>-1,d=f.replace(/y/g,""),y=e.escapeChar,o=e.valueNames,v=[],b=0,h=0,s=0,c=0,p,w,l,a,k;if(r=n(r,d),u=n(u,d),y){if(y.length>1)throw new SyntaxError("can't use more than one escape character");y=n.escape(y),k=new RegExp("(?:"+y+"[\\S\\s]|(?:(?!"+n.union([r,u]).source+")[^"+y+"])+)+",f.replace(/[^im]+/g,""))}for(;;){if(y&&(s+=(n.exec(i,k,s,"sticky")||[""])[0].length),l=n.exec(i,r,s),a=n.exec(i,u,s),l&&a&&(l.index<=a.index?a=null:l=null),l||a)h=(l||a).index,s=h+(l||a)[0].length;else if(!b)break;if(nt&&!b&&h>c)break;if(l)b||(p=h,w=s),++b;else if(a&&b){if(!--b&&(o?(o[0]&&p>c&&v.push(t(o[0],i.slice(c,p),c,p)),o[1]&&v.push(t(o[1],i.slice(p,w),p,w)),o[2]&&v.push(t(o[2],i.slice(w,h),w,h)),o[3]&&v.push(t(o[3],i.slice(h,s),h,s))):v.push(i.slice(w,h)),c=s,!g))break}else throw new Error("string contains unbalanced delimiters");h===s&&++s}return g&&!nt&&o&&o[0]&&i.length>c&&v.push(t(o[0],i.slice(c),c,i.length)),v}})(XRegExp); +//XRegExp.build 0.1.0 +(function(n){"use strict";function u(n){var i=/^(?:\(\?:\))?\^/,t=/\$(?:\(\?:\))?$/;return t.test(n.replace(/\\[\s\S]/g,""))?n.replace(i,"").replace(t,""):n}function t(t){return n.isRegExp(t)?t.xregexp&&!t.xregexp.isNative?t:n(t.source):n(t)}var i=/(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*]/g,r=n.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/,i],"g");n.build=function(f,e,o){var w=/^\(\?([\w$]+)\)/.exec(f),l={},s=0,v,h=0,p=[0],y,a,c;w&&(o=o||"",w[1].replace(/./g,function(n){o+=o.indexOf(n)>-1?"":n}));for(c in e)e.hasOwnProperty(c)&&(a=t(e[c]),l[c]={pattern:u(a.source),names:a.xregexp.captureNames||[]});return f=t(f),y=f.xregexp.captureNames||[],f=f.source.replace(r,function(n,t,r,u,f){var o=t||r,e,c;if(o){if(!l.hasOwnProperty(o))throw new ReferenceError("undefined property "+n);return t?(e=y[h],p[++h]=++s,c="(?<"+(e||o)+">"):c="(?:",v=s,c+l[o].pattern.replace(i,function(n,t,i){if(t){if(e=l[o].names[s-v],++s,e)return"(?<"+e+">"}else if(i)return"\\"+(+i+v);return n})+")"}if(u){if(e=y[h],p[++h]=++s,e)return"(?<"+e+">"}else if(f)return"\\"+p[+f];return n}),n(f,o)}})(XRegExp); +//XRegExp Prototype Methods 1.0.0 +(function(n){"use strict";function t(n,t){for(var i in t)t.hasOwnProperty(i)&&(n[i]=t[i])}t(n.prototype,{apply:function(n,t){return this.test(t[0])},call:function(n,t){return this.test(t)},forEach:function(t,i,r){return n.forEach(t,this,i,r)},globalize:function(){return n.globalize(this)},xexec:function(t,i,r){return n.exec(t,this,i,r)},xtest:function(t,i,r){return n.test(t,this,i,r)}})})(XRegExp) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/404.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/404.html new file mode 100644 index 0000000..9bf4293 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/404.html @@ -0,0 +1,12 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% trans 'Page not found' %}{% endblock %} + +{% block content %} + +<h2>{% trans 'Page not found' %}</h2> + +<p>{% trans "We're sorry, but the requested page could not be found." %}</p> + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/500.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/500.html new file mode 100644 index 0000000..4842faa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/500.html @@ -0,0 +1,17 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} +<div class="breadcrumbs"> +<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> +› {% trans 'Server error' %} +</div> +{% endblock %} + +{% block title %}{% trans 'Server error (500)' %}{% endblock %} + +{% block content %} +<h1>{% trans 'Server Error <em>(500)</em>' %}</h1> +<p>{% trans "There's been an error. It's been reported to the site administrators via email and should be fixed shortly. Thanks for your patience." %}</p> + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/actions.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/actions.html new file mode 100644 index 0000000..ef2232e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/actions.html @@ -0,0 +1,23 @@ +{% load i18n %} +<div class="actions"> + {% block actions %} + {% block actions-form %} + {% for field in action_form %}{% if field.label %}<label>{{ field.label }} {% endif %}{{ field }}{% if field.label %}</label>{% endif %}{% endfor %} + {% endblock %} + {% block actions-submit %} + <button type="submit" class="button" title="{% trans "Run the selected action" %}" name="index" value="{{ action_index|default:0 }}">{% trans "Go" %}</button> + {% endblock %} + {% block actions-counter %} + {% if actions_selection_counter %} + <span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}">{{ selection_note }}</span> + {% if cl.result_count != cl.result_list|length %} + <span class="all">{{ selection_note_all }}</span> + <span class="question"> + <a href="#" title="{% trans "Click here to select the objects across all pages" %}">{% blocktrans with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktrans %}</a> + </span> + <span class="clear"><a href="#">{% trans "Clear selection" %}</a></span> + {% endif %} + {% endif %} + {% endblock %} + {% endblock %} +</div> diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/app_index.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/app_index.html new file mode 100644 index 0000000..6868b49 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/app_index.html @@ -0,0 +1,18 @@ +{% extends "admin/index.html" %} +{% load i18n %} + +{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} +<div class="breadcrumbs"> +<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> +› +{% for app in app_list %} +{{ app.name }} +{% endfor %} +</div> +{% endblock %} +{% endif %} + +{% block sidebar %}{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html new file mode 100644 index 0000000..5c240d5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/add_form.html @@ -0,0 +1,10 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} + +{% block form_top %} + {% if not is_popup %} + <p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p> + {% else %} + <p>{% trans "Enter a username and password." %}</p> + {% endif %} +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html new file mode 100644 index 0000000..4b3bfb9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/auth/user/change_password.html @@ -0,0 +1,60 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} +{% load admin_urls %} + +{% block extrahead %}{{ block.super }} +<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script> +{% endblock %} +{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %} +{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} +{% if not is_popup %} +{% block breadcrumbs %} +<div class="breadcrumbs"> +<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> +› <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a> +› <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a> +› <a href="{% url opts|admin_urlname:'change' original.pk|admin_urlquote %}">{{ original|truncatewords:"18" }}</a> +› {% trans 'Change password' %} +</div> +{% endblock %} +{% endif %} +{% block content %}<div id="content-main"> +<form action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %} +<input type="text" name="username" value="{{ original.get_username }}" style="display: none"> +<div> +{% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %} +{% if form.errors %} + <p class="errornote"> + {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} + </p> +{% endif %} + +<p>{% blocktrans with username=original %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktrans %}</p> + +<fieldset class="module aligned"> + +<div class="form-row"> + {{ form.password1.errors }} + {{ form.password1.label_tag }} {{ form.password1 }} + {% if form.password1.help_text %} + <div class="help">{{ form.password1.help_text|safe }}</div> + {% endif %} +</div> + +<div class="form-row"> + {{ form.password2.errors }} + {{ form.password2.label_tag }} {{ form.password2 }} + {% if form.password2.help_text %} + <div class="help">{{ form.password2.help_text|safe }}</div> + {% endif %} +</div> + +</fieldset> + +<div class="submit-row"> +<input type="submit" value="{% trans 'Change password' %}" class="default"> +</div> + +</div> +</form></div> +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base.html new file mode 100644 index 0000000..2cf5137 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base.html @@ -0,0 +1,93 @@ +{% load i18n static %}<!DOCTYPE html> +{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} +<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}> +<head> +<title>{% block title %}{% endblock %} + +{% block extrastyle %}{% endblock %} +{% if LANGUAGE_BIDI %}{% endif %} +{% block extrahead %}{% endblock %} +{% block responsive %} + + + {% if LANGUAGE_BIDI %}{% endif %} +{% endblock %} +{% block blockbots %}{% endblock %} + +{% load i18n %} + + + + +
+ + {% if not is_popup %} + + + + {% block breadcrumbs %} + + {% endblock %} + {% endif %} + + {% block messages %} + {% if messages %} +
    {% for message in messages %} + {{ message|capfirst }} + {% endfor %}
+ {% endif %} + {% endblock messages %} + + +
+ {% block pretitle %}{% endblock %} + {% block content_title %}{% if title %}

{{ title }}

{% endif %}{% endblock %} + {% block content %} + {% block object-tools %}{% endblock %} + {{ content }} + {% endblock %} + {% block sidebar %}{% endblock %} +
+
+ + + {% block footer %}{% endblock %} +
+ + + + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base_site.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base_site.html new file mode 100644 index 0000000..cae0a69 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/base_site.html @@ -0,0 +1,9 @@ +{% extends "admin/base.html" %} + +{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %} + +{% block branding %} +

{{ site_header|default:_('Django administration') }}

+{% endblock %} + +{% block nav-global %}{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form.html new file mode 100644 index 0000000..1d749f2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form.html @@ -0,0 +1,81 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_modify %} + +{% block extrahead %}{{ block.super }} + +{{ media }} +{% endblock %} + +{% block extrastyle %}{{ block.super }}{% endblock %} + +{% block coltype %}colM{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} + +{% endblock %} +{% endif %} + +{% block content %}
+{% block object-tools %} +{% if change %}{% if not is_popup %} +
    + {% block object-tools-items %} + {% change_form_object_tools %} + {% endblock %} +
+{% endif %}{% endif %} +{% endblock %} +
{% csrf_token %}{% block form_top %}{% endblock %} +
+{% if is_popup %}{% endif %} +{% if to_field %}{% endif %} +{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %} +{% if errors %} +

+ {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

+ {{ adminform.form.non_field_errors }} +{% endif %} + +{% block field_sets %} +{% for fieldset in adminform %} + {% include "admin/includes/fieldset.html" %} +{% endfor %} +{% endblock %} + +{% block after_field_sets %}{% endblock %} + +{% block inline_field_sets %} +{% for inline_admin_formset in inline_admin_formsets %} + {% include inline_admin_formset.opts.template %} +{% endfor %} +{% endblock %} + +{% block after_related_objects %}{% endblock %} + +{% block submit_buttons_bottom %}{% submit_row %}{% endblock %} + +{% block admin_change_form_document_ready %} + +{% endblock %} + +{# JavaScript for prepopulated fields #} +{% prepopulated_fields_js %} + +
+
+{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html new file mode 100644 index 0000000..3248749 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_form_object_tools.html @@ -0,0 +1,8 @@ +{% load i18n admin_urls %} +{% block object-tools-items %} +
  • + {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} + {% trans "History" %} +
  • +{% if has_absolute_url %}
  • {% trans "View on site" %}
  • {% endif %} +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list.html new file mode 100644 index 0000000..0ffca67 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list.html @@ -0,0 +1,82 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_list %} + +{% block extrastyle %} + {{ block.super }} + + {% if cl.formset %} + + {% endif %} + {% if cl.formset or action_form %} + + {% endif %} + {{ media.css }} + {% if not actions_on_top and not actions_on_bottom %} + + {% endif %} +{% endblock %} + +{% block extrahead %} +{{ block.super }} +{{ media.js }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %} + +{% if not is_popup %} +{% block breadcrumbs %} + +{% endblock %} +{% endif %} + +{% block coltype %}flex{% endblock %} + +{% block content %} +
    + {% block object-tools %} +
      + {% block object-tools-items %} + {% change_list_object_tools %} + {% endblock %} +
    + {% endblock %} + {% if cl.formset.errors %} +

    + {% if cl.formset.total_error_count == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

    + {{ cl.formset.non_form_errors }} + {% endif %} +
    + {% block search %}{% search_form cl %}{% endblock %} + {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %} + + {% block filters %} + {% if cl.has_filters %} +
    +

    {% trans 'Filter' %}

    + {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %} +
    + {% endif %} + {% endblock %} + +
    {% csrf_token %} + {% if cl.formset %} +
    {{ cl.formset.management_form }}
    + {% endif %} + + {% block result_list %} + {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %} + {% result_list cl %} + {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %} + {% endblock %} + {% block pagination %}{% pagination cl %}{% endblock %} +
    +
    +
    +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html new file mode 100644 index 0000000..5d6d458 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_object_tools.html @@ -0,0 +1,12 @@ +{% load i18n admin_urls %} + +{% block object-tools-items %} + {% if has_add_permission %} +
  • + {% url cl.opts|admin_urlname:'add' as add_url %} + + {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} + +
  • + {% endif %} +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_results.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_results.html new file mode 100644 index 0000000..b3d7dd0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/change_list_results.html @@ -0,0 +1,38 @@ +{% load i18n static %} +{% if result_hidden_fields %} +
    {# DIV for HTML validation #} +{% for item in result_hidden_fields %}{{ item }}{% endfor %} +
    +{% endif %} +{% if results %} +
    + + + +{% for header in result_headers %} +{% endfor %} + + + +{% for result in results %} +{% if result.form.non_field_errors %} + +{% endif %} +{% for item in result %}{{ item }}{% endfor %} +{% endfor %} + +
    + {% if header.sortable %} + {% if header.sort_priority > 0 %} +
    + + {% if num_sorted_fields > 1 %}{{ header.sort_priority }}{% endif %} + +
    + {% endif %} + {% endif %} +
    {% if header.sortable %}{{ header.text|capfirst }}{% else %}{{ header.text|capfirst }}{% endif %}
    +
    +
    {{ result.form.non_field_errors }}
    +
    +{% endif %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html new file mode 100644 index 0000000..65ae800 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/date_hierarchy.html @@ -0,0 +1,16 @@ +{% if show %} +
    +
    +
    +{% endif %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html new file mode 100644 index 0000000..c28a87c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_confirmation.html @@ -0,0 +1,52 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +{% if perms_lacking %} +

    {% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

    +
      + {% for obj in perms_lacking %} +
    • {{ obj }}
    • + {% endfor %} +
    +{% elif protected %} +

    {% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}

    +
      + {% for obj in protected %} +
    • {{ obj }}
    • + {% endfor %} +
    +{% else %} +

    {% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}

    + {% include "admin/includes/object_delete_summary.html" %} +

    {% trans "Objects" %}

    +
      {{ deleted_objects|unordered_list }}
    +
    {% csrf_token %} +
    + + {% if is_popup %}{% endif %} + {% if to_field %}{% endif %} + + {% trans "No, take me back" %} +
    +
    +{% endif %} +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html new file mode 100644 index 0000000..4d77ae3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/delete_selected_confirmation.html @@ -0,0 +1,55 @@ +{% extends "admin/base_site.html" %} +{% load i18n l10n admin_urls static %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +{% if perms_lacking %} +

    {% blocktrans %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

    +
      + {% for obj in perms_lacking %} +
    • {{ obj }}
    • + {% endfor %} +
    +{% elif protected %} +

    {% blocktrans %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktrans %}

    +
      + {% for obj in protected %} +
    • {{ obj }}
    • + {% endfor %} +
    +{% else %} +

    {% blocktrans %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktrans %}

    + {% include "admin/includes/object_delete_summary.html" %} +

    {% trans "Objects" %}

    + {% for deletable_object in deletable_objects %} +
      {{ deletable_object|unordered_list }}
    + {% endfor %} +
    {% csrf_token %} +
    + {% for obj in queryset %} + + {% endfor %} + + + + {% trans "No, take me back" %} +
    +
    +{% endif %} +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html new file mode 100644 index 0000000..507f69b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/stacked.html @@ -0,0 +1,25 @@ +{% load i18n admin_urls static %} +
    +
    +

    {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

    +{{ inline_admin_formset.formset.management_form }} +{{ inline_admin_formset.formset.non_form_errors }} + +{% for inline_admin_form in inline_admin_formset %}
    +

    {{ inline_admin_formset.opts.verbose_name|capfirst }}: {% if inline_admin_form.original %}{{ inline_admin_form.original }}{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} {% if inline_admin_formset.has_change_permission %}{% trans "Change" %}{% else %}{% trans "View" %}{% endif %}{% endif %} +{% else %}#{{ forloop.counter }}{% endif %} + {% if inline_admin_form.show_url %}{% trans "View on site" %}{% endif %} + {% if inline_admin_formset.formset.can_delete and inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}{% endif %} +

    + {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %} + {% for fieldset in inline_admin_form %} + {% include "admin/includes/fieldset.html" %} + {% endfor %} + {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} + {{ inline_admin_form.fk_field.field }} +
    {% endfor %} +
    +
    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html new file mode 100644 index 0000000..2584745 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/edit_inline/tabular.html @@ -0,0 +1,75 @@ +{% load i18n admin_urls static admin_modify %} +
    + +
    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/filter.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/filter.html new file mode 100644 index 0000000..cd88652 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/filter.html @@ -0,0 +1,8 @@ +{% load i18n %} +

    {% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}

    + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html new file mode 100644 index 0000000..218fd5a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html @@ -0,0 +1,29 @@ +
    + {% if fieldset.name %}

    {{ fieldset.name }}

    {% endif %} + {% if fieldset.description %} +
    {{ fieldset.description|safe }}
    + {% endif %} + {% for line in fieldset %} +
    + {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} + {% for field in line %} + + {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} + {% if field.is_checkbox %} + {{ field.field }}{{ field.label_tag }} + {% else %} + {{ field.label_tag }} + {% if field.is_readonly %} +
    {{ field.contents }}
    + {% else %} + {{ field.field }} + {% endif %} + {% endif %} + {% if field.field.help_text %} +
    {{ field.field.help_text|safe }}
    + {% endif %} +
    + {% endfor %} + + {% endfor %} +
    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html new file mode 100644 index 0000000..6a8bf65 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/includes/object_delete_summary.html @@ -0,0 +1,7 @@ +{% load i18n %} +

    {% trans "Summary" %}

    +
      + {% for model_name, object_count in model_count %} +
    • {{ model_name|capfirst }}: {{ object_count }}
    • + {% endfor %} +
    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/index.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/index.html new file mode 100644 index 0000000..2b50015 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/index.html @@ -0,0 +1,86 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} + +{% block coltype %}colMS{% endblock %} + +{% block bodyclass %}{{ block.super }} dashboard{% endblock %} + +{% block breadcrumbs %}{% endblock %} + +{% block content %} +
    + +{% if app_list %} + {% for app in app_list %} +
    + + + {% for model in app.models %} + + {% if model.admin_url %} + + {% else %} + + {% endif %} + + {% if model.add_url %} + + {% else %} + + {% endif %} + + {% if model.admin_url %} + {% if model.view_only %} + + {% else %} + + {% endif %} + {% else %} + + {% endif %} + + {% endfor %} +
    + {{ app.name }} +
    {{ model.name }}{{ model.name }}{% trans 'Add' %} {% trans 'View' %}{% trans 'Change' %} 
    +
    + {% endfor %} +{% else %} +

    {% trans "You don't have permission to view or edit anything." %}

    +{% endif %} +
    +{% endblock %} + +{% block sidebar %} + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/invalid_setup.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/invalid_setup.html new file mode 100644 index 0000000..7c71107 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/invalid_setup.html @@ -0,0 +1,13 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +

    {% trans "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user." %}

    +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/login.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/login.html new file mode 100644 index 0000000..396be27 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/login.html @@ -0,0 +1,66 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }} +{{ form.media }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} login{% endblock %} + +{% block usertools %}{% endblock %} + +{% block nav-global %}{% endblock %} + +{% block content_title %}{% endblock %} + +{% block breadcrumbs %}{% endblock %} + +{% block content %} +{% if form.errors and not form.non_field_errors %} +

    +{% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

    +{% endif %} + +{% if form.non_field_errors %} +{% for error in form.non_field_errors %} +

    + {{ error }} +

    +{% endfor %} +{% endif %} + +
    + +{% if user.is_authenticated %} +

    +{% blocktrans trimmed %} + You are authenticated as {{ username }}, but are not authorized to + access this page. Would you like to login to a different account? +{% endblocktrans %} +

    +{% endif %} + +
    {% csrf_token %} +
    + {{ form.username.errors }} + {{ form.username.label_tag }} {{ form.username }} +
    +
    + {{ form.password.errors }} + {{ form.password.label_tag }} {{ form.password }} + +
    + {% url 'admin_password_reset' as password_reset_url %} + {% if password_reset_url %} + + {% endif %} +
    + +
    +
    + +
    +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/object_history.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/object_history.html new file mode 100644 index 0000000..f512aa1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/object_history.html @@ -0,0 +1,42 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +
    +
    + +{% if action_list %} + + + + + + + + + + {% for action in action_list %} + + + + + + {% endfor %} + +
    {% trans 'Date/time' %}{% trans 'User' %}{% trans 'Action' %}
    {{ action.action_time|date:"DATETIME_FORMAT" }}{{ action.user.get_username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}{{ action.get_change_message }}
    +{% else %} +

    {% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}

    +{% endif %} +
    +
    +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/pagination.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/pagination.html new file mode 100644 index 0000000..bef843a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/pagination.html @@ -0,0 +1,12 @@ +{% load admin_list %} +{% load i18n %} +

    +{% if pagination_required %} +{% for i in page_range %} + {% paginator_number cl i %} +{% endfor %} +{% endif %} +{{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endif %} +{% if show_all_url %}  {% trans 'Show all' %}{% endif %} +{% if cl.formset and cl.result_count %}{% endif %} +

    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/popup_response.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/popup_response.html new file mode 100644 index 0000000..6e4fac8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/popup_response.html @@ -0,0 +1,11 @@ +{% load i18n static %} + + {% trans 'Popup closing...' %} + + + + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html new file mode 100644 index 0000000..1572339 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/prepopulated_fields_js.html @@ -0,0 +1,6 @@ +{% load l10n static %} + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/related_widget_wrapper.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/related_widget_wrapper.html new file mode 100644 index 0000000..658a7b5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/related_widget_wrapper.html @@ -0,0 +1,35 @@ +{% load i18n static %} + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/search_form.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/search_form.html new file mode 100644 index 0000000..3bb5cba --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/search_form.html @@ -0,0 +1,16 @@ +{% load i18n static %} +{% if cl.search_fields %} +
    +{% endif %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/submit_line.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/submit_line.html new file mode 100644 index 0000000..b9467e8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/submit_line.html @@ -0,0 +1,14 @@ +{% load i18n admin_urls %} +
    +{% block submit-row %} +{% if show_save %}{% endif %} +{% if show_delete_link %} + {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} + +{% endif %} +{% if show_save_as_new %}{% endif %} +{% if show_save_and_add_another %}{% endif %} +{% if show_save_and_continue %}{% endif %} +{% if show_close %}{% trans 'Close' %}{% endif %} +{% endblock %} +
    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html new file mode 100644 index 0000000..80699d1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/clearable_file_input.html @@ -0,0 +1,6 @@ +{% if widget.is_initial %}

    {{ widget.initial_text }}: {{ widget.value }}{% if not widget.required %} + + +{% endif %}
    +{{ widget.input_text }}:{% endif %} +{% if widget.is_initial %}

    {% endif %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html new file mode 100644 index 0000000..fa641b7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/foreign_key_raw_id.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/input.html' %}{% if related_url %}{% endif %}{% if link_label %} {% if link_url %}{% endif %}{{ link_label }}{% if link_url %}{% endif %}{% endif %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html new file mode 100644 index 0000000..0dd0331 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/many_to_many_raw_id.html @@ -0,0 +1 @@ +{% include 'admin/widgets/foreign_key_raw_id.html' %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/radio.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/radio.html new file mode 100644 index 0000000..780899a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/radio.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html new file mode 100644 index 0000000..281d331 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/related_widget_wrapper.html @@ -0,0 +1,29 @@ +{% load i18n static %} + diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html new file mode 100644 index 0000000..7fc7bf6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/split_datetime.html @@ -0,0 +1,4 @@ +

    + {{ date_label }} {% with widget=widget.subwidgets.0 %}{% include widget.template_name %}{% endwith %}
    + {{ time_label }} {% with widget=widget.subwidgets.1 %}{% include widget.template_name %}{% endwith %} +

    diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/url.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/url.html new file mode 100644 index 0000000..ee1a66a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/admin/widgets/url.html @@ -0,0 +1 @@ +{% if widget.value %}

    {{ current_label }} {{ widget.value }}
    {{ change_label }} {% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.value %}

    {% endif %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/logged_out.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/logged_out.html new file mode 100644 index 0000000..6a18186 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/logged_out.html @@ -0,0 +1,12 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %}{% endblock %} + +{% block content %} + +

    {% trans "Thanks for spending some quality time with the Web site today." %}

    + +

    {% trans 'Log in again' %}

    + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_done.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_done.html new file mode 100644 index 0000000..3e557eb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_done.html @@ -0,0 +1,15 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} +{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}{% trans 'Documentation' %} / {% endif %}{% trans 'Change password' %} / {% trans 'Log out' %}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{{ title }}{% endblock %} +{% block content_title %}

    {{ title }}

    {% endblock %} +{% block content %} +

    {% trans 'Your password was changed.' %}

    +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_form.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_form.html new file mode 100644 index 0000000..8c26108 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_change_form.html @@ -0,0 +1,60 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}{% trans 'Documentation' %} / {% endif %} {% trans 'Change password' %} / {% trans 'Log out' %}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{{ title }}{% endblock %} +{% block content_title %}

    {{ title }}

    {% endblock %} + +{% block content %}
    + +
    {% csrf_token %} +
    +{% if form.errors %} +

    + {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} +

    +{% endif %} + + +

    {% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}

    + +
    + +
    + {{ form.old_password.errors }} + {{ form.old_password.label_tag }} {{ form.old_password }} +
    + +
    + {{ form.new_password1.errors }} + {{ form.new_password1.label_tag }} {{ form.new_password1 }} + {% if form.new_password1.help_text %} +
    {{ form.new_password1.help_text|safe }}
    + {% endif %} +
    + +
    +{{ form.new_password2.errors }} + {{ form.new_password2.label_tag }} {{ form.new_password2 }} + {% if form.new_password2.help_text %} +
    {{ form.new_password2.help_text|safe }}
    + {% endif %} +
    + +
    + +
    + +
    + +
    +
    + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html new file mode 100644 index 0000000..19f87a5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_complete.html @@ -0,0 +1,20 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{{ title }}{% endblock %} +{% block content_title %}

    {{ title }}

    {% endblock %} + +{% block content %} + +

    {% trans "Your password has been set. You may go ahead and log in now." %}

    + +

    {% trans 'Log in' %}

    + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html new file mode 100644 index 0000000..8666fa9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_confirm.html @@ -0,0 +1,42 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{{ title }}{% endblock %} +{% block content_title %}

    {{ title }}

    {% endblock %} +{% block content %} + +{% if validlink %} + +

    {% trans "Please enter your new password twice so we can verify you typed it in correctly." %}

    + +
    {% csrf_token %} +
    +
    + {{ form.new_password1.errors }} + + {{ form.new_password1 }} +
    +
    + {{ form.new_password2.errors }} + + {{ form.new_password2 }} +
    + +
    +
    + +{% else %} + +

    {% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}

    + +{% endif %} + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_done.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_done.html new file mode 100644 index 0000000..c6fc358 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_done.html @@ -0,0 +1,19 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{{ title }}{% endblock %} +{% block content_title %}

    {{ title }}

    {% endblock %} +{% block content %} + +

    {% trans "We've emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly." %}

    + +

    {% trans "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." %}

    + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_email.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_email.html new file mode 100644 index 0000000..01b3bcc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_email.html @@ -0,0 +1,14 @@ +{% load i18n %}{% autoescape off %} +{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %} + +{% trans "Please go to the following page and choose a new password:" %} +{% block reset_link %} +{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} +{% endblock %} +{% trans "Your username, in case you've forgotten:" %} {{ user.get_username }} + +{% trans "Thanks for using our site!" %} + +{% blocktrans %}The {{ site_name }} team{% endblocktrans %} + +{% endautoescape %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_form.html b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_form.html new file mode 100644 index 0000000..5c5d761 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templates/registration/password_reset_form.html @@ -0,0 +1,29 @@ +{% extends "admin/base_site.html" %} +{% load i18n static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block breadcrumbs %} + +{% endblock %} + +{% block title %}{{ title }}{% endblock %} +{% block content_title %}

    {{ title }}

    {% endblock %} +{% block content %} + +

    {% trans "Forgotten your password? Enter your email address below, and we'll email instructions for setting a new one." %}

    + +
    {% csrf_token %} +
    +
    + {{ form.email.errors }} + + {{ form.email }} +
    + +
    +
    + +{% endblock %} diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__init__.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bd661a454fbfa9c686a0a9e06126c07a9ec4259 GIT binary patch literal 159 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(mydo)Zh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rYWD=ErM(oamu&CJs;NzEF4FD%U7s literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_list.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_list.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2c5028ac4eda17829bf71a5804cb62b78ff1259 GIT binary patch literal 13225 zcmb_iTW}=TSw7u87tKZY)orh{ve(Yome!Xzj+6D;i?wSz*xInGioK1^(3);ZE%jXX zbZd7tkqBV}YZHo)A^`$Ps8kUy6-eL#p2JI?LKVdW6b%IrdGZ5QR8e{H3w+;ydZdwd z?W$BU(wsT>^PhA6^Z(!fpEEr?TzLKt-Nycs#Q>KLA8p?Et(oR6%DCYNx3D}Dl50FS{3D1RI94o zs;QAz(XeWbD0jr93o05_tuf_}nRHP_AXJ*t97)aJ*OKdJm<>Pt%9wUk>|{*>~k znRFkM3Xdy)hBkeUn1KdJmv5?@sQY2}}h_<7~mlz&#@PpVh^ zdF4OE1j67cb=Ohu)5?EX`RAm@Gs*{Lk4pUG$_Hh2i9b6)M_uT6O!<$qh!lT9`5$!B? z594m+?KIXp8rebQAI`evMcY9-8hNWhG*G7+bvj$yUDE>H6feF0dgF7KuBD}`*Oo3{ zljzWAFTHYEV&&_XFI{{2RmMTf#MRZ!pqVUnf_S-;T)q>=333aqjvquZV#U|PRqg2= zM62sT(nx|9C`^kh85E_~ViTucKKw1>`!c@q zE`nW4B}#4CO5+eD{l%}TzbX71YRIx})o#Zd_&mI^I0SdwR)O$%zX z$m+A~bY1y*)pnF$V5NRPId$DHVsnRjm&-MLUJ2TP#`4s>b}elC;jPf$_M%$XTMw8H z?$n~Ny@hDaV`kV!T_1UIvMB9)xy8lBT5tYB+(i$~$cy6_=97&uUSJpV7eBvu;XI2j z*7P*y+?&4O)i!jn_QL$<_wX;}-o;w4+HV`Q{rMDJHr(@jG zo7;ijX~c;R+v~c7Y(2@cQbu1#rzJFKuw`7gQ@a_ZR`?f6pGB4rasy3hDSOXSd)Rzr*{T{pn(cbE zvmmjY+H=&dqv99Ux>9>N)h=1!puIdfX0O1_-bCC{Tb9z1O8PnA16Ka`tko_?0Phsk z%vMh6zg4?ARwa*tWo(rc)f%`9jiuf!e!x*=#jiW+Id*iMO*V)6t@g_?j>Seo28NhL zhqGuqyM?`a+%n^2-I>m3vYrpdG;Pt&^fEB&se@7beMn_gk%6&jj_P<;wt86%YlgFd z$w0Ulxp@AN+AXTim!)1wC1vH8vJ>T(IfP%4%qnLc7I0>Ud#@foGs#9!gG>yAxYk*d zgA&)0PL0{Zd>?*n-gmI|?^7haUq+zG6>>oI8N|}bjHw_?8alYS9qPb$tMNwXcEgLJ z#+G&31Xy$8p9B zkZCxD`Xmz4Ykf$lI_OtF%A$`UaI06B8<#IZI$wWn>9Sj7YI*6pJJAlHDEi~!u(Y@2 z_?cjy!;p506U=b|>Gg>InAwYx0~s3|EM?E zVQ=(+$VKV{lzUr2+@N^CGF_?LdIsGK4G=Yjt_Pi>(|pp|3ff0!JaW)k1Crz&G>p0X z%66=hnaeXs?Td(GNKj}t@r@mD3^^K@0!Q9bcmCVPM3^INzx2+3+Hd3V;~&~Vqyx(^ zLsLma1Ll0!mTEW+IQgg`=Y4BPbvJn?OwLw8gh*cLA5#c0A7e<*JU4k!P~Vrsg#L>v z8RB8W*~00tS^(I;nOsxd~2Ucak~Q?kEXi0z};WzEqbE4yx}L zAF8`Ma=77}*^(5MUa=2GF{8_dayW`a>>?HuTRY9A1DeKUF>8{2Ou{2X0UW*p!DQ@rK1C-V2UB7|Hr2IJw;&7&V`vk9MQ{&3QLBc-UJ_A zub=5Xe!mc=GOjf{(RQm{+Xy@#$j-o%v?9Q;A!^*M=pfnF?S_{mdSy8s^_rAEjpjzs z+*Ro#_J;Q+c6ZdBF@fpAN+xop`HJa3vj=VHzC`0t~qAP4t_a z>I**rDL18YIX15|YYo*=HQB(?67Qo}7sxW>&G+Ch7*KjtVhwADKY z3jlhf(O=;UQK#ue@x{eMEdaBHez$~aWiuFN7A%Ocqr+s!tw4b>1!TRWXEB0XW{wV8 zom+v4C!O{6DCkxC%ZGLQz^c`!-Qz@nvcgyzv&fLf-1#^y1%O}zXVWTKqLG;=I*&2Z zys(0%o^dPvO>3;~q!Z{M(9Iz0je_4GN+Nvniou=*V;7_ja?^a&xeY;|<1lGnkaAk^ zx?M~dNhpyxErf08g2d=i!o4)N*$LbAW1>yn=?70j*I2VG#+2wF{RwGGI^6Lv&WP;O zuRn=Wx14M=glmJ?EgSYrcDjK((hhEC?8vl!iIq#}B-^5qj^Nn-Ubw?qI@^hU(rkvl zNJ6Yl*Y04-!X5W%xWgO*VX5LS0+p*;C!xKo&~u~qY3RDqTopRJYE^8r?^+?qxi>r|aNv>A2AtTAWQ8phu^YR#EaloWsu_@`GeX0s2q$-Z3w zm+_6cnm8OdF@qq$M^1s73x{cr;vX88I052G^e6NeY^LQNEMeLMVQc+-2n?`rE?$gp zt*@lcP7q&7?RF-$3j>=^%3@t7ER16K15J6hVwh8DUZ9 z0>Gv;>Tu>dWjL)+NS3w8yQtp!%p|fybct&;}hr85R^!S^Oi$fqnF27J3IeQq2Dw z;g%UVYYTNLpu-?Ajv&Z!ZlJz#=qbx! zs+xi-Vi0)ZWs{m%FbKNkD=T%&oft$5Vy(t?2lANO7S28qOvVO2BAF|+Y$2-%LH>pE zM(jC=r5xxp-b*LJz5(Y~Twg?S0PNG}q}Sac}B@?z!HK z?7%{|)7|babO3S!Ey}DneBtwZnHLW~NG5)kO#F+z3XmYJoQ}yWzgDb3D^|q5vqp1UWCUp*3X*rC6y%Mk84ALR+ zPLPDH05BRcV0^^&>(Y`iC&^%+rZdj1zTvfZRytSP!L=aL^h;tANOx7eh#-^4A6^+S(F>R{F` zpf}D0rY_c$y}EWpi>G5p55+&B$M_ZkxJ-*gfhX~u240*8!m9uuP6=|HfFJ0DHD*uY z7f8}Bq2w%TFg1rbaAeN0CZ)|;r({h4VUD5~{5dDYrzCN!lAp3>t>aeNI)k2ppn#DS zw`KpsJ?AH;j|(g20yQCoJ&gMtN8MBOj2is-8_3Tw2XTs;;2$s*!1G-w90-0}{T7famhXDqTCO{~ zgKB9$-o~mB0fy}`X*7Tfb8!%@NvVDVRe1B#FiZ)6xQ~VPZInG@VYnP33id>A@?g;y z_xsE1w^5vy8x2@}+c;E>wA#SUffrHWAXRKM{7w^Hv%>=pty_AB8S@Ob5iIn_s=^m3 zIZfoqhqLF*oA}0GL_igbW>?jnn_K`Ujpjo{pbn6w_=KQPfxUrN5Q-m;>jqFJm7v|{ zfk+nBoyW5-mfop}L6RdE?l(YuzrhXlW`BhX<}NFSk?QoqZrVS<@Ek=WDa{l2diUZkTyBov)Jn98SJjG2>=uOll3tD84Hzn8R9o( zsaP_mG|c1Fm3z<1fnPFrwIV$-7Y>ArFRI-jE!g=1E-$o!TE->y944Y)WH8Nu+#)j; z6FVK}MVoOZWa}ebQP1hmu;R*oZSo3oh1rVP==w{@Os$QB(`Swy_wQ9M^D#tJj_!eB z>zFlyUvU*!vcvmAhyv(mboT2-w9)4g^k$8$HGYtc*~Qflds(S{2R~_oh58iRJ??>Xw-qUwH4 zy_;tUj*1_#NR1;G32^kw*~F;eE+5x^NQ%izX2YE&NCWrcSZOu#}CNOpiFsXURt?uL6#gj`d4%BLPP^+(V@71)G$;U?*d; z;FySb`LSZSSU`8Yp%q*G2pyRt9b=4V(=emnv(!Dn4d9Esx>r#5a3c$5fN^t-`vvQA z3553t|MLe8YfN@DIy`JBE+I||K4UzcK`%1RY&0_z76A`y%ut2>p&l@|S(zLB6K0T6 zA-W*EHP`Q;XgYueh8u+I^%K2U?h{JH=e3Ox4qV;b*b!7CS-uXVXu*e5t;Rb#`s{&~ zlbybk>0I1s>;#_fl^AQ`YHp)fWYqU|dO1d#IF0h*FHaohf6TxfHmII=Wh1di0#hvU z+5&?V`;T30BfEwLhBww}0)@>1MF~%Ed#lS+PkE%Q-bvC9-H}b_u;Hia6@~ZMgHF!z znsg=25s>NMWPUyglPE~XZ{Xoep%9Yk(k@vSz5LE)(L*w6a|GUn@W7!!DFlfkOMxYzsGz!_Z6E;1!Z;57 z6Y*7OC9$7{VEx963SluN`DthPH+ChcHy8pF9ygmrAtvnWr)j` zKD%)Js9I$GUPB~XzZd)Khb1&C2mEGM&d8FVZRNg#p0RS@#LvOX>8~-@)?a5Xi%^5y zp?{yjHyHdOgR>0g8T=7~ZywA&&2gm;&83JMGMASS$>#Ejfw_Qe!vZ4WGpTeW(^mb> zw+}WSbkc{bzlESra~2nxh1|oGe)oXV<@#hga(JWUD%}HAeHA^rL-OPYkQSFp>+3pL z$1WLz-FYKyyUrWl9U0mzAtt8u27=Uqy>nzm#c3eKrdFf>vVo3gw@iLCe8o5puXz+f zhNkmi2Uj}6DY2X9%Eq$v{VslwgTBY$V3YoU$%CDeP5L(SRylRN00p=y0Y#RxKU%O8 z_LMVWpFr#wEYx9sVc9+kOV)wSdcr=3`;HTmn!ruUS*L=yNy8a#pKvM;Q&SGS%m5qY zUw-<0EU1(ijN2?bZO*tcWq~Mw1+w=L0}yHQ@YXy49dWRaLPryad!Vo2FS!O~A#VTm z!=E6z&#x#~1$>2OE*(e(&4faNlo;YB13DJBowjJfdan1}A+6%!c@C8cbxBJUib>P5 zCNzMeP4+x5fsBdB9e2q>tLF(ShdNr@tqq!bi6L(?Ke!Mk!BZ ze_ldlP;|g*0r&zW<)%R}Vwa4;i?~=aP%rp5Xx3;Oxu+II@;m4ZTCp26>jgc+#8BS> zk;1WsSBctaoX?<4vv%K<`!iN{l5TW#?X#PCLFY!J|A_N4{5J~2q6ANn{vMhi;y=z& z=64zq!*-YusD>iMgl5Q(mb!o+P~W>HytksE$A!Dhdq6%7qt6jf!@zOo6@j@=t8I8O z?$ClZ+%}vPoHU)b)Z(+QC#1KyQ@b71c%xV|_io~qqYnwbB*VJ!fSPv<=E{s_+WY^D z57>~xlOQI0u5@%&hRu5g(>(r1t_bZ{l|OFj@8kCnNABtRN!$F557Fu5J$gz=7IHZg~9C@ z?@q$DyinAn&^!g^k#?u|8|h#%xYG=}G#X;LHE>H=p}%S%#Auf8ldXpbyXfaGMjgH@ z5_z;giGHEX)Vwa2%YC%vZJJO0i zc0oAq?4ec(uuF`0@0hlpLNomx1hg@5)4)@h4gp0$`(Z|W^a(W=;+=fJEthx7=2fM` zllK@96KHC5QEs9;M8L}V*F46;N(0B@Eb~NF z4qY%_+l$~n6;sSt;c%RH=K1pD{y%#RcL4=wYOMO?>2mc(wNR~Ae{s4}Eme!vG30y( O-^%IyRJmF@o&P`nQJzQu literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_modify.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_modify.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1595a7819861292241d4f159dc0affd510cdfd3 GIT binary patch literal 3749 zcmbVO-ESMm5udvwkK~Eew`9vn+)H97Wm;2-(WXe?8f`5Us1YbZmBPri>fy*;Nk<*; zPJ2h|15!~yc`RDwrGG>F-v6X;``RbJ_NmBIf3ru*lq2_{ly+}+c6N4VcJ?>B-syM` z2cQ1#4~sU>u(a5I2CX44BN*o&1D5zmvBT=WMP9v8B zmn>=1utAqt+a%$VXwcW7TO^w_^hkiovzBO)@ObLdqF{~${@X^fJtNsRk{uHBQ_0TE z?1GtHB(XG|oj0=!B$i36Oqmd{Xs5gS0*=vk*V4^Wj`AcbCFsVJEG^|p`NF~^#>>A- z2g$gIv-Ia;6sOynkOQ9LpNqDH_5`hX1nxf3g~i&>i4I*-@6owML*gNr8$*kovxGgJ zKcv0ZHb?icN$TlT8JLx#qo?%j=%@6Ix2@61 zUs+&l_s?`ur}G*O9TMg!&g&fajbV+}5$fp(OoV%2-t_P3q;tQ#VmXNYN^Wy zn*W;w0=r0Mb7lgeN31U$ie2OD(bx10-Vd?Q3Y#ZZsq|<##|C1r*fvs-*y*mFedGD~ zJy8-z;YWTF7p0%=`MHvLmXG;>M7S5rL==8`5S4y$kc|`JE13$Z{HM|Ls2Hd?Fa5nt z8CB(hytdk(tj4_G&&mU+!A5+pykz7@sqo`8iBnnhjDnzLW_dDLt7byO37J*Mve?#k zEY6&F?-#mmwCh?Ljbtz{WX^V_gVQh;#Z}JO$dww}4(H5U=x}&&e|N=X4rr4w>)+UP z9U}GWoImlVBu@LS0*V z_^3JVI0jYMVQL=T_s}Lr2dzDIP&ZEu_obZ44_Azz%cH*U7CcTkQJ9C#f{&BnM0ZXT&ZDqSzLLz%wn=$)Gtg-G=u zK#55VvXu||>UJ(*z|GkITV&@1xj74g;ecsCG*b>J;4`Qis2WqidDJ~1?WJuHxZ*UX z9M?!UAq@3q&^#0N2e%OBU2- z=plq2^<;@{%09BpG(I(I7d;CWG7m)?-l2e?0@W#dVmQl&{+#J{j9QNp2%C1gD`%e= zkll(4RNqqr#wt5z$nTHKGD{0aWnaidayV0N1@UK$b1%?M6bP5cT|c^qt9_lG@* zQj{~P0?$khlB|$jM?1h4#ki{0(RCLTUrF^gckgibE_e61yU*Qw+`Z4;_qpqG$B+;- z*$K8FSesJUBB}U7X=hNLym|?}V%#6aWr%bA5HiKb=&0sd)!(wUJfS@6uC)QoX#-hY z%K_S~*&FzFtVQ4t@W@s@to;9gM!kupii_>p;=~@V@z)@QwF6$b&MB@NuR1dS(h)|G zFCj8TkWJ9R?Mcq?yCBT^LpdnJGRu%Gn`4#I53 zuNGE8e(QCMs)$<##Q#^Y-+Y|{-t{Xsj;jtij@3eLsEaUUx~|!Y6R6 zN1@_^9o(u0y=futO`jYNW_7I}p~!Mbb>p+RuOfA-n@aBEjVF~U#oEEKm_lkUsp1P^ z4n@0ral%r(^~{YjdB@K*q#T}`<3v8@TrF17we3aR`9-_!wEesF_Px9HyWW2RX_0~h literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_static.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/admin_static.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aaa13ec071d4a0ea38bbe428193c7aacf1cf1c5e GIT binary patch literal 639 zcmZ8eO;6k~5FI<&O?Cw;Cxkfp!XXEeik@0k2&r6<5JGUM6jfb$W3zbce8~1v@pXbb zzk|P&D<}Q}C&tNcg=%}olb4w{Z<5XR_3>Wu?bj0lc!3Wq!1w^o{zfP85YPa5A5+i- zN(wmz;@<_J11Lkt2mNyhdI)6%c?3jKc)-FKWDN5WhyjQpJOVrr$U{$ioGTo!8EchG7^yo;>;W?;60Lu=Dwde}k+1 z1A)LFgA5>Nz!~HYa0hZ1xC^-l+yh1u4rD&$HQ=?1b|I@n-T>aHXb-X`dc2MguDa115DOn)`j-~ya%!evp$F#h&p@#c#rl6TV?}9bIaVb%zY36h!);u zq75Ph(E-tg501TfK%BFvcZU%{XD$K^z&g^mj)FVc6WuBvmq(?o4@K3NDkamYM= zw0pR|!&QEQ08_jIn1O|eGq`YJcosP)x1B`f>HNuI8QWjvm}XKGah9CR%mg{A&Ek2I zOFZzelWZxCo2cn;pn9nHuamLPi*b<_kIt8ACLYaa@mJ#Ul^%;(GM_HC+hj4OgE5;bgQE_8JD?udLY?1#qC`SztpD+aU(N26DV1S6Wq2U{zMeHPEs*XI| zI=ER!E6_*MQ~{F-n`{bWYhw>_9_r*umNB_3-|1IRPbQQ~`ntHQuz2LHKZgxNgEt4>am%T0;T+G#`Mcn{X9?`W+Z!zs%pj&sgiL0A_)OEx2%CxNcGT zqwQJS!m#2Zfxi}9IiQ+Mpk^PgYJ~sm8Zx&bpkob~bw~(ZVk^A#CBp{7j>)=^_h21j z*R)7#6~gh#1@+pVx9xc!*4UcJrSlG+SIRI%RHg^SMy$%(vECyL>9Z(2G2WukrRif+ zlu}(w5nrU4ma4p?C%bjWhvglW$*q4_VujxhcWZrei4`idwA6er{zz<9D5^1RulBRE z`1Hl;kEikLZ(rVRnXg{NPoMqp{Ci?X`^Lo%H6H0wWZ8HkooGd-l}j|u1D)!0F;`7u zQpu_Y0^Xozqgv-QA1tP*##D&F)Ru+7$-p00?KIl-(a6Rz!r)P3sqT^d0|L}Aisoz7 zHT6ve8y6LGzgQH@f;aR61C*Ii`y_gRzyx*@3F-)54K9I`i#KzrrkGNTCVFy70>;k? z<*mt5DLL2nQfDW7D6``aHP=q-9V9}~1pDt}krU++0&u#l>kQbC)tojPIG-|?^;pP! zXNbIeZ0Lke4LJd`5UCzhpX0q~XxeBvOV39(mXDdY&tWsdYgG;v{v82-@V^ON>NG3u z?BK190IDtROMQGe-rt^)_~=sW!Y1C-pQq<4Q8%Wc

    W`DpRWp(oQdB$4gMAIPPVP q!_WG@GoEa=?2Kw0|R6J0t=q42&Z4C@>5G!}$YXg+dp@ z2NVXq1Y?Nc10D`Za+wb77Y{yvEVq?&yccnT<5#h5Wo|@b@^xZ<%T1C?+1%&^<4Mee zvPqUAY2FH@s&p+1}HR#t`=O>IPNw4$2XQ1381cF1{EqmrkmHqb(@Y~(7fY-pNm zQQKg(s|z(GI}?*%3w^Zn&bWj5R%e5^xgy+TA#Sd3?64H8d?$_0qU)QcmbcmLxbj|M z8MgsJ$p&=M;yGFoha=7lnQP7YU+~Y*3$tw(ZPmV5?kZWns5kuE^5wNzl$*R>H~m8I zQq^*i6J{3u`w=L5vCOrYx3??BI$$7r&>2G%gcmkwTBG;V>mWcNweID!Z^6tVV}J$67{;OMK(iBkh)hKkuX)FE`{o$phlPx8y$sds7{C-IJ~_x z>PzI*IgzJGQl=i${*1^IBF~Tzr>XUT#calA{+K;tr|g-xKmVWd+&hX0y##a4ZOl0~ z`cBe*%=w#LF7Gu1&da9Y+=0M3JNhPd7vI}ghK~>X#(HtA< q$q|6_J}GlqEwKe|6~V)`m%I4M&!^Yg;p=0Z-&5;qYQNhKi*^A3 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/log.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/__pycache__/log.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f2bb0af0681d5e5c9ac68edde2496ccf7054d69 GIT binary patch literal 2453 zcmb7FTW=dh6h6D_TU;lN8nseDf~iCaD^WXy@<3EoMf9Rdl|c%;xRlMtJ8{-t@47SN zrZMRYfhT@MpZP(&ta#%oe}N~yGwY3$qL#9<&(6-7bD8sfbLQIea&xP{{lkY1qQB_e zQ^EKy{`yCV2tS7sqOn6ghaCQPDRF7+QO_esIy9`%2~n>~4GidX+^yq*esWTVF-vIEDLe7Ri1Ej`-m>|G&mxUxzq$=-8!Wk39F7 zD8K|H<{%M{khjzIy}X*l`Oog^EyCr5cB2;ww0 zK>+wjb8*O-T|K|QcDbVOuoe%$`ENJMJ4Wete78Hha{Hk)rLExN+_CBUj$-$AT!?^`_XxioVSZ%Pti8H%y?KLu5cSYLL2427Ga8=rNaGx|D9u7rgWsh=ODK zfrZ8zt`DmO-Q29kTfw>$a$pSbhIJ+d=x|~YGY#u*iMjWyOY4j<+%)MnsJi1o(F0Pzd2vEOoDLvxuYDD_&DFjig%Pdapu|bJ@A#E;%h{ z)w$|?>de+k^ccK$vAXNm7%Jvw5ai7u7-!Km;c+Vno=wA~&?rVxwOCwZ!8|=D7;(ku zF^x47y5+RImS^YA;N`+FRV=ms!~hiryhCS>r?IG@`oL)fhnr+9ssIU-KidNbv=~(o zKz~!J(Ob^cRa!>_8F{4AQeB^`FSxIedc_<-sP(8}4PKQ7mH`N7z?i08grLzSJ8EIH zObb^lG=i%?tZs$YQ?!@M$j;mGSHq9M>!!f-Z8n)Q#v&BuF%@VCak!UAaTuEeVGf|= zb1ZOl#eSyj%piU)Q_)v3=n{wRrgiqc4hM33yZB)5Kiv=mX##5=u=x|)bDoM&izoBG z^OSuCOdRoKPN)E?fX5+vL^`m_0IYo~ZoDj<-+vLJ-%9<~V4rProJH`nI9s2yBTkT? zeN-I#-hWWdPu^y%v0`qUB8|;Y(=r-ys9S& z`lXl1RB^JsweRMa|IQI8`{KS*nNr;5Y>&ZBTbqOm_0Fp%8_6`U*_VE;N#)BIiu@kz z^#>5NhF0h7jOcK`qY literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_list.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_list.py new file mode 100644 index 0000000..22dec69 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_list.py @@ -0,0 +1,485 @@ +import datetime + +from django.contrib.admin.templatetags.admin_urls import add_preserved_filters +from django.contrib.admin.utils import ( + display_for_field, display_for_value, label_for_field, lookup_field, +) +from django.contrib.admin.views.main import ( + ALL_VAR, ORDER_VAR, PAGE_VAR, SEARCH_VAR, +) +from django.core.exceptions import ObjectDoesNotExist +from django.db import models +from django.template import Library +from django.template.loader import get_template +from django.templatetags.static import static +from django.urls import NoReverseMatch +from django.utils import formats +from django.utils.html import format_html +from django.utils.safestring import mark_safe +from django.utils.text import capfirst +from django.utils.translation import gettext as _ + +from .base import InclusionAdminNode + +register = Library() + +DOT = '.' + + +@register.simple_tag +def paginator_number(cl, i): + """ + Generate an individual page index link in a paginated list. + """ + if i == DOT: + return '... ' + elif i == cl.page_num: + return format_html('{} ', i + 1) + else: + return format_html('{} ', + cl.get_query_string({PAGE_VAR: i}), + mark_safe(' class="end"' if i == cl.paginator.num_pages - 1 else ''), + i + 1) + + +def pagination(cl): + """ + Generate the series of links to the pages in a paginated list. + """ + paginator, page_num = cl.paginator, cl.page_num + + pagination_required = (not cl.show_all or not cl.can_show_all) and cl.multi_page + if not pagination_required: + page_range = [] + else: + ON_EACH_SIDE = 3 + ON_ENDS = 2 + + # If there are 10 or fewer pages, display links to every page. + # Otherwise, do some fancy + if paginator.num_pages <= 10: + page_range = range(paginator.num_pages) + else: + # Insert "smart" pagination links, so that there are always ON_ENDS + # links at either end of the list of pages, and there are always + # ON_EACH_SIDE links at either end of the "current page" link. + page_range = [] + if page_num > (ON_EACH_SIDE + ON_ENDS): + page_range += [ + *range(0, ON_ENDS), DOT, + *range(page_num - ON_EACH_SIDE, page_num + 1), + ] + else: + page_range.extend(range(0, page_num + 1)) + if page_num < (paginator.num_pages - ON_EACH_SIDE - ON_ENDS - 1): + page_range += [ + *range(page_num + 1, page_num + ON_EACH_SIDE + 1), DOT, + *range(paginator.num_pages - ON_ENDS, paginator.num_pages) + ] + else: + page_range.extend(range(page_num + 1, paginator.num_pages)) + + need_show_all_link = cl.can_show_all and not cl.show_all and cl.multi_page + return { + 'cl': cl, + 'pagination_required': pagination_required, + 'show_all_url': need_show_all_link and cl.get_query_string({ALL_VAR: ''}), + 'page_range': page_range, + 'ALL_VAR': ALL_VAR, + '1': 1, + } + + +@register.tag(name='pagination') +def pagination_tag(parser, token): + return InclusionAdminNode( + parser, token, + func=pagination, + template_name='pagination.html', + takes_context=False, + ) + + +def result_headers(cl): + """ + Generate the list column headers. + """ + ordering_field_columns = cl.get_ordering_field_columns() + for i, field_name in enumerate(cl.list_display): + text, attr = label_for_field( + field_name, cl.model, + model_admin=cl.model_admin, + return_attr=True + ) + is_field_sortable = cl.sortable_by is None or field_name in cl.sortable_by + if attr: + field_name = _coerce_field_name(field_name, i) + # Potentially not sortable + + # if the field is the action checkbox: no sorting and special class + if field_name == 'action_checkbox': + yield { + "text": text, + "class_attrib": mark_safe(' class="action-checkbox-column"'), + "sortable": False, + } + continue + + admin_order_field = getattr(attr, "admin_order_field", None) + if not admin_order_field: + is_field_sortable = False + + if not is_field_sortable: + # Not sortable + yield { + 'text': text, + 'class_attrib': format_html(' class="column-{}"', field_name), + 'sortable': False, + } + continue + + # OK, it is sortable if we got this far + th_classes = ['sortable', 'column-{}'.format(field_name)] + order_type = '' + new_order_type = 'asc' + sort_priority = 0 + # Is it currently being sorted on? + is_sorted = i in ordering_field_columns + if is_sorted: + order_type = ordering_field_columns.get(i).lower() + sort_priority = list(ordering_field_columns).index(i) + 1 + th_classes.append('sorted %sending' % order_type) + new_order_type = {'asc': 'desc', 'desc': 'asc'}[order_type] + + # build new ordering param + o_list_primary = [] # URL for making this field the primary sort + o_list_remove = [] # URL for removing this field from sort + o_list_toggle = [] # URL for toggling order type for this field + + def make_qs_param(t, n): + return ('-' if t == 'desc' else '') + str(n) + + for j, ot in ordering_field_columns.items(): + if j == i: # Same column + param = make_qs_param(new_order_type, j) + # We want clicking on this header to bring the ordering to the + # front + o_list_primary.insert(0, param) + o_list_toggle.append(param) + # o_list_remove - omit + else: + param = make_qs_param(ot, j) + o_list_primary.append(param) + o_list_toggle.append(param) + o_list_remove.append(param) + + if i not in ordering_field_columns: + o_list_primary.insert(0, make_qs_param(new_order_type, i)) + + yield { + "text": text, + "sortable": True, + "sorted": is_sorted, + "ascending": order_type == "asc", + "sort_priority": sort_priority, + "url_primary": cl.get_query_string({ORDER_VAR: '.'.join(o_list_primary)}), + "url_remove": cl.get_query_string({ORDER_VAR: '.'.join(o_list_remove)}), + "url_toggle": cl.get_query_string({ORDER_VAR: '.'.join(o_list_toggle)}), + "class_attrib": format_html(' class="{}"', ' '.join(th_classes)) if th_classes else '', + } + + +def _boolean_icon(field_val): + icon_url = static('admin/img/icon-%s.svg' % + {True: 'yes', False: 'no', None: 'unknown'}[field_val]) + return format_html('{}', icon_url, field_val) + + +def _coerce_field_name(field_name, field_index): + """ + Coerce a field_name (which may be a callable) to a string. + """ + if callable(field_name): + if field_name.__name__ == '': + return 'lambda' + str(field_index) + else: + return field_name.__name__ + return field_name + + +def items_for_result(cl, result, form): + """ + Generate the actual list of data. + """ + + def link_in_col(is_first, field_name, cl): + if cl.list_display_links is None: + return False + if is_first and not cl.list_display_links: + return True + return field_name in cl.list_display_links + + first = True + pk = cl.lookup_opts.pk.attname + for field_index, field_name in enumerate(cl.list_display): + empty_value_display = cl.model_admin.get_empty_value_display() + row_classes = ['field-%s' % _coerce_field_name(field_name, field_index)] + try: + f, attr, value = lookup_field(field_name, result, cl.model_admin) + except ObjectDoesNotExist: + result_repr = empty_value_display + else: + empty_value_display = getattr(attr, 'empty_value_display', empty_value_display) + if f is None or f.auto_created: + if field_name == 'action_checkbox': + row_classes = ['action-checkbox'] + boolean = getattr(attr, 'boolean', False) + result_repr = display_for_value(value, empty_value_display, boolean) + if isinstance(value, (datetime.date, datetime.time)): + row_classes.append('nowrap') + else: + if isinstance(f.remote_field, models.ManyToOneRel): + field_val = getattr(result, f.name) + if field_val is None: + result_repr = empty_value_display + else: + result_repr = field_val + else: + result_repr = display_for_field(value, f, empty_value_display) + if isinstance(f, (models.DateField, models.TimeField, models.ForeignKey)): + row_classes.append('nowrap') + if str(result_repr) == '': + result_repr = mark_safe(' ') + row_class = mark_safe(' class="%s"' % ' '.join(row_classes)) + # If list_display_links not defined, add the link tag to the first field + if link_in_col(first, field_name, cl): + table_tag = 'th' if first else 'td' + first = False + + # Display link to the result's change_view if the url exists, else + # display just the result's representation. + try: + url = cl.url_for_result(result) + except NoReverseMatch: + link_or_text = result_repr + else: + url = add_preserved_filters({'preserved_filters': cl.preserved_filters, 'opts': cl.opts}, url) + # Convert the pk to something that can be used in Javascript. + # Problem cases are non-ASCII strings. + if cl.to_field: + attr = str(cl.to_field) + else: + attr = pk + value = result.serializable_value(attr) + link_or_text = format_html( + '{}', + url, + format_html( + ' data-popup-opener="{}"', value + ) if cl.is_popup else '', + result_repr) + + yield format_html('<{}{}>{}', + table_tag, + row_class, + link_or_text, + table_tag) + else: + # By default the fields come from ModelAdmin.list_editable, but if we pull + # the fields out of the form instead of list_editable custom admins + # can provide fields on a per request basis + if (form and field_name in form.fields and not ( + field_name == cl.model._meta.pk.name and + form[cl.model._meta.pk.name].is_hidden)): + bf = form[field_name] + result_repr = mark_safe(str(bf.errors) + str(bf)) + yield format_html('{}', row_class, result_repr) + if form and not form[cl.model._meta.pk.name].is_hidden: + yield format_html('{}', form[cl.model._meta.pk.name]) + + +class ResultList(list): + """ + Wrapper class used to return items in a list_editable changelist, annotated + with the form object for error reporting purposes. Needed to maintain + backwards compatibility with existing admin templates. + """ + def __init__(self, form, *items): + self.form = form + super().__init__(*items) + + +def results(cl): + if cl.formset: + for res, form in zip(cl.result_list, cl.formset.forms): + yield ResultList(form, items_for_result(cl, res, form)) + else: + for res in cl.result_list: + yield ResultList(None, items_for_result(cl, res, None)) + + +def result_hidden_fields(cl): + if cl.formset: + for res, form in zip(cl.result_list, cl.formset.forms): + if form[cl.model._meta.pk.name].is_hidden: + yield mark_safe(form[cl.model._meta.pk.name]) + + +def result_list(cl): + """ + Display the headers and data list together. + """ + headers = list(result_headers(cl)) + num_sorted_fields = 0 + for h in headers: + if h['sortable'] and h['sorted']: + num_sorted_fields += 1 + return {'cl': cl, + 'result_hidden_fields': list(result_hidden_fields(cl)), + 'result_headers': headers, + 'num_sorted_fields': num_sorted_fields, + 'results': list(results(cl))} + + +@register.tag(name='result_list') +def result_list_tag(parser, token): + return InclusionAdminNode( + parser, token, + func=result_list, + template_name='change_list_results.html', + takes_context=False, + ) + + +def date_hierarchy(cl): + """ + Display the date hierarchy for date drill-down functionality. + """ + if cl.date_hierarchy: + field_name = cl.date_hierarchy + year_field = '%s__year' % field_name + month_field = '%s__month' % field_name + day_field = '%s__day' % field_name + field_generic = '%s__' % field_name + year_lookup = cl.params.get(year_field) + month_lookup = cl.params.get(month_field) + day_lookup = cl.params.get(day_field) + + def link(filters): + return cl.get_query_string(filters, [field_generic]) + + if not (year_lookup or month_lookup or day_lookup): + # select appropriate start level + date_range = cl.queryset.aggregate(first=models.Min(field_name), + last=models.Max(field_name)) + if date_range['first'] and date_range['last']: + if date_range['first'].year == date_range['last'].year: + year_lookup = date_range['first'].year + if date_range['first'].month == date_range['last'].month: + month_lookup = date_range['first'].month + + if year_lookup and month_lookup and day_lookup: + day = datetime.date(int(year_lookup), int(month_lookup), int(day_lookup)) + return { + 'show': True, + 'back': { + 'link': link({year_field: year_lookup, month_field: month_lookup}), + 'title': capfirst(formats.date_format(day, 'YEAR_MONTH_FORMAT')) + }, + 'choices': [{'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))}] + } + elif year_lookup and month_lookup: + days = getattr(cl.queryset, 'dates')(field_name, 'day') + return { + 'show': True, + 'back': { + 'link': link({year_field: year_lookup}), + 'title': str(year_lookup) + }, + 'choices': [{ + 'link': link({year_field: year_lookup, month_field: month_lookup, day_field: day.day}), + 'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT')) + } for day in days] + } + elif year_lookup: + months = getattr(cl.queryset, 'dates')(field_name, 'month') + return { + 'show': True, + 'back': { + 'link': link({}), + 'title': _('All dates') + }, + 'choices': [{ + 'link': link({year_field: year_lookup, month_field: month.month}), + 'title': capfirst(formats.date_format(month, 'YEAR_MONTH_FORMAT')) + } for month in months] + } + else: + years = getattr(cl.queryset, 'dates')(field_name, 'year') + return { + 'show': True, + 'choices': [{ + 'link': link({year_field: str(year.year)}), + 'title': str(year.year), + } for year in years] + } + + +@register.tag(name='date_hierarchy') +def date_hierarchy_tag(parser, token): + return InclusionAdminNode( + parser, token, + func=date_hierarchy, + template_name='date_hierarchy.html', + takes_context=False, + ) + + +def search_form(cl): + """ + Display a search form for searching the list. + """ + return { + 'cl': cl, + 'show_result_count': cl.result_count != cl.full_result_count, + 'search_var': SEARCH_VAR + } + + +@register.tag(name='search_form') +def search_form_tag(parser, token): + return InclusionAdminNode(parser, token, func=search_form, template_name='search_form.html', takes_context=False) + + +@register.simple_tag +def admin_list_filter(cl, spec): + tpl = get_template(spec.template) + return tpl.render({ + 'title': spec.title, + 'choices': list(spec.choices(cl)), + 'spec': spec, + }) + + +def admin_actions(context): + """ + Track the number of times the action field has been rendered on the page, + so we know which value to use. + """ + context['action_index'] = context.get('action_index', -1) + 1 + return context + + +@register.tag(name='admin_actions') +def admin_actions_tag(parser, token): + return InclusionAdminNode(parser, token, func=admin_actions, template_name='actions.html') + + +@register.tag(name='change_list_object_tools') +def change_list_object_tools_tag(parser, token): + """Display the row of change list object tools.""" + return InclusionAdminNode( + parser, token, + func=lambda context: context, + template_name='change_list_object_tools.html', + ) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_modify.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_modify.py new file mode 100644 index 0000000..60bc560 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_modify.py @@ -0,0 +1,111 @@ +import json + +from django import template +from django.template.context import Context + +from .base import InclusionAdminNode + +register = template.Library() + + +def prepopulated_fields_js(context): + """ + Create a list of prepopulated_fields that should render Javascript for + the prepopulated fields for both the admin form and inlines. + """ + prepopulated_fields = [] + if 'adminform' in context: + prepopulated_fields.extend(context['adminform'].prepopulated_fields) + if 'inline_admin_formsets' in context: + for inline_admin_formset in context['inline_admin_formsets']: + for inline_admin_form in inline_admin_formset: + if inline_admin_form.original is None: + prepopulated_fields.extend(inline_admin_form.prepopulated_fields) + + prepopulated_fields_json = [] + for field in prepopulated_fields: + prepopulated_fields_json.append({ + "id": "#%s" % field["field"].auto_id, + "name": field["field"].name, + "dependency_ids": ["#%s" % dependency.auto_id for dependency in field["dependencies"]], + "dependency_list": [dependency.name for dependency in field["dependencies"]], + "maxLength": field["field"].field.max_length or 50, + "allowUnicode": getattr(field["field"].field, "allow_unicode", False) + }) + + context.update({ + 'prepopulated_fields': prepopulated_fields, + 'prepopulated_fields_json': json.dumps(prepopulated_fields_json), + }) + return context + + +@register.tag(name='prepopulated_fields_js') +def prepopulated_fields_js_tag(parser, token): + return InclusionAdminNode(parser, token, func=prepopulated_fields_js, template_name="prepopulated_fields_js.html") + + +def submit_row(context): + """ + Display the row of buttons for delete and save. + """ + add = context['add'] + change = context['change'] + is_popup = context['is_popup'] + save_as = context['save_as'] + show_save = context.get('show_save', True) + show_save_and_continue = context.get('show_save_and_continue', True) + has_add_permission = context['has_add_permission'] + has_change_permission = context['has_change_permission'] + has_view_permission = context['has_view_permission'] + has_editable_inline_admin_formsets = context['has_editable_inline_admin_formsets'] + can_save = (has_change_permission and change) or (has_add_permission and add) or has_editable_inline_admin_formsets + can_save_and_continue = not is_popup and can_save and has_view_permission and show_save_and_continue + can_change = has_change_permission or has_editable_inline_admin_formsets + ctx = Context(context) + ctx.update({ + 'can_change': can_change, + 'show_delete_link': ( + not is_popup and context['has_delete_permission'] and + change and context.get('show_delete', True) + ), + 'show_save_as_new': not is_popup and has_change_permission and change and save_as, + 'show_save_and_add_another': ( + has_add_permission and not is_popup and + (not save_as or add) and can_save + ), + 'show_save_and_continue': can_save_and_continue, + 'show_save': show_save and can_save, + 'show_close': not(show_save and can_save) + }) + return ctx + + +@register.tag(name='submit_row') +def submit_row_tag(parser, token): + return InclusionAdminNode(parser, token, func=submit_row, template_name='submit_line.html') + + +@register.tag(name='change_form_object_tools') +def change_form_object_tools_tag(parser, token): + """Display the row of change form object tools.""" + return InclusionAdminNode( + parser, token, + func=lambda context: context, + template_name='change_form_object_tools.html', + ) + + +@register.filter +def cell_count(inline_admin_form): + """Return the number of cells used in a tabular inline.""" + count = 1 # Hidden cell with hidden 'id' field + for fieldset in inline_admin_form: + # Loop through all the fields (one per cell) + for line in fieldset: + for field in line: + count += 1 + if inline_admin_form.formset.can_delete: + # Delete checkbox + count += 1 + return count diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_static.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_static.py new file mode 100644 index 0000000..6b1738d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_static.py @@ -0,0 +1,16 @@ +import warnings + +from django.template import Library +from django.templatetags.static import static as _static +from django.utils.deprecation import RemovedInDjango30Warning + +register = Library() + + +@register.simple_tag +def static(path): + warnings.warn( + '{% load admin_static %} is deprecated in favor of {% load static %}.', + RemovedInDjango30Warning, + ) + return _static(path) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_urls.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_urls.py new file mode 100644 index 0000000..f817c25 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/admin_urls.py @@ -0,0 +1,56 @@ +from urllib.parse import parse_qsl, unquote, urlparse, urlunparse + +from django import template +from django.contrib.admin.utils import quote +from django.urls import Resolver404, get_script_prefix, resolve +from django.utils.http import urlencode + +register = template.Library() + + +@register.filter +def admin_urlname(value, arg): + return 'admin:%s_%s_%s' % (value.app_label, value.model_name, arg) + + +@register.filter +def admin_urlquote(value): + return quote(value) + + +@register.simple_tag(takes_context=True) +def add_preserved_filters(context, url, popup=False, to_field=None): + opts = context.get('opts') + preserved_filters = context.get('preserved_filters') + + parsed_url = list(urlparse(url)) + parsed_qs = dict(parse_qsl(parsed_url[4])) + merged_qs = {} + + if opts and preserved_filters: + preserved_filters = dict(parse_qsl(preserved_filters)) + + match_url = '/%s' % unquote(url).partition(get_script_prefix())[2] + try: + match = resolve(match_url) + except Resolver404: + pass + else: + current_url = '%s:%s' % (match.app_name, match.url_name) + changelist_url = 'admin:%s_%s_changelist' % (opts.app_label, opts.model_name) + if changelist_url == current_url and '_changelist_filters' in preserved_filters: + preserved_filters = dict(parse_qsl(preserved_filters['_changelist_filters'])) + + merged_qs.update(preserved_filters) + + if popup: + from django.contrib.admin.options import IS_POPUP_VAR + merged_qs[IS_POPUP_VAR] = 1 + if to_field: + from django.contrib.admin.options import TO_FIELD_VAR + merged_qs[TO_FIELD_VAR] = to_field + + merged_qs.update(parsed_qs) + + parsed_url[4] = urlencode(merged_qs) + return urlunparse(parsed_url) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/base.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/base.py new file mode 100644 index 0000000..ec6f103 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/base.py @@ -0,0 +1,33 @@ +from inspect import getfullargspec + +from django.template.library import InclusionNode, parse_bits + + +class InclusionAdminNode(InclusionNode): + """ + Template tag that allows its template to be overridden per model, per app, + or globally. + """ + + def __init__(self, parser, token, func, template_name, takes_context=True): + self.template_name = template_name + params, varargs, varkw, defaults, kwonly, kwonly_defaults, _ = getfullargspec(func) + bits = token.split_contents() + args, kwargs = parse_bits( + parser, bits[1:], params, varargs, varkw, defaults, kwonly, + kwonly_defaults, takes_context, bits[0], + ) + super().__init__(func, takes_context, args, kwargs, filename=None) + + def render(self, context): + opts = context['opts'] + app_label = opts.app_label.lower() + object_name = opts.object_name.lower() + # Load template for this render call. (Setting self.filename isn't + # thread-safe.) + context.render_context[self] = context.template.engine.select_template([ + 'admin/%s/%s/%s' % (app_label, object_name, self.template_name), + 'admin/%s/%s' % (app_label, self.template_name), + 'admin/%s' % (self.template_name,), + ]) + return super().render(context) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/log.py b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/log.py new file mode 100644 index 0000000..08c2345 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/templatetags/log.py @@ -0,0 +1,59 @@ +from django import template +from django.contrib.admin.models import LogEntry + +register = template.Library() + + +class AdminLogNode(template.Node): + def __init__(self, limit, varname, user): + self.limit, self.varname, self.user = limit, varname, user + + def __repr__(self): + return "" + + def render(self, context): + if self.user is None: + entries = LogEntry.objects.all() + else: + user_id = self.user + if not user_id.isdigit(): + user_id = context[self.user].pk + entries = LogEntry.objects.filter(user__pk=user_id) + context[self.varname] = entries.select_related('content_type', 'user')[:int(self.limit)] + return '' + + +@register.tag +def get_admin_log(parser, token): + """ + Populate a template variable with the admin log for the given criteria. + + Usage:: + + {% get_admin_log [limit] as [varname] for_user [context_var_containing_user_obj] %} + + Examples:: + + {% get_admin_log 10 as admin_log for_user 23 %} + {% get_admin_log 10 as admin_log for_user user %} + {% get_admin_log 10 as admin_log %} + + Note that ``context_var_containing_user_obj`` can be a hard-coded integer + (user ID) or the name of a template context variable containing the user + object whose ID you want. + """ + tokens = token.contents.split() + if len(tokens) < 4: + raise template.TemplateSyntaxError( + "'get_admin_log' statements require two arguments") + if not tokens[1].isdigit(): + raise template.TemplateSyntaxError( + "First argument to 'get_admin_log' must be an integer") + if tokens[2] != 'as': + raise template.TemplateSyntaxError( + "Second argument to 'get_admin_log' must be 'as'") + if len(tokens) > 4: + if tokens[4] != 'for_user': + raise template.TemplateSyntaxError( + "Fourth argument to 'get_admin_log' must be 'for_user'") + return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(tokens[5] if len(tokens) > 5 else None)) diff --git a/env/lib/python3.5/site-packages/django/contrib/admin/tests.py b/env/lib/python3.5/site-packages/django/contrib/admin/tests.py new file mode 100644 index 0000000..f623e66 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/admin/tests.py @@ -0,0 +1,184 @@ +from django.contrib.staticfiles.testing import StaticLiveServerTestCase +from django.test import modify_settings +from django.test.selenium import SeleniumTestCase +from django.utils.deprecation import MiddlewareMixin +from django.utils.translation import gettext as _ + + +class CSPMiddleware(MiddlewareMixin): + """The admin's JavaScript should be compatible with CSP.""" + def process_response(self, request, response): + response['Content-Security-Policy'] = "default-src 'self'" + return response + + +@modify_settings(MIDDLEWARE={'append': 'django.contrib.admin.tests.CSPMiddleware'}) +class AdminSeleniumTestCase(SeleniumTestCase, StaticLiveServerTestCase): + + available_apps = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + ] + + def wait_until(self, callback, timeout=10): + """ + Block the execution of the tests until the specified callback returns a + value that is not falsy. This method can be called, for example, after + clicking a link or submitting a form. See the other public methods that + call this function for more details. + """ + from selenium.webdriver.support.wait import WebDriverWait + WebDriverWait(self.selenium, timeout).until(callback) + + def wait_for_popup(self, num_windows=2, timeout=10): + """ + Block until `num_windows` are present (usually 2, but can be + overridden in the case of pop-ups opening other pop-ups). + """ + self.wait_until(lambda d: len(d.window_handles) == num_windows, timeout) + + def wait_for(self, css_selector, timeout=10): + """ + Block until a CSS selector is found on the page. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + self.wait_until( + ec.presence_of_element_located((By.CSS_SELECTOR, css_selector)), + timeout + ) + + def wait_for_text(self, css_selector, text, timeout=10): + """ + Block until the text is found in the CSS selector. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + self.wait_until( + ec.text_to_be_present_in_element( + (By.CSS_SELECTOR, css_selector), text), + timeout + ) + + def wait_for_value(self, css_selector, text, timeout=10): + """ + Block until the value is found in the CSS selector. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + self.wait_until( + ec.text_to_be_present_in_element_value( + (By.CSS_SELECTOR, css_selector), text), + timeout + ) + + def wait_until_visible(self, css_selector, timeout=10): + """ + Block until the element described by the CSS selector is visible. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + self.wait_until( + ec.visibility_of_element_located((By.CSS_SELECTOR, css_selector)), + timeout + ) + + def wait_until_invisible(self, css_selector, timeout=10): + """ + Block until the element described by the CSS selector is invisible. + """ + from selenium.webdriver.common.by import By + from selenium.webdriver.support import expected_conditions as ec + self.wait_until( + ec.invisibility_of_element_located((By.CSS_SELECTOR, css_selector)), + timeout + ) + + def wait_page_loaded(self): + """ + Block until page has started to load. + """ + from selenium.common.exceptions import TimeoutException + try: + # Wait for the next page to be loaded + self.wait_for('body') + except TimeoutException: + # IE7 occasionally returns an error "Internet Explorer cannot + # display the webpage" and doesn't load the next page. We just + # ignore it. + pass + + def admin_login(self, username, password, login_url='/admin/'): + """ + Log in to the admin. + """ + self.selenium.get('%s%s' % (self.live_server_url, login_url)) + username_input = self.selenium.find_element_by_name('username') + username_input.send_keys(username) + password_input = self.selenium.find_element_by_name('password') + password_input.send_keys(password) + login_text = _('Log in') + self.selenium.find_element_by_xpath( + '//input[@value="%s"]' % login_text).click() + self.wait_page_loaded() + + def get_css_value(self, selector, attribute): + """ + Return the value for the CSS attribute of a DOM element specified by + the given selector. Uses the jQuery that ships with Django. + """ + return self.selenium.execute_script( + 'return django.jQuery("%s").css("%s")' % (selector, attribute)) + + def get_select_option(self, selector, value): + """ + Return the

  • , 2011 +# Jannis Leidel , 2011 +# Meir Kriheli , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "האנשה" + +msgid "th" +msgstr "רביעי" + +msgid "st" +msgstr "ראשון" + +msgid "nd" +msgstr "שני" + +msgid "rd" +msgstr "שלישי" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f מיליון" +msgstr[1] "%(value).1f מיליונים" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s מיליון" +msgstr[1] "%(value)s מיליון" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f מיליארד" +msgstr[1] "%(value).1f מיליארדים" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s מיליארד" +msgstr[1] "%(value)s מיליארד" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f טריליון" +msgstr[1] "%(value).1f טריליונים" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s טריליון" +msgstr[1] "%(value)s טריליון" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f קוודריליון" +msgstr[1] "%(value).1f קוודריליון" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s קוודריליון" +msgstr[1] "%(value)s קוודריליון" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f קווינטיליון" +msgstr[1] "%(value).1f קווינטיליון" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s קווינטיליון" +msgstr[1] "%(value)s קווינטיליון" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f סקסטיליון" +msgstr[1] "%(value).1f סקסטיליון" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s סקסטיליון" +msgstr[1] "%(value)s סקסטיליון" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f ספטיליון" +msgstr[1] "%(value).1f ספטיליון" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s ספטיליון" +msgstr[1] "%(value)s ספטיליון" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f אוקטיליון" +msgstr[1] "%(value).1f אוקטיליון" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s אוקטיליון" +msgstr[1] "%(value)s אוקטיליון" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f נוניליון" +msgstr[1] "%(value).1f נוניליון" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s נוניליון" +msgstr[1] "%(value)s נוניליון" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f דציליון" +msgstr[1] "%(value).1f דציליון" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s דציליון" +msgstr[1] "%(value)s דציליון" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f גוגול" +msgstr[1] "%(value).1f גוגול" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s גוגול" +msgstr[1] "%(value)s גוגול" + +msgid "one" +msgstr "אחד" + +msgid "two" +msgstr "שניים" + +msgid "three" +msgstr "שלושה" + +msgid "four" +msgstr "ארבעה" + +msgid "five" +msgstr "חמישה" + +msgid "six" +msgstr "שישה" + +msgid "seven" +msgstr "שבעה" + +msgid "eight" +msgstr "שמונה" + +msgid "nine" +msgstr "תשעה" + +msgid "today" +msgstr "היום" + +msgid "tomorrow" +msgstr "מחר" + +msgid "yesterday" +msgstr "אתמול" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "לפני %(delta)s" + +msgid "now" +msgstr "עכשיו" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "לפני שניה" +msgstr[1] "לפני %(count)s שניות" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "לפני דקה" +msgstr[1] "לפני %(count)s דקות" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "לפני שעה" +msgstr[1] "לפני %(count)s שעות" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "בעוד %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "בעוד שניה" +msgstr[1] "בעוד %(count)s שניות" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "בעוד דקה" +msgstr[1] "בעוד %(count)s דקות" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "בעוד שעה" +msgstr[1] "בעוד %(count)s שעות" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3217de2bd96f607af2392ac3a8f0772cd444c874 GIT binary patch literal 4131 zcmb7`Uu+ab9LGngsHgY`|DfWZL9A_Qws(tv3Ri2?TA)H>#i}tr;L@ABTfEyncJ_MZ zO-zIk6cZ5$Xo7}qEv6Mh#7IJFqVbIvV>IzWvk$%)qdpj;FGjz=y=iOj=6c&nXFoIF z`OR-<=J%Vu{g8wLeZA(?(s#pP& z7(b=>4QQah?20N)umk-a;9BqiNdBk6HQ={O|4ZqsmsiL8KzjcxipN0m^QGdiU@Q8o zu4D{TSucoJvp&Tw;O*!Sf_H;CkhZu_jUNE9C3Z;hZ8d%rB!9=1ep2bD6era9X~i?( zRj@w~lD`@7YVZs29h~hYuory`;sAIO>;``ZNneww>N~)#=$}^n6MO;v$FE`R8Spsx z68H<)32wfYv5lYv`@w1O0q_r{x2>q^7PuMuhl;<0&!XRb9nJ_rf+*vlZ6%8KBvUp8$cGTH|t<05`XwmxbLd901vJOwm5i0ki!o^&{k`=C8h{BA^DjY@Ze z-b*=q2P(yw_D_Y*g>s4VmkL5MS8hh@UR26O%DbCTsoaN(kVZL-l!$T@VAy7KZj^Jg z{i>^+okD=r`ttNz$*9o=Jle}K3 zkDKH=tv+Uw>oi@oByXhFM~ZB9swPa5HxTPWM3x#+6QDUs*txvVvi7K8S-0#l$MVab zRq*YiXlZTFh=Ol*NN(la1|wO|E#e?6%*imvb_Aog3wjwQ#i($Yw8xnAnV-j>Cj|4| zjI{^PqU(9E^(!vhBcv}pl7~EZml*MlfsFCI@FczvX`b0-IXO46U6fqUHwIyWs^sv$A3CoAA@ucO8G+&=GA2L#=VRm!VOsBd#Q)Vg!Lu0!bwaMqaUAK|i zXqX$h`EdHdRA&k$vCWdcG3;56ELgtlrTJ5q6KZ4bu`&c3BcG*tWeH3$? zT-nMAV^~7HM#wOP*$~1RMQCIe^@8Q*EZ@a_S^m4PKC$Zpz8U|Bg@Oc=Vi=Jn~ zU~*~06XE#&F!(GSe{~Tbv5by|;|If_`aD;&h{eV}UVQych9{%9PA={vmeJubI1&ay zjVE5SlXzBebT(Sp2VroLhry>|@LCugt??DtYJ6`PAV}Ec|5x`ql-kuD3FF%$=5YGa zLZ_5KwN964h&8-P8MR=sn#8QSjca|BPBfURIl)?0;;b9qho*x~(wyeUFwy5aO>R8W zFv)4!qJvFRo94$bX_nRGCXP+Bj3z(vY~ti`)mvQ47->unmt@vFd*@xov(;tvtQH3Q z!r*-tUD}y2z*pe}Iw!&aowK+Zv;Q4L1{dgiKE8i}j8Ddt+9D?6KFt6~k2e5}P2*Pp zt+x=P`C(jSxDOz_8wM8u{L;|0^O3$6tswgGm_!T9dk;W_&jGkA2UU-^)4inM7<|EI GI@o`8&IHu} literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 0000000..52551e6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chandan kumar , 2012 +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "वाँ" + +msgid "st" +msgstr "ला" + +msgid "nd" +msgstr "रा" + +msgid "rd" +msgstr "रा" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f मिलियन" +msgstr[1] "%(value).1f मिलियन" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s मिलियन" +msgstr[1] "%(value)s मिलियन" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f बिलियन" +msgstr[1] "%(value).1f बिलियन" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s बिलियन" +msgstr[1] "%(value)s बिलियन" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f खरब" +msgstr[1] "%(value).1f खरब" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s खरब" +msgstr[1] "%(value)s खरब" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f करोड़ शंख" +msgstr[1] "%(value).1f करोड़ शंख" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s करोड़ शंख" +msgstr[1] "%(value)s करोड़ शंख" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f कुइनतिलिअन " +msgstr[1] "%(value).1f कुइनतिलिअन " + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s कुइनतिलिअन " +msgstr[1] "%(value)s कुइनतिलिअन " + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f सेक्सतिलियन" +msgstr[1] "%(value).1f सेक्सतिलियन" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s सेक्सतिलियन" +msgstr[1] "%(value)s सेक्सतिलियन" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f सेपतिलियन " +msgstr[1] "%(value).1f सेपतिलियन " + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s सेपतिलियन " +msgstr[1] "%(value)s सेपतिलियन " + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f ओकतिलियन " +msgstr[1] "%(value).1f ओकतिलियन " + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s ओकतिलियन " +msgstr[1] "%(value)s ओकतिलियन " + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f नोनिलियन" +msgstr[1] "%(value).1f नोनिलियन" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s नोनिलियन" +msgstr[1] "%(value)s नोनिलियन" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f देसीलियन" +msgstr[1] "%(value).1f देसीलियन" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s देसीलियन" +msgstr[1] "%(value)s देसीलियन" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f गोगोल" +msgstr[1] "%(value).1f गोगोल" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s गोगोल" +msgstr[1] "%(value)s गोगोल" + +msgid "one" +msgstr "एक" + +msgid "two" +msgstr "दो" + +msgid "three" +msgstr "तीन" + +msgid "four" +msgstr "चार" + +msgid "five" +msgstr "पाँच" + +msgid "six" +msgstr "छह" + +msgid "seven" +msgstr "सात" + +msgid "eight" +msgstr "आठ" + +msgid "nine" +msgstr "नौ" + +msgid "today" +msgstr "आज" + +msgid "tomorrow" +msgstr "कल" + +msgid "yesterday" +msgstr "कल (बीता)" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s पहले" + +msgid "now" +msgstr "अभी" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s अब से" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..99793a893afa1f7a88c231cd3bc37244f24c2758 GIT binary patch literal 1274 zcmb7?%WG6I6vm_0*Z3Ah1(AqUTQr?}t5Ut~s8}B;7K@B7+{L+PW-`tsLz3HR!9PG3 zF5RmLF2t4pfscg?7ve$$QN)!i7cSlSWhQMwabe)(m+$0Da&m7zZy&nP(6%A=ARZ%j zA`Y)Whjs_t58jP@2CjyF2M&QBB0qthIQ+r-W>Jz$X(z%%lk6wf2e=0N`~*=(e@}pw5TV`;h>eK;T|t!DZ?G@5%@~E6!am_n;ai7VL)(hj6b6!a zlrB7R*)VK)q-F~3N8O7DgRJYPC3jRaI{(u%$PPTD8comYYK~al6qae}3oF}Rb!cdK zB&W8QqXVZ_nwT~{WMb8(%l zQ$}YzZ%N%SrK{96){7a}P`Nl$G@PiKjF)DwRK>I<>ERV;rKgOKC+RVfq#~W*X__Sy zhmtf&U=&wrPK7;}eG?)%A<`3kJk5^6hgP~QoflOrwQEanY{oB1t(D`KN#Txs3e`ZK zZujMw(sgqZYjmTK4H8w7os3UggLZ?YNBVZeO~}kx4!nR`hV1R4OSyaDazlvagb+{1i_( z+|Va0PQuzub;)6*{MX zo!rl4q~(kym!v7~e9>@pL_NGG{HyB_1*Q4txC&&y{)jk&}+O0>75!bCR_R H>}1(*#A!N` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 0000000..635ea6d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,291 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mislav Cimperšak , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:47+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "one" +msgstr "jedan" + +msgid "two" +msgstr "dva" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "četiri" + +msgid "five" +msgstr "pet" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedam" + +msgid "eight" +msgstr "osam" + +msgid "nine" +msgstr "devet" + +msgid "today" +msgstr "danas" + +msgid "tomorrow" +msgstr "sutra" + +msgid "yesterday" +msgstr "jučer" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "prije %(delta)s" + +msgid "now" +msgstr "sad" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "prije %(count)s sekunde" +msgstr[1] "prije %(count)s sekundi" +msgstr[2] "prije %(count)s sekundi" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "prije %(count)s minute" +msgstr[1] "prije %(count)s minute" +msgstr[2] "prije %(count)s minuta" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c9ef6a254d053efcf34dae1c5333c95f7c851d9 GIT binary patch literal 7146 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..32fb32f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,476 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-26 11:14+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f milionaj" +msgstr[2] "%(value).1f miliony" +msgstr[3] "%(value).1f milionow" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s milionaj" +msgstr[2] "%(value)s miliony" +msgstr[3] "%(value)s milionow" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliarda" +msgstr[1] "%(value).1f miliardźe" +msgstr[2] "%(value).1f miliardy" +msgstr[3] "%(value).1f miliardow" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliarda" +msgstr[1] "%(value)s miliardźe" +msgstr[2] "%(value)s miliardy" +msgstr[3] "%(value)s miliardow" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilion" +msgstr[1] "%(value).1f bilionaj" +msgstr[2] "%(value).1f biliony" +msgstr[3] "%(value).1f bilionow" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilion" +msgstr[1] "%(value)s bilionaj" +msgstr[2] "%(value)s biliony" +msgstr[3] "%(value)s bilionow" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biliarda" +msgstr[1] "%(value).1f biliardźe" +msgstr[2] "%(value).1f biliardy" +msgstr[3] "%(value).1f biliardow" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biliarda" +msgstr[1] "%(value)s biliardźe" +msgstr[2] "%(value)s biliardy" +msgstr[3] "%(value)s biliardow" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trilion" +msgstr[1] "%(value).1f trilionaj" +msgstr[2] "%(value).1f triliony" +msgstr[3] "%(value).1f trilionow" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s trilionaj" +msgstr[2] "%(value)s triliony" +msgstr[3] "%(value)s trilionow" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triliarda" +msgstr[1] "%(value).1f triliardźe" +msgstr[2] "%(value).1f triliardy" +msgstr[3] "%(value).1f triliardow" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triliarda" +msgstr[1] "%(value)s triliardźe" +msgstr[2] "%(value)s triliardy" +msgstr[3] "%(value)s triliardow" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kwadrilion" +msgstr[1] "%(value).1f kwadrilionaj" +msgstr[2] "%(value).1f kwadriliony" +msgstr[3] "%(value).1f kwadrilionow" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kwadrilion" +msgstr[1] "%(value)s kwadrilionaj" +msgstr[2] "%(value)s kwadriliony" +msgstr[3] "%(value)s kwadrilionow" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kwadriliarda" +msgstr[1] "%(value).1f kwadriliardźe" +msgstr[2] "%(value).1f kwadriliardy" +msgstr[3] "%(value).1f kwadriliardow" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kwadriliarda" +msgstr[1] "%(value)s kwadriliardźe" +msgstr[2] "%(value)s kwadriliardy" +msgstr[3] "%(value)s kwadriliardow" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kwintilion" +msgstr[1] "%(value).1f kwintilionaj" +msgstr[2] "%(value).1f kwintiliony" +msgstr[3] "%(value).1f kwintilionow" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kwintilion" +msgstr[1] "%(value)s kwintilionaj" +msgstr[2] "%(value)s kwintiliony" +msgstr[3] "%(value)s kwintilionow" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kwintiliarda" +msgstr[1] "%(value).1f kwintiliardźe" +msgstr[2] "%(value).1f kwintiliardy" +msgstr[3] "%(value).1f kwintiliardow" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kwintiliarda" +msgstr[1] "%(value)s kwintiliardźe" +msgstr[2] "%(value)s kwintiliardy" +msgstr[3] "%(value)s kwintiliardow" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f sedeciliarda" +msgstr[1] "%(value).1f sedeciliardźe" +msgstr[2] "%(value).1f sedeciliardy" +msgstr[3] "%(value).1f sedeciliardow" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s sedeciliarda" +msgstr[1] "%(value)s sedeciliardźe" +msgstr[2] "%(value)s sedeciliardy" +msgstr[3] "%(value)s sedeciliardow" + +msgid "one" +msgstr "jedyn" + +msgid "two" +msgstr "dwaj" + +msgid "three" +msgstr "tři" + +msgid "four" +msgstr "štyri" + +msgid "five" +msgstr "pjeć" + +msgid "six" +msgstr "šěsć" + +msgid "seven" +msgstr "sydom" + +msgid "eight" +msgstr "wosom" + +msgid "nine" +msgstr "dźewjeć" + +msgid "today" +msgstr "dźensa" + +msgid "tomorrow" +msgstr "jutře" + +msgid "yesterday" +msgstr "wčera" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "Před %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d lětom" +msgstr[1] "%d lětomaj" +msgstr[2] "%d lětami" +msgstr[3] "%d lětami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d měsacom" +msgstr[1] "%d měsacomaj" +msgstr[2] "%d měsacami" +msgstr[3] "%d měsacami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tydźenjom" +msgstr[1] "%d tydźenjomaj" +msgstr[2] "%d tydźenjemi" +msgstr[3] "%d tydźenjemi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dnjom" +msgstr[1] "%d dnjomaj" +msgstr[2] "%d dnjemi" +msgstr[3] "%d dnjemi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hodźinu" +msgstr[1] "%d hodźinomaj" +msgstr[2] "%d hodźinami" +msgstr[3] "%d hodźinami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d mjeńšinu" +msgstr[1] "%d mjeńšinomaj" +msgstr[2] "%d mjeńšinami" +msgstr[3] "%d mjeńšinami" + +msgid "now" +msgstr "nětko" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "před %(count)s sekundu" +msgstr[1] "před %(count)s sekundomaj" +msgstr[2] "před %(count)s sekundami" +msgstr[3] "před %(count)s sekundami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "před %(count)s mjeńšinu" +msgstr[1] "před %(count)s mjeńšinomaj" +msgstr[2] "před %(count)s mjeńšinami" +msgstr[3] "před %(count)s mjeńšinami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "před %(count)s hodźinu" +msgstr[1] "před %(count)s hodźinomaj" +msgstr[2] "před %(count)s hodźinami" +msgstr[3] "před %(count)s hodźinami" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s wotnětka" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d lěto" +msgstr[1] "%d lěće" +msgstr[2] "%d lěta" +msgstr[3] "%d lět" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d měsac" +msgstr[1] "%d měsacaj" +msgstr[2] "%d měsacy" +msgstr[3] "%d měsacow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tydźeń" +msgstr[1] "%d njedźeli" +msgstr[2] "%d njedźele" +msgstr[3] "%d njedźel" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d źeń" +msgstr[1] "%d dnjej" +msgstr[2] "%d dny" +msgstr[3] "%d dnjow" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hodźina" +msgstr[1] "%d hodźinje" +msgstr[2] "%d hodźiny" +msgstr[3] "%d hodźin" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d mjeńšina" +msgstr[1] "%d mjeńšinje" +msgstr[2] "%d mjeńšiny" +msgstr[3] "%d mjeńšin" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "za %(count)s sekundu" +msgstr[1] "za %(count)s sekundźe" +msgstr[2] "za %(count)s sekundy" +msgstr[3] "za %(count)s sekundow" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "za %(count)s mjeńšinu" +msgstr[1] "za %(count)s mjeńšinje" +msgstr[2] "za %(count)s mjeńšiny" +msgstr[3] "za %(count)s mjeńšin" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "za %(count)s hodźinu" +msgstr[1] "za %(count)s hodźinje" +msgstr[2] "za %(count)s hodźiny" +msgstr[3] "za %(count)s hodźin" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3348d8febe46a6762cf01d6b0235228d34917ff9 GIT binary patch literal 5348 zcma)H`Ma7vIF$)%r3agzwDhV2+7$D&R5@Jj+hIo0vfrJbiMC*x=6j_=EEOB|=;Y{s3MF{sArn=PeLo1-KmS2X}y^ zKh63P=I7uL^mELW3x%*??_|CJW?-KL?*e}Wmw^i|72*zX5F~v9BwaHPfE52U^G}e* zS$bK_%^=OI3ZhHA2GTeOL5kmC`!BW^_X#1PZvdBrMG#9BFN3rduQJ~NXm$r3z}unk1?jmrLGt^E`+s76;T3Uz2BdfogBODn%t`Pn*iSM`;0>_r zY`?^Oi+P;+0rL~)*UVp-e}lBn1xPZ*y8 z+%@3WU<6j;G`Ir%2c+lj#vs(c4Ya^#LFzvaQvX-nKkwRj zzlK4|!z4(4vmiZx1f;xt0n&b-9XS#FE5O=1CC$#96k#0m<(-*8c@5pI0psVlj9RNb_08 z_6`s(!UgdviRVB%C(nZv|3&62%>B&QnFpAMm`9jLna7#$FyCdK1S!skY@Y%t{uvOT z3h^o1pE18=ehcDwLxf5EVKjD^Y2!^xje#j1iriRcJ3k zrFWb5hstfJIQCJYGlHWU<@9op-l5A-2T;dR*P>FnGe-J1pSI!#oe?^Jx1ds<@tKLv zs|4x&7(-o;O6BGl0$U%Q%^S(?A1EqU+nG?>CBMa*3jB)n{254f+pVe0U~Wq8a$MK( zz5msUs$lRmt0mtr`EJ{g2B~5g&!l<2XYe$uenA_2&FWJ%yBHX}d+Uy88vUu7Sr1j! zw2T&er9H|im9?01 z>Pk%EdEwc*7TB(KD$1Iwp{?fk7iH0&6EVUb9yBbuM8o&+iT9AacsG0b`JOIEZq(=% zaYm_Waw7KfnNxN&D`LA()eiOfR+jYlURUCA{#B)3=UG$Y(|bjUN5^^`PYL=(@j*W* zI-c#y?EJmYVD}O;2Q$=7Gq+OahEYe_-G*U$#ng>@gQmHv-FbDpd2hQp+HQ`un`>e- zRCVQv(3usw94IBUPe)Aq6+Z~DAU)%YITdOZkUSCiyH!D34;8H)DhTm=nU}@gwpa4| zwyUZiXlrX&a*EdaS}C+9{k-g(cy!X*5GY&2*V<@nm6yZW+?bVJZRJK~E|*`mW<_>5 zn}wsbUDX{Lv(0bR8p+A*XnxhmiY!XsBRDSBWMF%tYimEq%Llz;&^R1QOh|>+V|$dR zryVHnoC9aCRI^LUnpAcrFSpdZk{vjBYX{0&SMx(dGcz-Tng(;G)a+ovuMEY@N#ODT zL*?2~rf=&*TQ@Zqo*T^eZNOndKx=ZYij`@6?1rkY?RaZtp^SsB^!VeGo2{{?AH|wd zfwjpi_&6q|yd2x*=yalaS+4a>xb)&%oBf~?=A~DS%y4{ot&E%F1D?ENT;?)s`-E&> za?~E>p4q20?iWOZBUH)b@{)uX|PsS)t*OPed&b@RVq%|wF0S5U(RGDO! zuN~3yjAGN#oa?a188BRVI?G^4iq^-_~PZQUlCp;_aAhvK=Oy+&Y1- zoVG@3b!^6NRSjuN!?e#mo@48?iL$A(O9hUc!Y80{cn>~rLY3xZRRslw*M=`7Y$rW3 zecN066P3I$R_GTyM`=~ty^?2}5u3hAA3f1Hf$!~Z`pzVg6NP(mPfNZ;Egq@r&G~LY zG~Uy~YaA;@7aY&7(v^aN;V^oU0!5@Hke#sHIKiH+tz-BU;vUq9**I2@hKK?8s*V4e zMIpEqO&b3rjNE8R+@>f670E5lI1)eFVI0#s_NU<7MErUza%, 2012 +# Jannis Leidel , 2011 +# János R (Hangya), 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-31 07:43+0000\n" +"Last-Translator: András Veres-Szentkirályi\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Emberi formázás" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value)1f millió" +msgstr[1] "%(value)1f millió" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s millió" +msgstr[1] "%(value)s millió" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value)1f milliárd" +msgstr[1] "%(value)1f milliárd" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] " %(value)s milliárd" +msgstr[1] " %(value)s milliárd" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value)1f trilliárd" +msgstr[1] "%(value)1f trilliárd" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billió" +msgstr[1] "%(value)s billió" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billiárd" +msgstr[1] "%(value).1f billiárd" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billiárd" +msgstr[1] "%(value)s billiárd" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trillió" +msgstr[1] "%(value).1f trillió" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillió" +msgstr[1] "%(value)s trillió" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trilliárd" +msgstr[1] "%(value).1f trilliárd" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilliárd" +msgstr[1] "%(value)s trilliárd" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvadrillió" +msgstr[1] "%(value).1f kvadrillió" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadrillió" +msgstr[1] "%(value)s kvadrillió" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvadrilliárd" +msgstr[1] "%(value).1f kvadrilliárd" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadrilliárd" +msgstr[1] "%(value)s kvadrilliárd" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintillió" +msgstr[1] "%(value).1f kvintillió" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintillió" +msgstr[1] "%(value)s kvintillió" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintilliárd" +msgstr[1] "%(value).1f kvintilliárd" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintilliárd" +msgstr[1] "%(value)s kvintilliárd" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "egy" + +msgid "two" +msgstr "kettő" + +msgid "three" +msgstr "három" + +msgid "four" +msgstr "négy" + +msgid "five" +msgstr "öt" + +msgid "six" +msgstr "hat" + +msgid "seven" +msgstr "hét" + +msgid "eight" +msgstr "nyolc" + +msgid "nine" +msgstr "kilenc" + +msgid "today" +msgstr "ma" + +msgid "tomorrow" +msgstr "holnap" + +msgid "yesterday" +msgstr "tegnap" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr " %(delta)s ezelőtt" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d évvel" +msgstr[1] "%d évvel" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d hónappal" +msgstr[1] "%d hónappal" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d héttel" +msgstr[1] "%d héttel" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d nappal" +msgstr[1] "%d nappal" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d órával" +msgstr[1] "%d órával" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d perccel" +msgstr[1] "%d perccel" + +msgid "now" +msgstr "most" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "egy másodperce" +msgstr[1] "%(count)s másodperce" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "egy perce" +msgstr[1] "%(count)s perce" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "egy órája" +msgstr[1] "%(count)s órája" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s múlva" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d év" +msgstr[1] "%d év" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d hónap" +msgstr[1] "%d hónap" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hét" +msgstr[1] "%d hét" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d nap" +msgstr[1] "%d nap" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d óra" +msgstr[1] "%d óra" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d perc" +msgstr[1] "%d perc" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "egy másodperc múlva" +msgstr[1] "%(count)s másodperc múlva" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "egy perc múlva" +msgstr[1] "%(count)s perc múlva" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "egy óra múlva" +msgstr[1] "%(count)s óra múlva" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7bec2a722e90dd632a56a0a75bca53f598e8613 GIT binary patch literal 1058 zcmaKo&r4K69Kfg2tXEli3ks&2BD4FRRO-`>$`lMGk*)i*Z}#oT?#wc8)^%?d^(REf zklH8;w9qnWgTPA%4}r5#2Pp`G=upRkpzrKXdF#vj&S$mCZ zKe78E#^ZuUc|OljURD$m5fWT5BxDsypo&n!=9xeVUqFdQx&WVI3~3qB8k{Am6y)lv zL^YOZrmTBL$vKwOWHKUGnM$}6A&%y#h^05n%2H`Eoy0sM7b!1p1M%(8iId+y{75`UNk!#Fq-p7Q&B5O0bmnq(Cf zNs(%)LVSq|!4o{ic*Kf$6s7_5T(M=QxX8=1P$S|BjTy-@S_<)bRbqlufqM&Dm&0_r zTCJwEZOQX&A(fM*bbG14D7yM|p_cCRrYEPzch(P5zBeX?W&*~lm0>^47IeB?q+E>P zT!E^D>CBbv1R2`Nvv1{@BI6<_BQD|)4_)K>-<%;X)V!HuMbRRekgAk~Sd?34k{KAm z?Q5o2;FB2~^o@APtT%6%N64(0$L6`Yhs;axESd&_<34IRAGV{bW(k>9Q#Z>lwr19C s, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "րդ" + +msgid "st" +msgstr "սթ" + +msgid "nd" +msgstr "րդ" + +msgid "rd" +msgstr "րդ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "մեկ" + +msgid "two" +msgstr "երկու" + +msgid "three" +msgstr "երեք" + +msgid "four" +msgstr "չորս" + +msgid "five" +msgstr "հինգ" + +msgid "six" +msgstr "վեց" + +msgid "seven" +msgstr "յոթ" + +msgid "eight" +msgstr "ութ" + +msgid "nine" +msgstr "ինը" + +msgid "today" +msgstr "այսօր" + +msgid "tomorrow" +msgstr "վաղը" + +msgid "yesterday" +msgstr "երեկ" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "հիմա" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9e1f2508fcc4c58ac34be6fa8cdeeed45ddf7222 GIT binary patch literal 4167 zcmai$&x;&I6vs=A#*D^jqQ?9%sm%{F<8JTFtkG;H*&z98FpD8>a<5F+&U7+UHQQai zy9wwuCr=`Rg6u(1(3^jO0Rw`9A_P>(&6}X0h^Pm@Z@Q+Zf7EI-)t{;Fd-eMDdp%uq zZ|jD47>*{!Zj2A_W9$?-^#D#dW;ZZ)2s{c-f&x4UzGd~#tp20r#s?Xz!~TM08}u-L z+wya;hWRhxesIS_N&Go*0&@wHe#`2gSbhi6_5Zd!v@wbEy5$?-LD)Y69|pe$Db8Jx zuK$;vS7D_21(1U`!RNvEL8Qd)fVdU*mF2hK4$SX@d%$18`@t=n62Gk=m1?`?E|Bbd zL5jD}>Q$>xS=Oz6#&Q-!Xm$dmc;`TT*sC~wfSz0ir!fD$!q{PO;*q3oSHK$PZ-Ugr zk3q8k0FwWfN0Yi82g%+Ar@{9?TK6Sb1%Cq@;O@;y-R426=MqTudKV=77a;ln0UiSP zK9<vDfM=>DF;7#%3-@ZM;S%MI&6 z->IIv=nD=HV;{zIG|3zs->Ht18SM#t$73+;GxdV*k7~FLV*-Qf^fbnHjJ+7y<0(w2 zZ`AAk7=uDt5@cFM+;cu9;(-E}GD9!A`y6 zO~poX(b4z`wRNmaExNsysL@bPeHKIANBLGVdF=C>QB3hqxRp!zo$J8bi z@9H=#1|-dfvkvKsOti!+waB2;HEc0hmTVF0nGz-rMb89%x#3{dmpvnDNl>>X4WxXg z0wo!hLxZ8uBDpLTi-J`a8D_fpgiX|`KS~4-pRNVc?-J5D;Hl|@J@wN82Eapg^?{j(`dfvHJV=Y z2yZr9jU$tdW}^W|?~+^&DCXGjh}SskHIMSr^Ke9qBDd(Qond3b)h?NaNM6F@sjU zzOu41Z76cEC|7A!J-N3LdNxEo5cOJR{`~xzaTS`=jmjyFpbFXD7~nPy9`gF2Cjxbh zx4R;Yq?xma0)sPJiX41vyK8QQ-|o`(+}@ykGG(M~+r2 zc%~OCY`Gb|w8Cyvj>I#Td_u!ry|f@z^UmozC|kynxL!7;{L{^}up$Xm%4IC)llhPT zBbmTts1itEfY7u2>HmrpjnNQ5j_$<`-$C{38z{Hz>V zeeCDU$d_D)0vY5tNVnV^Z|*o6N%nzaM96ibGGGD$5)J7H3rK=E{QWXh*qZ&~&kl_FNm1QL7Sz|eV> b^(Dim7oyf(yn`k4CH`tKKh~@(!+`w@%!+0; literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 0000000..cc7aec5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2012,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanisar" + +msgid "th" +msgstr "e" + +msgid "st" +msgstr "me" + +msgid "nd" +msgstr "nde" + +msgid "rd" +msgstr "tie" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f milliones" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s milliones" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milliardo" +msgstr[1] "%(value).1f milliardos" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliardo" +msgstr[1] "%(value)s milliardos" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billion" +msgstr[1] "%(value).1f billiones" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billiones" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billiardo" +msgstr[1] "%(value).1f billiardos" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billiardo" +msgstr[1] "%(value)s billiardos" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trillion" +msgstr[1] "%(value).1f trilliones" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trillion" +msgstr[1] "%(value)s trilliones" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trilliardo" +msgstr[1] "%(value).1f trilliardos" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilliardo" +msgstr[1] "%(value)s trilliardos" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f quadrillion" +msgstr[1] "%(value).1f quadrilliones" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s quadrillion" +msgstr[1] "%(value)s quadrilliones" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f quadrilliardo" +msgstr[1] "%(value).1f quadrilliardos" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s quadrilliardo" +msgstr[1] "%(value)s quadrilliardos" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f quintillion" +msgstr[1] "%(value).1f quintilliones" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintillion" +msgstr[1] "%(value)s quintilliones" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f quintilliardo" +msgstr[1] "%(value).1f quintilliardos" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s quintilliardo" +msgstr[1] "%(value)s quintilliardos" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googoles" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoles" + +msgid "one" +msgstr "un" + +msgid "two" +msgstr "duo" + +msgid "three" +msgstr "tres" + +msgid "four" +msgstr "quatro" + +msgid "five" +msgstr "cinque" + +msgid "six" +msgstr "sex" + +msgid "seven" +msgstr "septe" + +msgid "eight" +msgstr "octo" + +msgid "nine" +msgstr "novem" + +msgid "today" +msgstr "hodie" + +msgid "tomorrow" +msgstr "deman" + +msgid "yesterday" +msgstr "heri" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s retro" + +msgid "now" +msgstr "ora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "un secunda retro" +msgstr[1] "%(count)s secundas retro" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "un minuta retro" +msgstr[1] "%(count)s minutas retro" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "un hora retro" +msgstr[1] "%(count)s horas retro" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "in %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "un secunda desde ora" +msgstr[1] "%(count)s secundas desde ora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "un minuta desde ora" +msgstr[1] "%(count)s minutas desde ora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "un hora desde ora" +msgstr[1] "%(count)s horas desde ora" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..18c23417d10241f9c8c14d7bb7ff0f55fe57913f GIT binary patch literal 4665 zcmb7`O^g&p6vs=x89)&MK@rQ3b$3~McV?H5WncmMibRPku4p2c+UeSv-s$Ncx~q2? zajzacNTOomS1^VX@#0CN@qn0^n3(86qZdD;;bOp;Xh=x(|GM7{^U(vbv$el|uU@^X zSMSwS|FCMo8G+{j+6J^;^Mp{~@dfyY=ck22tN?!oSAmzoUU1$bAqK!rU=MfnTO zKgawE9D@EDbMs;$EXc>1FM|D$KLj5De*t^JMN5RZ4;%zZKMs=KFy8`c{?C|KK=QL; zX~IJwt*Z*6OS}e>pR*v%f05-sSzeP7LPEbE+yvSnLKUY$+KMyGH$Ym~S&;l)0BK#n zfi&NWWr==-`80Sh^rt`?_a;bopK$-LtY5r5>F)<=zDL3N;5c&vycO~@%p!OvjigOW?O!F-VNnXiZ3)22=;Qk&ETPFI!S8fqv1Y8OEb1aV5 z^BqWaas^xs&c7{@*MVd=0Fr(e^9gV*t|96(Jg0wFg zbdr8Ob2CWu>|suTB`;<`+P^vG3n1;^X_j9H$B@jnf z{K34!{EPWF^D6Ti^IzsXYyyp6$Xvo)22xzNf;7)+=6aCg+Q|LAAk~irQam{jgxK@XjuP4Sx$!yx5h8yZ~1za8XnJK9z>q&t2d!v8G4KgfI-+>bWG z@?Pc+a2LPVK{-B97r@>8KEUh;H=|Kb=-kpXm>@p)TkuYGOJ|$*g`SOQREzZVprLf) zn!yo|_lok^hcpH%7Q=P2~DVFKlqVE@dx5Z_O zs*>U_P3QSuieqA{lGw-TCnQon`Hfam*P=+1Z zP1AJdFqCP!wiJf4L(!hSP&YY#|(y|rGZraXFk!_kbB~791qU=Z! zS*9pc64X#V5>=GvJg0@irg@Rke0U3fOh$&}Aiz$p3o-$FOT;o)< zH5K7qFX*wQt!g4c*u{d}l1c2oi%qhJWW~GL&Cd5sDK?{*ZZpnmT_z)9H=CMP@v4Ze zHdPgx8%0*{?;cm(;>J-mtZoof-KKj)b&Ixm98U|nQGC!3Y{yfs%q}=Jhuy1-If$XT zF6K7N+%VcmtJyF_&u*AeZ*X1Q(rUc5RovDpZf_MwTg4rT80s1AiO@MIOexS>7@tba z_!U105RjSmMNNlB2c#Yk{Apb<)?wQ^rh^doWnS9T$}9Srqq^z`#yS!f9oyO$6+>&n z&&$mC;}h2YKq~`V>wq#kFNd?aQ7gOE%59gqTz<=rf$VTL3q$Luo^i-$i`_OWH!6om z@*~-SES}6`C>LuYP+sUN;|F9 zQblb|XjRF}!=8;qg%0fdO2$<4LqoH(vxA1bI#c>24H`<~s>5XuLykSvpE+{)$ieG7 zkQ>Zq_M@t_hn3Z;2+`nIZ>Z`j$J;3jB~-jNV^2*SvPQ4l(OgqHunu|!AN5kq%h5^4 zG*+6Ij-45I=@-B{b~nNDpv zOmR*3N3Ch`@s;Z|g-CaKTYxDycS~@5Avdo8cW--Op-c&jlpR6U@6A?+$WMDfp`>ug z?1=WJmF<*Kskjy+lq|NM?;}~!o?~PUxs@)yV>^1<(_bHFL}8; zj=^`gswz*oPDKfgsx, 2016,2018 +# Jannis Leidel , 2011 +# rodin , 2011-2012 +# rodin , 2014 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-06-18 23:30+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "Menjadikan manusia" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f juta" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s juta" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milyar" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliar" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilyun" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triliun" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kuadriliun" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kuadriliun" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kuintiliun" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kuintiliun" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstiliun" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstiliun" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septiliun" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiliun" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktiliun" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktiliun" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f noniliun" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniliun" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f desiliun" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desiliun" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" + +msgid "one" +msgstr "satu" + +msgid "two" +msgstr "dua" + +msgid "three" +msgstr "tiga" + +msgid "four" +msgstr "empat" + +msgid "five" +msgstr "lima" + +msgid "six" +msgstr "enam" + +msgid "seven" +msgstr "tujuh" + +msgid "eight" +msgstr "delapan" + +msgid "nine" +msgstr "sembilan" + +msgid "today" +msgstr "hari ini" + +msgid "tomorrow" +msgstr "besok" + +msgid "yesterday" +msgstr "kemarin" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s lampau" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d tahun" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d bulan" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d minggu" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d hari" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d jam" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d menit" + +msgid "now" +msgstr "sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s detik yang lalu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s menit yang lalu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s jam yang lalu" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s dari sekarang" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d tahun" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d bulan" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d minggu" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d hari" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d jam" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d menit" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s detik dari sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s menit dari sekarang" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s jam dari sekarang" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fba64da89f8fb8d99dd31e965014a6bd1a0d0105 GIT binary patch literal 464 zcmYLE!A=4(6x8TxkDfi$!~+E1wj~mI(vO)*>gO7K3R-OZ<&Ms9NV3fhTa$Z{_NVb$Fx6w?M z)&-dOTxamK&OIbnkZAgvK;J1D&~^tj*j$V8-NYnJY+?TnRGD zEU7I*Cr`Hlfkh)k6F~WCMbhjeU(@* zsBNHSA+_m}bRnHrq4$;yp>yaa(*OVf literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po new file mode 100644 index 0000000..046e775 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/io/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/projects/p/django/language/" +"io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b22c4adccf739ad346d4e5e02d2608fd7058a827 GIT binary patch literal 3805 zcma)-O^g&p6vs`jk;28KgI1Dz8{+7|dGW-*ywKm=y zaRzkYE5l3RDE#Z-4)7n4*57&yW81-lAn6`R`WuGJAnpH~;i^^9IunM^gTokq6~vNk z2}CMv+3*X)Z$LWQw}#(?YvKQ3_zQRs{J)IPZjHv*8E!Ll4EGxzF?`O@2Puz5koJ4g z_~#8@1M$Z$;6~#Y!PVgV;1%@XW02}t$uTwwz6{d&z6Plde}EI<+S?f03myO|{wzrK z{uJB;{tA}B^=lZ*g9pGd@Dxb%KLDxjKY}~Kzd>4O%k9zpBOt}U1XACYKw9r-&;eJY zcrc${Bt0k`@G>RhOZl5FnrVSUBmYbKQ#Qv@Ur12Ankv} z_{$(38TPs1HIVB39Z30J2Pw~=K$N|Eq4eD|ld}Paq3(4j?(`eUM=slDNT9ROMKyUC zwhKo4_O1u<4@$;R-tM&?_Z{Yc!o9EuU{p)0Kh?T-J%oQY!?wUUjQVvy><$>(%SK>y zCOXeL*hUy#H^T0Q(eu0smb~tQvo#^$aq2!_R6D8%8y;!9jg}bAmuC41ztQjm`JY-% zR4tKq)e8bIXrz|3NKMOnHcbZ75@}b1s%O$DeyU~Hm6*4M50n?} z(N$~N|U@)D(~JqRva%D5$GHjZJ*Z6#!d0!L^rO8xF=nu zol59R)o^tXmU(3k1#gA?Y2RywHKhW{_v=V|tnTK0^(f{@ujP8esR*}O=7+1I;mVp{ z*Xzu9YqX$>cU&`(S5npJDq;qbvNu>#p9a% zq{OLzE@OBy2+tbzP92;-{NkSQn7KP;~$mc zv6g5)CE43Bn|wk~%~s$`mzZ%&MAOHXW literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po new file mode 100644 index 0000000..d9b14c0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,399 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# gudmundur , 2012 +# Hafsteinn Einarsson , 2012 +# Jannis Leidel , 2011 +# Matt R, 2018 +# Thordur Sigurdsson , 2016,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 03:49+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Humanize" +msgstr "" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milljón" +msgstr[1] "%(value).1f milljónir" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milljón" +msgstr[1] "%(value)s milljónir" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milljarður" +msgstr[1] "%(value).1f milljarðar" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milljarður" +msgstr[1] "%(value)s milljarðar" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billjarður" +msgstr[1] "%(value).1f billjónir" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billjón" +msgstr[1] "%(value)s billjónir" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f billjarður" +msgstr[1] "%(value).1f billjarðar" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s billjarður" +msgstr[1] "%(value)s billjarðar" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trilljón" +msgstr[1] "%(value).1f trilljónir" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilljón" +msgstr[1] "%(value)s trilljónir" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f trilljarður" +msgstr[1] "%(value).1f trilljarðar" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s trilljarður" +msgstr[1] "%(value)s trilljarðar" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvaðrilljón" +msgstr[1] "%(value).1f kvaðrilljónir" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvaðrilljón" +msgstr[1] "%(value)s kvaðrilljónir" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvaðrilljarður" +msgstr[1] "%(value).1f kvaðrilljarðar" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvaðrilljarður" +msgstr[1] "%(value)s kvaðrilljarðar" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintilljón" +msgstr[1] "%(value).1f kvintilljónir" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintilljón" +msgstr[1] "%(value)s kvintilljónir" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintilljarður" +msgstr[1] "%(value).1f kvintilljarðar" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintilljarður" +msgstr[1] "%(value)s kvintilljarðar" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "einn" + +msgid "two" +msgstr "tveir" + +msgid "three" +msgstr "þrír" + +msgid "four" +msgstr "fjórir" + +msgid "five" +msgstr "fimm" + +msgid "six" +msgstr "sex" + +msgid "seven" +msgstr "sjö" + +msgid "eight" +msgstr "átta" + +msgid "nine" +msgstr "níu" + +msgid "today" +msgstr "í dag" + +msgid "tomorrow" +msgstr "á morgun" + +msgid "yesterday" +msgstr "í gær" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "núna" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3644d331b333eed656cdb3fea5ec160be546bb30 GIT binary patch literal 5981 zcmcha&yN&E6vs=%MORToKt5{ z<%b+hJbBQQKjM#IqA{BI2bdTSpeK#dcrjjxN=ytFe_TwA2fweoX10G+kD3@Osr}S@ z_4-xSd#|Q@FRfkq5<{Cp--Nz<1!Dp{wi18PzPpC8)!_HwTJUFZGq|FUv8~`1Z~%M~ zB>gi+|Bm5T;4t)m8g5&~m;?Ek;qzb#@`vDk;1A$tu}uh|S#sehHSq%b)^R-xQzs97u6`8(aWC2cH5b)-d)k_zL(4_zidjy#3~QegP!? z=U^0H6yZt8qaeleJQ(ExY(f4JJPaPfX2!wy!3olXhrs*R#q&!b>AwIeuGg=R^S=?i z7xK8_)8PG(p9MF9?}BtsE`XG$OCU;{T?SWyS3oSqeghF2*0&*+*MT@P8w76$$BcZ? z%pV8Ie$mL!nfX^ivVYIW7eQM0YmnCc2Bf@Q0%`pp46hjeX84EU3KR|5^&74=+-P{O z;TFRYkm{id(mHz#r$E}rqaf{L+URGE{wRp@h#J)gHH3uW=Ov0C<(%R~jp|}cG-7N7 zr1L(Aj#Ng!9kkz_=sVCUhSVNFFGr&|KQyE|nM5BY0c}t8m$6;oZZq!SP7J0x0{D;_ zZ#ASE-iA(RqdKED6eFs)?HD7Z(cPvvP`eAAYKa=vDoQ!JqqySH9in?Ph)#7!wMmU? zE!nC`0b{C(3i=)B6o358FkA)3(H-W;o>eoY{4@Y=yi?o6i*4+O(E5g}gwSOA%RGl$Hc_Rgbn?!uQTdCJ;2gt);oV zHP!ZYDZKbrtc~w<*CuhLbB5hHf!)-U?`A#5+KxwK(|u}SuyUKD zoiXS>k?hz%uje8&8WgR#B;`pmA{N=4mLl2}F>Nz1Lfz|Ro%!N(bu4^VfQBUT`WdReS&#fp(_DhUYqa+l|nfRaM?U^Tez(8AzdF>r4qPt9+zf8FR`z zoXSpKsZ_V`+FBkdmtp7}l#3quOxf*pM$3GpQZ2&{t^aY9i!&PtKWqxEf-0XBK~wQ* zFHk<;Jvp{-Pm6{_o_+|nexofK(wUW_Rpke?XnMG^gL7KXSBHm}mX?MzdGhM=)KE>e zhU2qz&@_(^dwRIkKYd_&-}0#|L*@QSRFd?uo73|+mc}pL@O)Ev{y4AAp~|J6I6S-G z8C$lawdyi(_W3o18fjGd*l|yHw^`*7W}0;Co&73kg;nm)M`AcJGS1`S#Gudbnc$Vu zcz^PfMkEARaN)`@q;H<(4;;LLJQ287rI)irA#>Nm&qMT(S2VUfS7@8`k$Nuk{-m!l zi;A{F*DHG_yfZVp2KMZ!LWIH}J(7)Lf~kR02L3!{`X&Sb(epYoNPr=0(* z-Q+xEcF@xqvXPumjx&CHXUS$HXKuQNwWr@VDNM4xKud(u@c*IBIU5f|&ZJ5Lox zsNkv0Ww3v6rtU^}rPR54N4#M1mY0uK(lj|vt@aP^#By|#o|5B?*G$xNv#IE2W()6v zeHWRhGb{JpV`>+Lmc28QTE2G{@}~Csr*q~#vBS|f_Ze}9s))0;AAc7rUZ?kp`TmV{ z9_jGb8n=zev7V}JLtys, 2014 +# Carlo Miron , 2018 +# Federico Capoano , 2011 +# Jannis Leidel , 2011 +# Luca Manlio De Lisi , 2011 +# Marco Bonetti, 2014 +# Mirco Grillo , 2018 +# Nicola Larosa , 2011 +# palmux , 2015 +# Stefano Brentegani , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-30 21:09+0000\n" +"Last-Translator: Carlo Miron \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Umanizzazione " + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}esimo" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}esimo" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milione" +msgstr[1] "%(value).1f milioni" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milione" +msgstr[1] "%(value)s milioni" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliardo" +msgstr[1] "%(value).1f miliardi" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliardo" +msgstr[1] "%(value)s miliardi" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f migliaio di miliardi" +msgstr[1] "%(value).1f migliaia di miliardi" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s migliaio di miliardi" +msgstr[1] "%(value)s migliaia di miliardi" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f milione di miliardi" +msgstr[1] "%(value).1f milioni di miliardi" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s milione di miliardi" +msgstr[1] "%(value)s milioni di miliardi" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f miliardo di miliardi" +msgstr[1] "%(value).1f miliardi di miliardi" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s miliardo di miliardi" +msgstr[1] "%(value)s miliardi di miliardi" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f migliaio di miliardi di miliardi" +msgstr[1] "%(value).1f migliaia di miliardi di miliardi" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s migliaio di miliardi di miliardi" +msgstr[1] "%(value)s migliaia di miliardi di miliardi" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f milione di miliardi di miliardi" +msgstr[1] "%(value).1f milioni di miliardi di miliardi" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s milione di miliardi di miliardi" +msgstr[1] "%(value)s milioni di miliardi di miliardi" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f miliardo di miliardi di miliardi" +msgstr[1] "%(value).1f miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s miliardo di miliardi di miliardi" +msgstr[1] "%(value)s miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f migliaio di miliardi di miliardi di miliardi" +msgstr[1] "%(value).1f migliaia di miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s migliaio di miliardi di miliardi di miliardi" +msgstr[1] "%(value)s migliaia di miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f milione di miliardi di miliardi di miliardi" +msgstr[1] "%(value).1f milioni di miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s milione di miliardi di miliardi di miliardi" +msgstr[1] "%(value)s milioni di miliardi di miliardi di miliardi" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "uno" + +msgid "two" +msgstr "due" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "quattro" + +msgid "five" +msgstr "cinque" + +msgid "six" +msgstr "sei" + +msgid "seven" +msgstr "sette" + +msgid "eight" +msgstr "otto" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "oggi" + +msgid "tomorrow" +msgstr "domani" + +msgid "yesterday" +msgstr "ieri" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s fa" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d anni" +msgstr[1] "%d anni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesi" +msgstr[1] "%d mesi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d settimane" +msgstr[1] "%d settimane" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d giorni" +msgstr[1] "%d giorni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ore" +msgstr[1] "%d ore" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuti" +msgstr[1] "%d minuti" + +msgid "now" +msgstr "adesso" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "un secondo fa" +msgstr[1] "%(count)s secondi fa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "un minuto fa" +msgstr[1] "%(count)s minuti fa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "un ora fa" +msgstr[1] "%(count)s ore fa" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s da adesso" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d anni" +msgstr[1] "%d anni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesi" +msgstr[1] "%d mesi" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d settimane" +msgstr[1] "%d settimane" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d giorni" +msgstr[1] "%d giorni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d ore" +msgstr[1] "%d ore" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minuti" +msgstr[1] "%d minuti" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "tra un secondo" +msgstr[1] "tra %(count)s secondi" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "tra un minuto" +msgstr[1] "tra %(count)s minuti" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "tra un'ora" +msgstr[1] "tra %(count)s ore" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5ec0aac023cb3029a1b81a7717e29101a5b25aa3 GIT binary patch literal 4840 zcmcJSS&S4#7{^OR&=ovD@j@-dRR-wYnH`X2I7B((McC+iB|O;d)XX-_bPwG;Osc0ZI3nkAc+xhs<9Be>;b9&4> zgVf)IQzAXhycN6%`Ua5dJqnWVT`mtj`4#g=<{u!k0Xz%Lf#^!y$?-OhpW^s6kmh#~r1^afV*27Y=I_iu zK^%4Q7f9=L94b+K3P|xp<`mX1V;Zc_;&>s)OPMQJza6B0?*M7PR&ksIX`lL;Ynkhr z0dpI37jrlBIp!hELbr_9eln%5W1FIoSV<3k+7Qav9;T4%gos_&UA!AVH; z(EXWS%?Z&3(!N}QgeI!*j&a}|q}fQcNAz5Vl&t2Wb3)mxkQO7QDZsO+`YFU*a6ad2 zxB!_YwE$em`5DXvI1`EHcrj}o%&FikBs!0D*66;{b0HFrd-b6^jw4sSqqySLy`lY| zhO_`_9uhrt7Dqmrkpc3!ULu7=cYyXAuNi@(B_xu8)QxmC5-27|?CS>JB6=;mt5aI{(33i? zX$w8sA~f%wCtH=)ee-Z8n|Iigt$U`|bi3urIJI@B$g5K|+vLd@v1N~^)eHq>2vICbBmE$Ymq(mTJ6*7 zE!K?nGSim*PT6g4kThK9;QneWN&_<7O?}EXd@T4R>MnYGDeY=MRUenKIRd zly0=a*yk*R(-y4ZPvI&xgNeRGcvo{wDV5ejjH6hzOmfPTUq1ka^5p~os4Yj zSbLA6Q?6KJ+K!y>J8P^}mhUXe7fq|s(dQHwqKcg_n|WpQ zDzli8*O?{LR-Tg6`hCBY>FgXF9PIF^MJuP)QI*bUPBj#`e&=elGtsvE+T}}!XP@dw zwk^hqQZ`04RKoOpyzx3q1=F(U$-aJ^cI7X)xp$e-J?x{ta>_N9+I zGjg@r)>EL{Z!B}%qL-0&sTz6~UpgV&o1?hPw%#*|fF34?dS%Dymop{dfIm>R+MFxVPXhR!Q5hr!0M@^qZz z<*@Q(7;L6u{b<)u1w0D)aag_K= z_3);RO=owwVAyr^xt)3!3Wi-r9, 2011 +# Jonas Obrist , 2012 +# Shinya Okano , 2012-2014,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-23 03:33+0000\n" +"Last-Translator: Shinya Okano \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "ヒューマナイズ" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}番目" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}番目" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f ミリオン" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ミリオン" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ビリオン" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s ビリオン" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f トリリオン" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s トリリオン" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f クァドリリオン" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] " %(value)s クァドリリオン" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f クインテリオン" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s クインテリオン" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f セクスティリオン" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s セクスティリオン" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f セプティリオン" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s セプティリオン" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f オクティリオン" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s オクティリオン" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f ノニリオン" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s ノニリオン" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f デシリオン" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s デシリオン" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f グーゴル" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s グーゴル" + +msgid "one" +msgstr "1" + +msgid "two" +msgstr "2" + +msgid "three" +msgstr "3" + +msgid "four" +msgstr "4" + +msgid "five" +msgstr "5" + +msgid "six" +msgstr "6" + +msgid "seven" +msgstr "7" + +msgid "eight" +msgstr "8" + +msgid "nine" +msgstr "9" + +msgid "today" +msgstr "今日" + +msgid "tomorrow" +msgstr "明日" + +msgid "yesterday" +msgstr "昨日" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s前" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d 年" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ヶ月" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d 週間" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d 日" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d 時間" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d 分" + +msgid "now" +msgstr "今" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s秒前" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s分前" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s時間前" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "今から%(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d 年" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ヶ月" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d 週間" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d 日" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d 時間" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d 分" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "今から%(count)s秒" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "今から%(count)s分" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "今から%(count)s時間" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b928e731c3e414106b4b7bff3d587a9368d0931a GIT binary patch literal 4139 zcma)-O^g&p6vsd?_wS7V#TnOuTq8MofqYIT#ZzMw5(#4z z)jfYK>p98L^0*$w_0esNZ3EZdjvLx=4`XYGf44vg7~qQaC;jy*#|xe`>%}NuSJV>K6#M#Z46uk zhK92st@EPcb&%G%@^0$;NBdVB?g9tlmxi-oKkQ4! zz6Mgf-g|ZY&4xwr5%}LQ_IYFf1XA9Af{%fVm*{m5fJlL@H{1f!_)(DRS_Y|3Z<_w2 zhGz{gnEr1;{MdJfmq8o__B%-9uYxqs--iDf_S~oQSPH_$dO?&SJ=;_#dS57?Ww?-f z+8)52&Pq<3>7C9DHL5A?E3J|0FoX+7nLUiF-mrCPE@Wdmww4~ys4l(fldc`@?^DLE z!@&d9lWJ3MOYwlRr|%n`B|49^miuwhnW1y~5U%C8sMgKxK^RmQsx9p|j$PVl&uITx zU;h-Z)WpD0e!|)BS1NuWyZSs)v?%S~QV^7a$_*hcuBs)T%_jqCQQEyhQCYNh@1Yv^ zLW{by-UTZ|{tw%JP#;B&L>%vAKmrgmTg{=X} zXTljlV?f^qBOeV6+_p z7a!l$v| zcn7#F1)05KG6Ccf6b1Ar z#NnZ0P|fNk)lo6yvj=&0ATzpqbo>0`^Fz7Jwm>Q&k<^h%tWM!y9Py`6R|2-4wDVO!Hj! z0ElTi>N(kU@P3@cA9hXX{Ukn_#8?+rfTcB7YLBYb5Fw53vCpNOa`x7x$QWa~2ZrKi zxkgUcs*$97%}CX;Vy&~Z?ilrVuNJAg*NRlPTB&($_d1dGmZ~%_>|P_%cBoJif1SPn zIOjNW^nN7qyXk!{Ju64yZ~j|J;xAMEd#UCe0>h?dbr5}q-nK5xq~EKXjn|^~@z@=7 z;nyXFW?dR3J)-n#u_XSgu?QHbHe$g=nVP>E*RsC0E`-H5220Tg_ZY*d69|Z}4x-KJ zsgNlQd|GH;$l<2U>srJ>PS`=jIHeURC|t-t6{Q~~6Iic__6|x6_#};Z4hE*sUyWH9 PSkRo-=y!#dPbK;vcA9xM literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..b7d9278 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,235 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2013-2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: André Bouatchidzé \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "ჰუმანიზირება" + +msgid "th" +msgstr "-ე" + +msgid "st" +msgstr "-ლი" + +msgid "nd" +msgstr "-ე" + +msgid "rd" +msgstr "-ე" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f მილიონი" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s მილიონი" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f მილიარდი" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s მილიარდი" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ტრილიონი" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ტრილიონი" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f კვადრილიონი" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s კვადრილიონი" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f კვინტილიონი" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s კვინტილიონი" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f სექსტილიონი" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s სექსტილიონი" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f სეპტილიონი" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s სეპტილიონი" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f ოქტილიონი" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s ოქტილიონი" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f ნონილიონი" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s ნონილიონი" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f დეცილიონი" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s დეცილიონი" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f გუგოლი" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s გუგოლი" + +msgid "one" +msgstr "ერთი" + +msgid "two" +msgstr "ორი" + +msgid "three" +msgstr "სამი" + +msgid "four" +msgstr "ოთხი" + +msgid "five" +msgstr "ხუთი" + +msgid "six" +msgstr "ექვსი" + +msgid "seven" +msgstr "შვიდი" + +msgid "eight" +msgstr "რვა" + +msgid "nine" +msgstr "ცხრა" + +msgid "today" +msgstr "დღეს" + +msgid "tomorrow" +msgstr "ხვალ" + +msgid "yesterday" +msgstr "გუშინ" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s-ის წინ" + +msgid "now" +msgstr "ახლა" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s წამის წინ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s წუთის წინ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s საათის წინ" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s-ის შემდეგ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s წამში" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s წუთში" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s საათში" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e40f34ce0b0106b3594889d465e70460a6547bf1 GIT binary patch literal 2106 zcmaizO>7%Q6vqb$6ioPNq2;51rl5#~Xzg7Dq}>n%lonMaYFZhtXkw4;t=GF|cN{0c zp$(UaiXK1>0*Np6fIvcRNJE25dH@ND3z|*N^v(%5a6t(1fA+*7WDVne`fZYe{zlO0P@K2E1$Ja9UF!+h#4`2@C-wgL%*U=vXAAax2Bh`Rf_H)+g0#*Oh^5(&AnDf)uY#2Kvx)x-QvUCTe;NM{I4Qs1 za3@If>;dtxeR$D4kC?Fo(iM~D4jAR`fl<2)c1ye0sg3qaXN;xVjqYiu=@agU(OKRM zyA5_b>{b{xy2JiQd)P+HjEh)V`A7t@FH{)0d|ZY+A2p^#p~9c^WvDv+ zr^_|r`Po8PdkQ&0xgpBZ%1cpm`3vGzQLXU7ic)nqmuohgSw$0iB{@S0xz3h0;G67R zwVE5sOdOdww7GdFYiACIfsz4=nyq7ZO3tWU-4|Xk$_o_{#ZryEm_Kao-_+4sB^gL*qgV80{8sdZ zRfh@6f5RLP27P3C$^lDQuFG4EN}me4=fMBu-RGJ@VE#k~6k zC8zYVUP>19C8ihka&n3#bL*caCzClG!^Q`s7uOcyI*qf@t@ZcxrDTE55SgpIt76G~ zvVd%TW$hhEF<)1TsVSqQ&|hJhIY@D=m(e+G5-EG_d@>L5+WB@#SZ$dq(aY%Q7NxY{ HnaB8VU;cX* literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 0000000..c695bbc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,234 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leo Trubach , 2017 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Leo Trubach \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "ші" + +msgid "st" +msgstr "ші" + +msgid "nd" +msgstr "ші" + +msgid "rd" +msgstr "ші" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f миллион" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s миллион" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f миллиард" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s миллиард" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trillion" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадриллион" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтиллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтиллион" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "бір" + +msgid "two" +msgstr "екі" + +msgid "three" +msgstr "үш" + +msgid "four" +msgstr "төрт" + +msgid "five" +msgstr "бес" + +msgid "six" +msgstr "алты" + +msgid "seven" +msgstr "жеті" + +msgid "eight" +msgstr "сегіз" + +msgid "nine" +msgstr "тоғыз" + +msgid "today" +msgstr "бүгін" + +msgid "tomorrow" +msgstr "ерте" + +msgid "yesterday" +msgstr "кеше" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s бұрын" + +msgid "now" +msgstr "кәзір" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "кәзірден %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..482b022aabfd68028d61c7d3b151124cd4cab802 GIT binary patch literal 459 zcmYLE!A=4(6vXIhkDfjB;6a0rwnhRLF-C+0g-FQiz3!H!u-k6hBKR2|{5`+Lw_sqB zNjvGh*O}kblb;&m2ziD)M;;@ukQLg-ZN@faTB@01b z=7nC9ri&5Sr*YGUpbk>z`DW< RV#=-bUEU$PYnOGR+8-7Nhe`kd literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po new file mode 100644 index 0000000..0aab550 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,233 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/projects/p/django/language/" +"km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b75cf46d95c92eea48ae5a202cd3c2244dde302d GIT binary patch literal 461 zcmYLF!A=4(5XIYYL~R!<@B_qyLhztA3+y}UPhzAsCW1Q9dwTJ}( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 0000000..b38dd8c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,233 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/projects/p/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9157864c003fec9a868ffd18cf518e201d375f0f GIT binary patch literal 3781 zcma);Uu+ab9LEPm(Nk3LANY?!t+bZy-L-`thb2aYh=LHPKKZiT&D|}%+c|dk`iDeA zNE^{=q7iBhCDvGh2x_4~N&+TIVnU)1YQzT<<@s)ji4Q)g4}O2Q)8no;rA#{ex!-rb z`UH?H((RuKfx!!rMCw8JHh3M1xWgvNtF-MkAk;> zKY*0yGD!3PqvA#kQoI@D;2!X4@DPY4vF|`U3j1F1M{pV9%OI`qZ;<9$a(j?}9Z334 z#Q~7+KLSz-k1Ku!QvOL5pHuM##fu5f{9N$_NWL!>&nW%8ioaGdoo$-mK&SOnjWJYi z^c+jkBSBccKBhj?S)lieo{{#g1)b(wf@N8x-0TJ`>b-G-mR5A-NNfcw{CZJO8p+XT&K<0LYLPGGk4GB^-BG|xm>5! z@0rVWnr^pTKAT#gDnr(9VEMnajky9gTHmD-KP{^6KwMQ@$MY9W@;AUFl6-vm0 z?KQdIjs>b)mMfl=BXcNUug+K*GqIY4w39P42I_Q1<*D3NHTATyGG^L5BMZ*Vgruo- z%22tZDqG;Hj0h{8@mR|05iEuKnQeLn$IN0bK1kr6fZ+wbl_- zk36c5dY81lOxZ*q^mFwJ(M=Yj-qA12@@j~1ShiraMG|yHkFc3*^)WBw2*Er_kLJmo zbR1Z`Udj4}>j{VCZI0X}5}vUsX}l^N7vIuxp4?^HX&Krs^3w5)EpFOM8qXEduF)mq zJhW|Vm$BXvrU$R_yy=NJZ;eD_Mr4%{?cmX9ynRh`q%{(O(bz6}EXrBq>oB4*9*M4BsI#l0Rdaxo2H`vSp^F+gS&zoi3PZVRQ*I7w0cY zti$Gw8PChd!{OfE-WHGYSSiuhl90J@@Fdg7s=LG8GTao}vT4hPYtI~QiGrE8-RyXK?0Qo=Dd*a?}m>~x&Rc3NI#m2uuJL))@+ z(u|GL$+>ZE=gXnn8C}bRkDZaVq3T~Tf9MN;_)N9JO9u}4L*u0*C;Z_lBO37!kMOoO ze{8fkd9ub=JaeKrc}zK?kx0FzG;y+Y^qrcUN`q6Sq4%njw`p$V{>W!nho-7+ytSi# z0`8w0^*@=Yonhi+@zjMH$sc^HE?c`U+rYUQzSd~Ht$IS2&nTdKL*;Y%9K}PL+S);w zyK-2~4b%;;+NzZ&tF9RwH&8LS=B^h^*q_QTLFGG>m(C7we{6vHNB0(|_Lt7?y*e<# zYlg9f>X(B1r}tmajNxkY&}ebuy2<^rgT>e?){gHz|L}Rb24X`JD??bE81)YwApKJs mEe#H^HEOZ=kGF%ZW^K$L885v(!b, 2015 +# Jannis Leidel , 2011 +# Le Tartuffe , 2014 +# JunGu Kang , 2015 +# Noh Seho , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-18 08:54+0000\n" +"Last-Translator: Noh Seho \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f백만" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s 백만" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f십억" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s 십억" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f조" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s 조" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f 천조" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s 천조" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f 백경" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s 백경" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f 섹틸리언-10의21제곱" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s 섹틸리언-10의21제곱" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f 셉틸리언-10의 24제곱" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s 셉틸리언-10의 24제곱" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f 옥틸리언-10의 27제곱" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s 옥틸리언-10의 27제곱" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f 노닐리언-10의30제곱" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s 노닐리언-10의30제곱" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f 디실리언-10의 33제곱" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s 디실리언-10의 33제곱" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f 구골-10의 100제곱" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s 구골-10의 100제곱" + +msgid "one" +msgstr "1" + +msgid "two" +msgstr "2" + +msgid "three" +msgstr "3" + +msgid "four" +msgstr "4" + +msgid "five" +msgstr "5" + +msgid "six" +msgstr "6" + +msgid "seven" +msgstr "7" + +msgid "eight" +msgstr "8" + +msgid "nine" +msgstr "9" + +msgid "today" +msgstr "오늘" + +msgid "tomorrow" +msgstr "내일" + +msgid "yesterday" +msgstr "어제" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d년" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d개월" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d주" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d일" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d시간" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d분" + +msgid "now" +msgstr "지금" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s 초 전" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s 분 전" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s 시간 전" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "지금부터 %(count)s 초" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "지금부터 %(count)s 분" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "지금부터 %(count)s 시간" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 0000000..32550de --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bcd03fd3829d00a0275200b84d0c31f8e1766969 GIT binary patch literal 7374 zcmdUzUu+yl9mj_fl44pK`j0|GnF3CHN!Grzlg7UIlC*JCs@95?nzj;^+Kq2~UfvkSfYQTS7ebfrla?R6s~PAOQl27asWjc4l{H z_hwBb!~-j>KQrIoZ@;tiZ*SMXy>r)9hGPNeKAiKnFy?~K?ZO`%@4Sbx+ri&~cY=Qb z4}iDqX6z7n5F7`e21&oH_3voD1x`W#m*(L;j5(-3r};&&hWZb|kAuGl4}iOGW$Zz4 z5+r>IBwcEL3#9h9H2(^c&%XC6o&o8;1|UN0>md2O3{v|)*Y&^Y`aNTeapZ-R7RFN5UwQ;_cKk07;o`}>qWqxlT@QRtUIy6!qic|X$eKWKf=Z7N;^ zsl6w_cY{ls%i#M_e^#>teh~Gcu75@I+nV3gd_(h>n!nckljc7`>gR4uGPQRbNcFv% z_kuKj`*eI9#E`KXct6(447eBdvv)9d7x)7BX;6aCgKvRn!8($j0Y3|Nz_&q)pZb8R zzoL077TF5)0Z4hj0?BV4=1+kyf#maN@G)@VZsq?akob&$s8jt{Hxx(~z>XAgh}z;SR2 zT-3Y*PNV)RI0L=|()zjkew9B9QvM5?Uj-@uCm`kj9i;pN*re3X6ClmgIbDBN*PquE znqAEcnj4x|G(V^L186; zV2LFMrXa~dh@HfFSE8!^AJk>)GlrHugcDPrj0v@W4ChgtSWd~YAAjq*{0Ys6!P7Wt zyy!TU{AFwooY&}&eNqdxz zahzD<$sVQkMQeq|YXWBr=W(2Ld`uzx+ssO;fbGQ^I5GXn{={R3VXH8X)4@55^AVhM zU`Zthwm>o`ShBd0iMHrTw-#}?6BxDCFz9nX*nl*2d$FiZHdgt0uh;Ve|37MNv0}-z ztDPX|1igZ#Me1ApY?>eVmQ1@EtVm0)UA+*y?a-24t$V)B{X%TlBQdb0SIQUd*;ZNF zZhSQ8sjMs_yv~|rtKLwsRb0<}SH_{+ zlU`pqt1-%A*La(^-A$$tRb-GYr6l$hIcf|kOOIw%Uf|2MB#jDHEp7RB4E?pK#-*xE4 zP>p0>Z5-x}X`C~~v}siRc9urbFs~jdCLb+UA1YRl6|1ww>YS=ZVkmqTc^8>n3x!}Z zpd}`Qeh`M}klYB^rii2nNnQ$rb+ICy$J@@+B8>2R+2rkY*Y5;l=fofgrL!1yytea5 z+=-m!pvlLU&MrHrL*Yu~It#88O+H<3%sTa>PU9GFG@3`|4%MgYbtF3H#Ly$pa^5Vj z&o-y057lvuJ&EPwEQhWi^;{W*O}^+#H{uJf*V}Bne7;ZBQ*Bk9TnYLoaEafE-HvdU zh1+lPCq20q;~9g^JFzC^pgA?Qv9U2J$tHm39|9-CPb$)_3=J@5yT*d2r z9s^zDCwZMW(w64I@%&Wv58hcy)()q})yx8EK~~qF$gZ-7x~iR`Nipk?MfgjqI}$8Ie*e zd8FJ-WrSYcEIrBOVhgEUvbV^|TXXpdVTieJE*h>CVz#4=-K*d8lTMhfS#H7Bu9lw& z_$)}C5vE^x=j)t;d%EZIhobHXo(`th=zh=g3Vz0(E%eybOT4( zi-_(oY3t_0BfZ4`&s_BK^P}^jB3MBc*VyJzU6ZV(bSBaUtoNvbfqf2BvmLJ7e%%PV z+c#v4f55PT@Vg%C3Vd>7spFH|6Fz#VOSC7HM)zr!(px1}l~rzfBe|}wOg>k)u92L6 zh3leT$4bvDTi1LMZGAtvASrusax;BZ(XM7Ca)+)bu?S(T%2;-3IWtZoS*?$bD_f(W zy@kv>{l6QM, 2015,2018 +# Simonas Kazlauskas , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 08:22+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Humanize" +msgstr "Sužmoginti" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}-as" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}-as" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milijonas" +msgstr[1] "%(value).1f milijonai" +msgstr[2] "%(value).1f milijonų" +msgstr[3] "%(value).1f milijonų" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milijonas" +msgstr[1] "%(value)s milijonai" +msgstr[2] "%(value)s milijonų" +msgstr[3] "%(value)s milijonų" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milijardas" +msgstr[1] "%(value).1f milijardai" +msgstr[2] "%(value).1f milijardų" +msgstr[3] "%(value).1f milijardų" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milijardas" +msgstr[1] "%(value)s milijardai" +msgstr[2] "%(value)s milijardų" +msgstr[3] "%(value)s milijardų" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilijonas" +msgstr[1] "%(value).1f trilijonai" +msgstr[2] "%(value).1f trilijonų" +msgstr[3] "%(value).1f trilijonų" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilijonas" +msgstr[1] "%(value)s trilijonai" +msgstr[2] "%(value)s trilijonų" +msgstr[3] "%(value)s trilijonų" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrilijonas" +msgstr[1] "%(value).1f kvadrilijonai" +msgstr[2] "%(value).1f kvadrilijonų" +msgstr[3] "%(value).1f kvadrilijonų" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrilijonas" +msgstr[1] "%(value)s kvadrilijonai" +msgstr[2] "%(value)s kvadrilijonų" +msgstr[3] "%(value)s kvadrilijonų" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintilijonas" +msgstr[1] "%(value).1f kvintilijonai" +msgstr[2] "%(value).1f kvintilijonų" +msgstr[3] "%(value).1f kvintilijonų" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintilijonas" +msgstr[1] "%(value)s kvintilijonai" +msgstr[2] "%(value)s kvintilijonų" +msgstr[3] "%(value)s kvintilijonų" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sikstilijonas" +msgstr[1] "%(value).1f sikstilijonai" +msgstr[2] "%(value).1f sikstilijonų" +msgstr[3] "%(value).1f sikstilijonų" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sikstilijonas" +msgstr[1] "%(value)s sikstilijonai" +msgstr[2] "%(value)s sikstilijonų" +msgstr[3] "%(value)s sikstilijonų" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilijonas" +msgstr[1] "%(value).1f septilijonai" +msgstr[2] "%(value).1f septilijonų" +msgstr[3] "%(value).1f septilijonų" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilijonas" +msgstr[1] "%(value)s septilijonai" +msgstr[2] "%(value)s septilijonų" +msgstr[3] "%(value)s septilijonų" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilijonas" +msgstr[1] "%(value).1f oktilijonai" +msgstr[2] "%(value).1f oktilijonų" +msgstr[3] "%(value).1f oktilijonų" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilijonas" +msgstr[1] "%(value)s oktilijonai" +msgstr[2] "%(value)s oktilijonų" +msgstr[3] "%(value)s oktilijonų" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f naintilijonas" +msgstr[1] "%(value).1f naintilijonai" +msgstr[2] "%(value).1f naintilijonų" +msgstr[3] "%(value).1f naintilijonų" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s naintilijonas" +msgstr[1] "%(value)s naintilijonai" +msgstr[2] "%(value)s naintilijonų" +msgstr[3] "%(value)s naintilijonų" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilijonas" +msgstr[1] "%(value).1f decilijonai" +msgstr[2] "%(value).1f decilijonų" +msgstr[3] "%(value).1f decilijonų" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilijonas" +msgstr[1] "%(value)s decilijonai" +msgstr[2] "%(value)s decilijonų" +msgstr[3] "%(value)s decilijonų" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugolas" +msgstr[1] "%(value).1f gugolai" +msgstr[2] "%(value).1f gugolų" +msgstr[3] "%(value).1f gugolų" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugolas" +msgstr[1] "%(value)s gugolai" +msgstr[2] "%(value)s gugolų" +msgstr[3] "%(value)s gugolų" + +msgid "one" +msgstr "vienas" + +msgid "two" +msgstr "du" + +msgid "three" +msgstr "trys" + +msgid "four" +msgstr "keturi" + +msgid "five" +msgstr "penki" + +msgid "six" +msgstr "šeši" + +msgid "seven" +msgstr "septyni" + +msgid "eight" +msgstr "aštuoni" + +msgid "nine" +msgstr "devyni" + +msgid "today" +msgstr "šiandien" + +msgid "tomorrow" +msgstr "rytoj" + +msgid "yesterday" +msgstr "vakar" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "prieš %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d metus" +msgstr[1] "%d metus" +msgstr[2] "%d metų" +msgstr[3] "%d metų" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mėnesį" +msgstr[1] "%d mėnesius" +msgstr[2] "%d mėnesių" +msgstr[3] "%d mėnesių" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d savaitę" +msgstr[1] "%d savaites" +msgstr[2] "%d savaičių" +msgstr[3] "%d savaičių" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dieną" +msgstr[1] "%d dienas" +msgstr[2] "%d dienų" +msgstr[3] "%d dienų" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d valandą" +msgstr[1] "%d valandas" +msgstr[2] "%d valandų" +msgstr[3] "%d valandų" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutę" +msgstr[1] "%d minutes" +msgstr[2] "%d minučių" +msgstr[3] "%d minučių" + +msgid "now" +msgstr "dabar" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "prieš %(count)s sekundę" +msgstr[1] "prieš %(count)s sekundes" +msgstr[2] "prieš %(count)s sekundžių" +msgstr[3] "prieš %(count)s sekundžių" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "prieš %(count)s minutę" +msgstr[1] "prieš %(count)s minutes" +msgstr[2] "prieš %(count)s minučių" +msgstr[3] "prieš %(count)s minučių" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "prieš %(count)s valandą" +msgstr[1] "prieš %(count)s valandas" +msgstr[2] "prieš %(count)s valandų" +msgstr[3] "prieš %(count)s valandų" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s nuo dabar" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d metus" +msgstr[1] "%d metus" +msgstr[2] "%d metų" +msgstr[3] "%d metų" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mėnesį" +msgstr[1] "%d mėnesius" +msgstr[2] "%d mėnesių" +msgstr[3] "%d mėnesių" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d savaitę" +msgstr[1] "%d savaites" +msgstr[2] "%d savaičių" +msgstr[3] "%d savaičių" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dieną" +msgstr[1] "%d dienas" +msgstr[2] "%d dienų" +msgstr[3] "%d dienų" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d valandą" +msgstr[1] "%d valandas" +msgstr[2] "%d valandų" +msgstr[3] "%d valandų" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutė" +msgstr[1] "%d minutes" +msgstr[2] "%d minučių" +msgstr[3] "%d minučių" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s sekundė nuo dabar" +msgstr[1] "%(count)s sekundes nuo dabar" +msgstr[2] "%(count)s skundžių nuo dabar" +msgstr[3] "%(count)s skundžių nuo dabar" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s minutė nuo dabar" +msgstr[1] "%(count)s minutės nuo dabar" +msgstr[2] "%(count)s minučių nuo dabar" +msgstr[3] "%(count)s minučių nuo dabar" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s valandą nuo dabar" +msgstr[1] "%(count)s valandos nuo dabar" +msgstr[2] "%(count)s valandų nuo dabar" +msgstr[3] "%(count)s valandų nuo dabar" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d99979d3e6b4d8140df7729e8e14b9cf234b6a5 GIT binary patch literal 6252 zcmds*O^h5z6~`;V*knjZFiA+jgmTE*yS96GX4hV?XLsXZJ0>e^XBBM{B77-N*Uq-L zr+d;>GrPw4fP@eq3OQKez=sl}+#D&#ARv)2V+kP+9Ju6y0tg8yha@MIz=8kkuI}lN zYUfVNHNUEVy?XWas=L;I-M!-_hUXO09;Bt)857|79r(fX&Lme)f7S5M;0*Nt8Xnrkn1k|p!ykfEDE|ul3ix+$Ke+Q#jO_)dLDE-2 z(zW5wLF#{G_&!K}_S}*1G)Uv>gQ#LZ0m;wHAoc%yQ~tn|?`tr|p`Qc~fG&usvKK*G zikA$33evb<2Fc&=KpNLSLF(_WPbd1E;j`eEpd(+ha!|1#2OzNjV>hJ5| zC%{$1HSjYif5Wf~ejeqaDgW5;7lyAH{>Jc+hHo4G%kbYI&2uL zkYe%P&nEhFAo;rnlAm`#^79~qaTa_UJOX|nB>gSJk3i~w{&NYpLGtr!Q~nSne~b5` zFHqy>N$>~Y8SrgW-gh7N0_7n{`VDXey!(E}c7e}F`XUmYPrPOrjsW9G4$=bB2_$;HkRXm{+AC}U z1~TbNUyCWlMK{cq)}ye;gK!JdQ1}BmHQie07d+qh!r)^yS9UCxcC{OZ-Ow+%v`9UR zKbsbWfyL6Uh8=COwX4q$gd16`>vb=%d4GOj*Olzs%xmRsyR}u;wt-hfRoPveQr$zv zZCYsy6|V^8-BY}(RQF9GCd)glcy-V0nr*ifuT!f#MYcB8vQ3KDh?OlOON(gPpiFvV z&=Z08Ey)BHEf{EN4sRzM1bRx{cqLJjGo9Jwj&#K^s}mSaCk))O$3#s%8k?-u#AN0% zHO%Tnz&FA{RCY+3ac2y&7CCQ;RaPUt?uKUT-cYi2v}b|PgGl(=>q%#QfV|u>;c{18 zVhL1@1-T`Y*nN#nvW8@3RdwrNtJCN{@@JL%cPMG*>j6 zMKN$QGpdco#luD8BgNu;v3RstTqqWgB}FBNGGNNvW_lx%lIf5_OozQNiZCI)6|zfG zX&I5c8if~SM>{L7^NfrXzL#z8UKBw$Y&<3VVWge2s_VJVi9uI6Yhjx=R-asRPDWB_ z*gB_#mTf-UY%Ms=BTnlmZ?)Qoj~#5zHk&YXo{~e4e3tBH=Xh(refa3XCZ5I_gp0El zi9q>6hf$lK8~FZ;Iv46DUkZ@-RDk?rUT`7Yp7w{2qD9ahh^}Kbdim+K)6T-!j`~`ck@I-a2@xsXHea~l>1>#7?hhNQKAnB%bQtwi zn+N^4sFvpzd6He83?^F5<>eONw~te{xp%qM;>UTD!<_G3M&>wgp)fnO*kFARet32t zV*Sz8POg~02jNR~QADmP+**w2*~CFXbmgY-FNQ&}eX156q-xPacYr%nv3V>N+s0C{ zAq}$JaiSHQCR(v={N=5*PSs-jR4sZ4H*syLcu3Wvhg22>V2Qf)c3PT!jb%03sC}yD2QXIi1F%F} zB~%s9tX739qS1BD@kitkFX7Sk?jUBzic9R`7G8(dOj9bB%e&=ak-@mA1pyi(VqP*WM3hBIMVH$@er?^u>?TvHxE>dU6b zuIegqLkVww&%+ks{|eaX1&Qsa`?2fE0E4UK$Qi_VBuRZaYb>(3fOR!b3r`iJtAV_E zP1NK)8CwO?9bFy$HtEh*FkN;Lu;eL6, 2017 +# NullIsNot0 , 2017-2018 +# Jannis Leidel , 2011 +# peterisb , 2016 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-23 16:47+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Humanize" +msgstr "Padarīt cilvēcīgu" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljons" +msgstr[1] "%(value).1f miljoni" +msgstr[2] "%(value).1f miljonu" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljonu" +msgstr[1] "%(value)s miljons" +msgstr[2] "%(value)s miljonu" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljards" +msgstr[1] "%(value).1f miljardi" +msgstr[2] "%(value).1f miljardu" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljardu" +msgstr[1] "%(value)s miljards" +msgstr[2] "%(value)s miljardu" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f triljons" +msgstr[1] "%(value).1f triljoni" +msgstr[2] "%(value).1f triljonu" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljonu" +msgstr[1] "%(value)s triljons" +msgstr[2] "%(value)s triljonu" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadriljons" +msgstr[1] "%(value).1f kvadriljoni" +msgstr[2] "%(value).1f kvadriljonu" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadriljonu" +msgstr[1] "%(value)s kvadriljons" +msgstr[2] "%(value)s kvadriljonu" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintiljons" +msgstr[1] "%(value).1f kvintiljoni" +msgstr[2] "%(value).1f kvintiljonu" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintiljonu" +msgstr[1] "%(value)s kvintiljons" +msgstr[2] "%(value)s kvintiljonu" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstiljons" +msgstr[1] "%(value).1f sekstiljoni" +msgstr[2] "%(value).1f sekstiljonu" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstiljonu" +msgstr[1] "%(value)s sekstiljons" +msgstr[2] "%(value)s sekstiljonu" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septiljons" +msgstr[1] "%(value).1f septiljoni" +msgstr[2] "%(value).1f septiljonu" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septiljonu" +msgstr[1] "%(value)s septiljons" +msgstr[2] "%(value)s septiljonu" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktiljons" +msgstr[1] "%(value).1f oktiljoni" +msgstr[2] "%(value).1f oktiljonu" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktiljonu" +msgstr[1] "%(value)s oktiljons" +msgstr[2] "%(value)s oktiljonu" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f noniljons" +msgstr[1] "%(value).1f noniljoni" +msgstr[2] "%(value).1f noniljonu" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s noniljonu" +msgstr[1] "%(value)s noniljons" +msgstr[2] "%(value)s noniljonu" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f dekaljons" +msgstr[1] "%(value).1f dekaljoni" +msgstr[2] "%(value).1f dekaljonu" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s dekaljonu" +msgstr[1] "%(value)s dekaljons" +msgstr[2] "%(value)s dekaljonu" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugols" +msgstr[1] "%(value).1f gugoli" +msgstr[2] "%(value).1f gugolu" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugolu" +msgstr[1] "%(value)s gugols" +msgstr[2] "%(value)s gugolu" + +msgid "one" +msgstr "viens" + +msgid "two" +msgstr "divi" + +msgid "three" +msgstr "trīs" + +msgid "four" +msgstr "četri" + +msgid "five" +msgstr "pieci" + +msgid "six" +msgstr "seši" + +msgid "seven" +msgstr "septiņi" + +msgid "eight" +msgstr "astoņi" + +msgid "nine" +msgstr "deviņi" + +msgid "today" +msgstr "šodien" + +msgid "tomorrow" +msgstr "rīt" + +msgid "yesterday" +msgstr "vakar" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "pirms %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d gada" +msgstr[1] "%d gada" +msgstr[2] "%d gadiem" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mēneša" +msgstr[1] "%d mēneša" +msgstr[2] "%d mēnešiem" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d nedēļas" +msgstr[1] "%d nedēļas" +msgstr[2] "%d nedēļām" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dienas" +msgstr[1] "%d dienas" +msgstr[2] "%d dienām" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d stundas" +msgstr[1] "%d stundas" +msgstr[2] "%d stundām" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minūtes" +msgstr[1] "%d minūtes" +msgstr[2] "%d minūtēm" + +msgid "now" +msgstr "tagad" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "pirms %(count)s sekundes" +msgstr[1] "pirms %(count)s sekundēm" +msgstr[2] "pirms %(count)s sekundēm" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "pirms %(count)s minūtes" +msgstr[1] "pirms %(count)s minūtēm" +msgstr[2] "pirms %(count)s minūtēm" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "pirms %(count)s stundas" +msgstr[1] "pirms %(count)s stundām" +msgstr[2] "pirms %(count)s stundām" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "pēc %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d gada" +msgstr[1] "%d gada" +msgstr[2] "%d gadiem" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mēneša" +msgstr[1] "%d mēneša" +msgstr[2] "%d mēnešiem" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d nedēļas" +msgstr[1] "%d nedēļas" +msgstr[2] "%d nedēļām" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dienas" +msgstr[1] "%d dienas" +msgstr[2] "%d dienām" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d stundas" +msgstr[1] "%d stundas" +msgstr[2] "%d stundām" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minūtes" +msgstr[1] "%d minūtes" +msgstr[2] "%d minūtēm" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "pēc %(count)s sekundes" +msgstr[1] "pēc %(count)s sekundēm" +msgstr[2] "pēc %(count)s sekundēm" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "pēc %(count)s minūtes" +msgstr[1] "pēc %(count)s minūtēm" +msgstr[2] "pēc %(count)s minūtēm" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "pēc %(count)s stundas" +msgstr[1] "pēc %(count)s stundām" +msgstr[2] "pēc %(count)s stundām" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc6bfbda1e7ab838399b4ee155069224f7f8d478 GIT binary patch literal 4761 zcmai$Piz!b9LJwpMb|$FiioJZf~76(bazTf+pPtpf)c0_EJhC;hTYfg(A}9bGur}* zhL%LU=*5s2i3y1sW4shwLQ^OP4xTibjR_Zn2?t~1MZKyAzrUH+?fiM$PWt9E@AvP$ z`Tc(Lw!f}#y2xzsk1Nm`q5c~q%1O6`Ot&cO-gZUWPM|wHG3wB_>;fXN*D@zaZrwgD69g zbJFV=&tX8!kc!}X8h7fITsRHx)H8HZP3il30fYLj3xn3B94%c)Jwthd3+Z8<@|pU2 zvwYUTtr*+odscB zCBwSTu=uE5b&>%|Cc{aCx<@2hXjRt;voz|l5pzPY5%@F9@T!hc_RNZCYH2HqvS+l1 zLDiaiAgjnM(-Mr*VS`SQxne?C%r#Fl*JIu&{v08gXBUk#xL0h)fvq=bvopf=ghS#Z zj(t)TJndjnds{dzj>bGMo;0kIojEGTZO7Aw+>%+;_Ek%+Hf-m4=E$4F+Mpv054PH? zh9~m8JE!l`a=NDXa9z*mdOC7?E(b&HsF*M*=CWOnmh02HcXGWipWD@u!<9K~xSlrb z7?xW$JlnzgVho!_OT1iky69nVsbZMru7X|J4Qs1ZHA+Go7Dgq{hm3+K;>1LW+D1KZ zJfF=@PEK}t6wVwGr^zWBzR(iNGD5a8mTk`r9UR)f{OWpFE;DFbp0Kc`GvjzS51pMI zFB_)S&kLi5;|g!!*zf_ZciE2C8WE1R-zwNe(<Q6zm9$-2@0 z63V3SO@E;_-N-kgO!#tt!T-*m@#m1zAib$gD=iXHf*|w$V&h%VDhY!`jM|ic)&IU> zgtS`azfhZ6IYPo98DqL(8fr0B#Lwj`bf!YN+*?pK>dLe#zGA)g>KzG>x-f1VX}YL& zL>#wIG+Wdsp^Ez@8ZGLVP{sXLYCyb|LY?+cv{rQOl{?Sn>Bfq9rG}!Y~VXjYWS>wXc|gVq-Gdp?`9@#7jhN{nht&`*Q69 z@;Rl, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:05+0000\n" +"Last-Translator: dekomote \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Humanize" +msgstr "Хуманизирање" + +msgid "th" +msgstr "ти" + +msgid "st" +msgstr "ви" + +msgid "nd" +msgstr "ри" + +msgid "rd" +msgstr "ти" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f милион" +msgstr[1] "%(value).1f милиони" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милион" +msgstr[1] "%(value)s милиони" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f милијарда" +msgstr[1] "%(value).1f милијарди" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s милијарда" +msgstr[1] "%(value)s милијарди" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f трилион" +msgstr[1] "%(value).1f трилиони" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s трилион" +msgstr[1] "%(value)s трилиони" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадрилион" +msgstr[1] "%(value).1f квадрилиони" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадрилион" +msgstr[1] "%(value)s квадрилиони" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтилион" +msgstr[1] "%(value).1f квинтилиони" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтилион" +msgstr[1] "%(value)s квинтилиони" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстилион" +msgstr[1] "%(value).1f секстилиони" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстилион" +msgstr[1] "%(value)s секстилиони" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септилион" +msgstr[1] "%(value).1f септилиони" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септилион" +msgstr[1] "%(value)s септилиони" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октилион" +msgstr[1] "%(value).1f октилиони" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октилион" +msgstr[1] "%(value)s октилиони" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нонилион" +msgstr[1] "%(value).1f нонилиони" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нонилион" +msgstr[1] "%(value)s нонилиони" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f децилион" +msgstr[1] "%(value).1f децилиони" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s децилион" +msgstr[1] "%(value)s децилиони" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гуголи" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гуголи" + +msgid "one" +msgstr "еден" + +msgid "two" +msgstr "две" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четри" + +msgid "five" +msgstr "пет" + +msgid "six" +msgstr "шест" + +msgid "seven" +msgstr "седум" + +msgid "eight" +msgstr "осум" + +msgid "nine" +msgstr "девет" + +msgid "today" +msgstr "денес" + +msgid "tomorrow" +msgstr "утре" + +msgid "yesterday" +msgstr "вчера" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "пред %(delta)s" + +msgid "now" +msgstr "сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "пред %(count)s секундa" +msgstr[1] "пред %(count)s секунди" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "пред %(count)s минутa" +msgstr[1] "пред %(count)s минути" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "пред %(count)s час" +msgstr[1] "пред %(count)s часа" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s од сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "за %(count)s секундa од сега" +msgstr[1] "за %(count)s секунди од сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "за %(count)s минута од сега" +msgstr[1] "за %(count)s минути од сега" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "за %(count)s час од сега" +msgstr[1] "за %(count)s часа од сега" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8607a086d03c4f07249846037a5bf0b115616be2 GIT binary patch literal 5077 zcmb`JUu+ab9LGng|IWXFih_RzvC`UX?~aJT)vB?AqFf|cOnfl9^yaQx_jb$9UQ5G+ z(u5j9zyt!Q4>qPsz$ggpDGvq>y!v8{@quVICdMZpeDcY}?{9Z{=iN=O+_jUN{p|ea z_h)8)vvc#?vW{a6<#E&pQ0?m&>jS^N9uJgLOBh=Vo(6lsAHh!WUnO7D5zAjz90!x= zpHch?G|*mhL(DYTjrN=18t?!}{=WoQgFh?zKT5vp#<+g~r1)W10bfv4l5o}{l`J__o0$cEBTD#N!5Q^@ho^V z^vfXmy9C|>UIstF+Wr8(gSLRs1pfdBz!wsX?FSEnBwu~G723Q840hiwy^Hq@KM?n|-8!Un5T`_-A%r0eYALLiSEVy|YV^C#B z6=y(%W*0!(FW-af!Cyh7fGuCn*gfD%@IEjFlKobY`dF6rQF32#F9=s`5+u80 zAjSJkwa=^m%OIAMb)n7{EJ3A^kF}@|qGBncLVLVZy*~zG%9TQ6rNU8ZoGVZ%e^>^# z3YF$c^IC(t5|wg%FDexpAMK^p)IdS1D&=mxJ%UPmk@g*i9hFD%M5?1bj4cuEP3oXI z)B4b!n=KF1OJ~=ZX_rKIZ#vI+S+;Gt&b+dm7}99!r3Ke5xOR<8ji{*cr;|CZqtVn$ z-63D2tC#LBnK@6RJ-6I)bl!KD^l~Xib?S49_vp2?VqZ7#2BB=ou1?aJL&)+bW{PxmQcap9pF`M?BGS|dH3_PSgjE>!S>75G zEbo>)=9qrTGi~20ijK~%oUnbfTXM7D&e4SdL)y?t)&9NiilICapb8 z`ph53&l7_AZqA&*v*>yrbp3IcO$g}=kHp(OcSH>N#@3win(!n}hz!q-m`=e>>=2`_ z=NnmBuyV$8rGhjD-3(7`e`U}Z@Pz3@*LdFaMTW0SrPmv&w2|Jx)9FlVLr*H5N5nii@a;t_eV3y= z2g#zH>`r92W;a*opYBa123*G%4#qVxiV6D2a&pu*EvJtU4V#`6e*ezFEyl*G9>vNF z&)Dn?xjD-zWcbEimR}iYh8OL`cAHXdY;nD!%y4HkYRdj~eLQ~c?{fI+exB~`OVk{y zVemy5d>01i!}6io=h-lrLG$-_5Am)r_&N+e4TEE0`Cu4KL$`a8?LP_2Q(WrA1xFX@|!T2tY4@_aB(V{!>J}?she2K z21jORa4y;q=dL|e`SSh8{$TnYmu7w=zPd)UP>#utF4LgW@ET#4L{@x^G@f39M- z7-aEc62Bt2Oe><@#FqxMH}8~?}HL3D$H&)I8s7@P^q`=Tc->7a+@ zd+}TJtX@X2#<4E$S>%N-UKK~M!u4npz&5A, 2011 +# Rajeesh Nair , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "ആം" + +msgid "st" +msgstr "ആം" + +msgid "nd" +msgstr "ആം" + +msgid "rd" +msgstr "ആം" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f മില്ല്യണ്‍ (ദശലക്ഷം)" +msgstr[1] "%(value).1f മില്ല്യണ്‍ (ദശലക്ഷം)" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ദശലക്ഷം" +msgstr[1] "%(value)s ദശലക്ഷം" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ബില്ല്യണ്‍ (ശതകോടി)" +msgstr[1] "%(value).1f ബില്ല്യണ്‍ (ശതകോടി)" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s ശതകോടി" +msgstr[1] "%(value)s ശതകോടി" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ട്രില്ല്യണ്‍ (ലക്ഷം കോടി)" +msgstr[1] "%(value).1f ട്രില്ല്യണ്‍ (ലക്ഷം കോടി)" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s ലക്ഷം കോടി" +msgstr[1] "%(value)s ലക്ഷം കോടി" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f ക്വാഡ്രില്ല്യണ്‍" +msgstr[1] "%(value).1f ക്വാഡ്രില്ല്യണ്‍" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s ക്വാഡ്രില്ല്യണ്‍" +msgstr[1] "%(value)s ക്വാഡ്രില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f ക്വിന്റില്ല്യണ്‍" +msgstr[1] "%(value).1f ക്വിന്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s ക്വിന്റില്ല്യണ്‍" +msgstr[1] "%(value)s ക്വിന്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f സെക്സ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value).1f സെക്സ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s സെക്സ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value)s സെക്സ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f സെപ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value).1f സെപ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s സെപ്റ്റില്ല്യണ്‍" +msgstr[1] "%(value)s സെപ്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f ഒക്റ്റില്ല്യണ്‍" +msgstr[1] "%(value).1f ഒക്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s ഒക്റ്റില്ല്യണ്‍" +msgstr[1] "%(value)s ഒക്റ്റില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f നോനില്ല്യണ്‍" +msgstr[1] "%(value).1f നോനില്ല്യണ്‍" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s നോനില്ല്യണ്‍" +msgstr[1] "%(value)s നോനില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f ഡെസില്ല്യണ്‍" +msgstr[1] "%(value).1f ഡെസില്ല്യണ്‍" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ഡെസില്ല്യണ്‍" +msgstr[1] "%(value)s ഡെസില്ല്യണ്‍" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f ഗൂഗോള്‍" +msgstr[1] "%(value).1f ഗൂഗോള്‍" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s ഗൂഗോള്‍" +msgstr[1] "%(value)s ഗൂഗോള്‍" + +msgid "one" +msgstr "ഒന്ന്" + +msgid "two" +msgstr "രണ്ട്" + +msgid "three" +msgstr "മൂന്ന്" + +msgid "four" +msgstr "നാല്" + +msgid "five" +msgstr "അഞ്ച്" + +msgid "six" +msgstr "ആറ്" + +msgid "seven" +msgstr "ഏഴ്" + +msgid "eight" +msgstr "എട്ട്" + +msgid "nine" +msgstr "ഒന്‍പത്" + +msgid "today" +msgstr "ഇന്ന്" + +msgid "tomorrow" +msgstr "നാളെ" + +msgid "yesterday" +msgstr "ഇന്നലെ" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s മുമ്പ്" + +msgid "now" +msgstr "ഇപ്പോള്‍" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "ഇപ്പോള്‍ മുതല്‍ %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8a8c29c6ef5b2870dcabbfef08acc74158136bd5 GIT binary patch literal 4613 zcmbW3U2GIp6vr>hhpr!J{Xj(J0#;hfbazl}yS0ecq9|2@#rQhx-fjnX@06L@7D!B> zO)Uv&(5MM&VtBw9;sccyMcNW2#>7P93{7}3;mKD&o_xR;|7YiRyB~KKF1#C!zv)Dp(J!A-Z~g3-Q|v5jB{*aBK$BRHYtQ%e4u;)-RA#j*dC zVhS{{{y_12uo>&WzzyK)<&pm`a2?hHB>A|Kf2lYR(*6Hc+_)n0^M>L(U?cXw0B-|- z0m;u5knVp?t(&k(>zyD64}njDpMnU9{RrYH>}SOgT#fY=@GWd5P$4dTuz`SdqAqupRp)@en)iP*A#tF zVE+@a17vqHwgpInJ>VeN4SucG*T811x7`)_+XvG61W0wbr1(2%VZHqB$lm}+aeM|o z4+h|KV8hC2y&G)A`a=*~>;l*c{sfZVvU?)-fE3Rd*hc#x=`Fc8%0m~3QnT$Kj?8+& z2JkI#4fr-lc^U_)UdKSn-+Lh0eXRCRf@FUR#F5z5N*e3dc zLHVRJ(=agCV?IHPlELx&amPaDiy@nQF6y-zi4Mc;;N~;Qr_GiGMr^0$ z`9_~>NiS>pj+^AKSW?;^-zjXQgFlOCu-uj{EL&~a?`(yQ%;c?%F#3d*OY&X^0cUO0 zscFFX2b1ym@bGY}Pd@E_aiBHj_j`i;7?O8m(*_w!TJJJ^taUC4Q z0e!T0d@yU-vXiFy%Mx`LCs8sYI^ zhSG}qj^ZRUIK@;rUVe`2t562uX}Zj=O6YNI=hYThw-z5{@Hrltxo{k>go$vB znH&!vo+UK!NO&xmLoy+ln?H?iRNw!a8dbKzG(8J=3MOk?m*|+(N9TeIg_po|t-IIO z(b$)GUyQ%XLx~oAyi1QQa`3JG^!oh@yAqEj_bv5YqCvI5-DVkH%9Fua7EIF%6p25J zv@QIvqgaRFB1|vh-yB`TBYaVZ8R20ToC}Yz1to?`;>8|qkl73wF}&_aQ5d|cP#Q8S o7)}+06aj9AlH*#4gwgwWK|MUm!ZF, 2013 +# Анхбаяр Анхаа , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:41+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Хүнчлэх" + +msgid "th" +msgstr "-р" + +msgid "st" +msgstr "-р" + +msgid "nd" +msgstr "-р" + +msgid "rd" +msgstr "-р" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f сая" +msgstr[1] "%(value).1f сая" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s сая" +msgstr[1] "%(value)s сая" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f тэрбум" +msgstr[1] "%(value).1f тэрбум" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s тэрбум" +msgstr[1] "%(value)s тэрбум" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f наяд" +msgstr[1] "%(value).1f наяд" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s наяд" +msgstr[1] "%(value)s наяд" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f тунамал" +msgstr[1] "%(value).1f тунамал" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s тунамал" +msgstr[1] "%(value)s тунамал" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f их ингүүмэл " +msgstr[1] "%(value).1f их ингүүмэл " + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s их ингүүмэл " +msgstr[1] "%(value)s их ингүүмэл " + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f ялгаруулагч" +msgstr[1] "%(value).1f ялгаруулагч" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s ялгаруулагч" +msgstr[1] "%(value)s ялгаруулагч" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f их өөр дээр " +msgstr[1] "%(value).1f их өөр дээр " + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s их өөр дээр " +msgstr[1] "%(value)s их өөр дээр " + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f өөр дээр " +msgstr[1] "%(value).1f өөр дээр " + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s өөр дээр " +msgstr[1] "%(value)s өөр дээр " + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f их шалтгааны үзэгдэл" +msgstr[1] "%(value).1f их шалтгааны үзэгдэл" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s их шалтгааны үзэгдэл" +msgstr[1] "%(value)s их шалтгааны үзэгдэл" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f эрхэт" +msgstr[1] "%(value).1f эрхэт" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s эрхэт" +msgstr[1] "%(value)s эрхэт" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "нэг" + +msgid "two" +msgstr "хоёр" + +msgid "three" +msgstr "гурав" + +msgid "four" +msgstr "дөрөв" + +msgid "five" +msgstr "тав" + +msgid "six" +msgstr "зургаа" + +msgid "seven" +msgstr "долоо" + +msgid "eight" +msgstr "найм" + +msgid "nine" +msgstr "ес" + +msgid "today" +msgstr "өнөөдөр" + +msgid "tomorrow" +msgstr "маргааш" + +msgid "yesterday" +msgstr "өчигдөр" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s өмнө" + +msgid "now" +msgstr "одоо" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "1 секундын өмнө" +msgstr[1] "%(count)s секундын өмнө" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "1 минутын өмнө" +msgstr[1] "%(count)s минутын өмнө" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "1 цагийн өмнө" +msgstr[1] "%(count)s цагийн өмнө" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "одооноос %(delta)s " + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "1 секундын дараа" +msgstr[1] "%(count)s секундын дараа" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "1 минутын дараа" +msgstr[1] "%(count)s минутын дараа" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "1 цагийн дараа" +msgstr[1] "%(count)s цагийн дараа" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d26a6d2238fd16eb83f32dc7923e4710c1415c15 GIT binary patch literal 3479 zcma)+ZD<@t7{{kJt$Mz;zErI*qit-`uy?njrrj8k#uob$EF~&}AltjS%f`Lk>&{#* zLBv&RA%ZUy+gcT^6vUvlifBWu`B1;AAmSGhVZpEUtDgk_&+c48a&tL{oBi$l=b2|_ zp6A*7b7Rj5hPEC3PIP|_V?*G@EAT-3bS-1sz*%qr`~~a<|JC}Io=o4b*#rxiKdbpG zXkol|T}B)1$M|`03pfLk|8wBI;BQ+0N9&u{XY(T2D9ph2(Zm=CdHJJE}Pg(z>5P%HL)1 zJ}`F;WA}g-Nct#9`UFUEdIRhOzt;Ri&#${Sv+DzC-F^^1HjW35#2T6}gSTQl15#Yi zfE&Si5I^=49%TQ!=3gMq{|(*%uDLE7Z_wPTIS9gp?bCb)yba^B9>1jdI*4$lcL34` zX|d5>6u-OBuh;5!knT?He)JpDx9mZCP~+$*CAJBj^0xtfGdjiM7IdoFJJ2b|bbo4e zUaBR^BQ=C_vE7U}iaXUJ<>@ALYLr8yDy?CZL>faNjSa<(YOd8NkF2+E()AmnKW|s~ zVbAxyFzBk4Maf`kR;yuH4gF;<4N}eE&!h!mV6Zf+VM!Tm&FYbcTaFCYopmoTc|X!H z>r&KB<{jlJv$auHrh~VMvMswNr9Fp|o3s@vl)Oz?nLWwdmG-y7WlQo- zYI~;0)}$KJBzXt1Ek$H$5Df`hl!R9uSFGYq3RVdl5er<^h+JQJHPO@CR~Ei<`z3d) zVTYMY6xI;PCJV|e@B+c;Jp`jNlVVZ?OnOsHDyGKqi-ce*EW6Wq*1{-)t!jpBT1X`# zk`G4VgeWO%Z`pcUL=yiH4lhr*K{d=B67?`r)~Kv{WouWXDy^~5;kkoPj#(p-a20H= z$6X~H{y@=w$ST^FJ;-g_DGm-4?P3vz)*&(Jkz?I4x zi`+o^t_mZE?{kB|ll*}25DxwbPJ`iNemcy1K_z??Yl3RStqN;QxHX6GYD6_51@9YI zs_qmD&1N&N$fH*gQ~6R@D`aD)n|5^e1XqndPh zP)~<)*dF59>u_->x9q<(iQi4)FOv9!^!Z*Af4gG(coN4+JfFm`wd}rYH+nURzf9t} zB*x2EN&FcWtZ;L>wHkXFc6ld>&n5BsB*sg28pAFhr_Mi5;tNUq_9}Kb@ApZ3B0V*Z z|9)4~qp4{Zug6+0SKAs!S+rI&!kqa`lCP2un(UGcGFdGZG~Y21G}$E$WYRqeWEKCP z6f7BbNdOsk3BNYMz9?05@X4et^l2&<((0aPNsNP_c<1nj4+51uhca&cU#53|B{hhb z$*5<@C|<;N0ZW04tx}EYQ%K{H)i=4;_ISf_@L7?8VNK=}DbXevuXJlzWsp9^2b-Qx dZw{BZ+J$Ua4B|9sCsX$r(s6*LpulBo$$wLrgq{EZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po new file mode 100644 index 0000000..a3fe48c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,234 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "မြောက်" + +msgid "st" +msgstr "မြောက်" + +msgid "nd" +msgstr "မြောက်" + +msgid "rd" +msgstr "မြောက်" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f မီလီယံ" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s မီလီယံ" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ဘီလီယံ" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s ဘီလီယံ" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f တရီလျံ" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s တရီလျံ" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f ကွပ်ဒရီလျံ" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s ကွပ်ဒရီလျံ" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f ကွင့်တီလျံ" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s ကွင့်တီလျံ" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f ဆက်တီလျံ" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s ဆက်တီလျံ" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f ဆပ်တီလျံ" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s ဆပ်တီလျံ" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f အော့တီလျံ" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s အော့တီလျံ" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f နိုနီလျံ" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s နိုနီလျံ" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f ဒက်စီလျံ" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s ဒက်စီလျံ" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f ဂူးဂေါ်" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s ဂူးဂေါ်" + +msgid "one" +msgstr "တစ်" + +msgid "two" +msgstr "နှစ်" + +msgid "three" +msgstr "သံုး" + +msgid "four" +msgstr "လေး" + +msgid "five" +msgstr "ငါး" + +msgid "six" +msgstr "ခြောက်" + +msgid "seven" +msgstr "ခုနစ်" + +msgid "eight" +msgstr "ရှစ်" + +msgid "nine" +msgstr "ကိုး" + +msgid "today" +msgstr "ယနေ့" + +msgid "tomorrow" +msgstr "မနက်ဖြန်" + +msgid "yesterday" +msgstr "မနေ့" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s အခါက" + +msgid "now" +msgstr "ယခု" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s ယခုမှ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9de6d5146702f44756d7d2f1da388ddf529386ff GIT binary patch literal 5358 zcmchZTZkOR8plhGi5U}*w|I?O>RGdsq<3d_6L&ModdbG19;1t_HxQwBr*^h8GgWJM z&2D1Mlc?Z>ayUlB3;JL<3MxK`22@a2P((o=L`3i$Z>Ucy2)+pV|GK~K>F()?KG{(7 z>+j$HuG?4DQ(v6A;*h|#3uQgZj$?&z!P{5h2iO0P7h)~=C3q_MBe(%PcBK%Tz>VMl zcr!@)-K;;u{0JO|{u^`iDj^)iw=*9A%ZQJF7lU7c8^Dz(2yr1e1d=`ll5Uw#fYkmw z%%4E2XZ`AkyFu#L0*FWA5s>P63Z(XzIsTdBbtNGr^ht0dSO+mw@eoK;aftaCNd0;W zr25_hsbAlM)ZW??BYl*43wQza10cQkI7q%X`1#kYuUZp5FN4(Hzrf?bDdseI65?B# z4e(6FiyS}5e3JP*^EKxC%+HwLGk*nXoGX!JYHtll@yX0HK$^ex{Coh!l!-F+q1~XA&%fO_20M%w@2O_-E$DCr9h$CXn=dL3;01km~u8 zd*MVO!e*r0vrPHH*bv8);4Iuf)K=NPB zyaOb^1=oW2fY_qq-ypU7F!NF76U?WX&oG~5KF@rK`7-ke^L6H%%y*dYfi%7kIQ|%< z@qYr+{Cy5mzrF#n)x~!pmPdGDiG>%9i#+t5xf}&k5neQ(8~J_&JR9Xw6r>>hcB}%& zP`0AbT+ww2N+rA#;-Abb!AX=+j;~;D19$L!jPr1_D-OWR_@34XU9^^H9ne^4-_kV{ zAzTMraDN60?QNPDy3R+TT+u~qi}Fc(6k9x;qtzg-u?dvzD0E#EA^EK(chL>yyoz!z z3gsK0nQ)&;kk;`y%1#uz&WRu}^XrpQ~Q7NjYVeZ-y=k+VQ7NKhhO-D$hpyGscdlcqaX@#dX19c|0O+fPSo zw5JnKYD@PRlV>h^Gi!7`Ut^@kHL@ppYhW;`F*YX8TrKBK$In+t8dt}L6f<6wamMmfQeLT?|l8a}vpU-GJ zAKK`qUyDmhHOWNm=h?5^uvf&aXTc5Z(MA?O??0~Car99ouA_`8_Vgc7?8uGB(@M}k ziUEyZ_q5xRl@$jLV)o*&iZHO&4Zwq@I< z%1EUGqjRHL^r+5^Z_F93guanY6YmJsW_8NUf)3osYbX!B( zTn3wNbliq=rj^^S$?J{3q#7Rf>rT^bFCT8n!Fg*JYQw`zOG`tRs`KX5zM)yu9*zbS zqs0{s>zUzlY0ou#uIdiGI#el5VmT>|F702y*epJG!wW6f)7$0jJeIn$6E{uocE-Ct zYHLpU&Q*HWV4*Z>a(u?KNr!7v&y=QGwDq0c#%~7@7Q!%?7}+kP+lfIfFPxCo^7c~d zToZV8q_TVJne$z#mk(#oAK@R7ixrhV`^2Kc7EK+A>MAHW79?uUo%le6 z&noM=H;!^>O*#4ak#M=)cRb#OMy*BZ&`TG<%Cnw)6323X@qN=rJv^wddW(oOcn?{uq+ zT(Q1<*jk*7R2xSmU(s=+?lu@Si}kRnn4u7!2P{d^U1Y=8Un_k7poVvm+G&P$0^zI6 vhtv3*TGF1N&-L, 2011 +# Jon , 2014 +# Jon , 2018 +# Jon , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-30 11:42+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanize" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f millioner" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s millioner" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milliard" +msgstr[1] "%(value).1f milliarder" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliard" +msgstr[1] "%(value)s milliarder" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billion" +msgstr[1] "%(value).1f billioner" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billioner" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrillion" +msgstr[1] "%(value).1f kvadrillioner" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrillion" +msgstr[1] "%(value)s kvadrillioner" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintillion" +msgstr[1] "%(value).1f kvintillioner" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintillion" +msgstr[1] "%(value)s kvintillioner" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstillion" +msgstr[1] "%(value).1f sekstillioner" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstillion" +msgstr[1] "%(value)s sekstillioner" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" +msgstr[1] "%(value).1f septillioner" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillioner" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktillion" +msgstr[1] "%(value).1f oktillioner" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktillion" +msgstr[1] "%(value)s oktillioner" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" +msgstr[1] "%(value).1f nonillioner" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillioner" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f desillion" +msgstr[1] "%(value).1f desillioner" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desillion" +msgstr[1] "%(value)s desillioner" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googoler" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoler" + +msgid "one" +msgstr "én" + +msgid "two" +msgstr "to" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fire" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "seks" + +msgid "seven" +msgstr "sju" + +msgid "eight" +msgstr "åtte" + +msgid "nine" +msgstr "ni" + +msgid "today" +msgstr "i dag" + +msgid "tomorrow" +msgstr "i morgen" + +msgid "yesterday" +msgstr "i går" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s siden" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d måned" +msgstr[1] "%d måneder" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d uke" +msgstr[1] "%d uker" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dager" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d time" +msgstr[1] "%d timer" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutt" +msgstr[1] "%d minutter" + +msgid "now" +msgstr "nå" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "et sekund siden" +msgstr[1] "%(count)s sekunder siden" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "et minutt siden" +msgstr[1] "%(count)s minutter siden" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "en time siden" +msgstr[1] "%(count)s timer siden" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s fra nå" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d år" +msgstr[1] "%d år" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d måned" +msgstr[1] "%d måneder" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d uke" +msgstr[1] "%d uker" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dag" +msgstr[1] "%d dager" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d time" +msgstr[1] "%d timer" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutt" +msgstr[1] "%d minutter" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "et sekund fra nå" +msgstr[1] "%(count)s sekunder fra nå" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "et minutt fra nå" +msgstr[1] "%(count)s minutter fra nå" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "en time fra nå" +msgstr[1] "%(count)s timer fra nå" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3bf4b7231f96e5cb00259207775ae9a3a656e169 GIT binary patch literal 2285 zcma)+&u<(x6vu}Wpe*56_*Enhu24imG}+k*NZAlnNLy5iKw1_gj_$5^cB)x>nepx> zCw@q@Aby=vK~vEnyj4{dD3z#+go@w-h!Y36R6;)R4{+eZ0r+~xGubBD1S|H(@A>iwJH_+5@)!Ki7_;dcY{0B5~I}l|2J3(U)TaJJ`Vehi*yTO}b zkAffJEJg4k*gqlYaqv&@8F1pp)E|TUV6RweZ~^w{O({E|S^vRu7@J}090G3zUj_@H z58eevcKsN5JM8zZ{V`~CXF!zXd}-}VAhvYA1BbyMt^ZeRYtTH2$-N8x4s@f-+P&Gt z@=ow>^jpwJtk2}X2i@FX){r)-!`S8=_o176HE&_=&(xkZQ#YPBIk)lMW`@zR4h`FE zJSIniFbo9W($n0a+30ztO>5Bx-R54oQJA|ZX$HJ48KJ&FQB~3Aayg)SG3rnmnp+>r9xhQBE479j#Ajd^VjG2@h zdeC7`9q|sQvK`S-22D0JI#y$$qFs? zM0SO<#A3-J<6elwQC5}i!J7LLi())?nbeL_?u)`<))J9)=VL#pxlgzK*sX{%DJ(o+ zapxjNCA987Dp{FKd8J2PujH1dNvTx!rYF3T=RxQmW}U#~T+>avCC~Myi8ob#VgBI!{io98&$aqitBc9_g;r;;3D|OR+3e7J zN2^b?`i5wANvk)sI&n>c|D!pvNu`-js}HnVM)I_hv$}U&tJAP?ybn<`HnYF!Ei?m@ zoYQJ$yCj(=PjWe_VL2I5&wDukfO@u8Zj&(ExBq~fC(M+2LR`$JNnxk8x-y`)L7IU{ zvR(S?S)U}+Xmw1hRpMv`&lRm+*XpFPPA1j`f>+D_6|KD_zCGQ0*U0d;U)!&;cN})| r34oWAaAhPbW>C8K8lub;`<((lOTNd8@WVKxd)W9bvz(?og;nQ2=C(DR literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 0000000..069cb56 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Paras Nath Chaudhary , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-10-07 02:46+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s मिलियन" +msgstr[1] "%(value)s मिलियन" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s अरब" +msgstr[1] "%(value)s अरब" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s खरब" +msgstr[1] "%(value)s खरब" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s करोड़ शंख" +msgstr[1] "%(value)s करोड़ शंख" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "एक " + +msgid "two" +msgstr "दुई " + +msgid "three" +msgstr "तीन " + +msgid "four" +msgstr "चार " + +msgid "five" +msgstr "पाँच " + +msgid "six" +msgstr "छ " + +msgid "seven" +msgstr "सात " + +msgid "eight" +msgstr "आठ " + +msgid "nine" +msgstr "नौ " + +msgid "today" +msgstr "आज" + +msgid "tomorrow" +msgstr "भोली" + +msgid "yesterday" +msgstr "हिजो" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s अघि" + +msgid "now" +msgstr "अहिले" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "एक सेकेन्ड अघि" +msgstr[1] "%(count)s सेकेन्ड अघि" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "एक मिनेट अघि" +msgstr[1] "%(count)s मिनेट अघि" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "एक घण्टा अघि" +msgstr[1] "%(count)s घण्टा अघि" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "एक सेकेन्ड पछि" +msgstr[1] "%(count)s सेकेन्ड पछि" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "एक मिनेट पछि" +msgstr[1] "%(count)s मिनेट पछि" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "एक घण्टा पछि" +msgstr[1] "%(count)s घण्टा पछि" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b5f7061073c92963b8ecaf3e24ad487249ff164 GIT binary patch literal 4092 zcma);O^g&p6vs|Z3!5AeWMiV`$H#PBK)Pw$CcTLYscWtDy)xW8Ky?#~w zUU$9yVcn{846TWNKl*#uF}4TXegiIOv#S`J1b2c{pa3VpSB?Im(Z4rbeIsLa%s*<_ z1|5vwFuVxXF#ZkP25!75^FIe}!B~Q%pEddg!z&=I|BvD1>denE!9mi;!)UT!>_@O7+(b+1b+vw2iM+`*{uU9R2vL8 zfi%AvB!63tUN!o5!@8N@VK@uIHG2vqf6svUW6$C8E^=}loW%IAN*3QOYqIA(0+QYb zDei9@er5E3!5Z|*TeJBiAdSy}bl(M#;&cU^0{;Xl58H0b^nD=dzTr8eUj!-MKN)?^ z?b&z+B!4f0_+w{qalqF=TJIB(_W3hN`&hr0v4_Fk;AYSRDgI{-Uom_gyc7DH;2q!x zAi}~v0x8ZPgB16RX8f6%|H6zfgA~_qjDFSdTaecK4qOfX2;voEzZm^jkn-{eNbA+n zX-wbCedz1Z@hEA#8&`T)8rd+t(mO+q)~4_40d#ubrqOAgd(j6Cp=1bu+UOa#o8J`Y zP3AYnaw|H;Y_xF<9zv&F4I0G@=}+T~*C&k=9)sP5PC2G{tw-O0PO%?t_h3Nzs-jaq z@!F-0VnuOc6V;vw5?PyWcK8WD2>ej}ujb0O#nP^NVd#aym`jV)wfM7XDpVFryBfB& z#n!H#OoSU*tXI~3W%GVAvFov1vYD?apR!w9Wo_GdNsLR`wJGHs#@wbAQW*1+P|RM; z%St(KF}G>uoW(iHO*#8QgL(jrqEldOaLnG!mQM4abj4|0yI~Z;R`)}8TE<#NBp;5#McLNQ0oQp!Mlp`Y z7Izng^1{kdxfDj)ITU-o>pY!!u`?gGc;)c(^Uj_~3JqIluh6o^cQl%hJB_B(oZ-!8 zt1&axXf_%!bdJiNPdC8*fZSlQ{ZZGiag4Ro|dcEK8 zPmkHxvj-d?FgMp#P_I=E9XPaa7>ed}qp~MdS}JVu^b(#`<4vzG1;SUmczZ!avD9c`ZJB!q@pGTU-T|!vSU8*&jyT7{XFIjOTXj;@Qu+s^VMb zc(b;vGFDh{!Ym4;dbFn5H1n00Y**3?hZ~hji$p7hc*TmV7q!7E*RH3v$+BC!jw)WV zwP|$Rls0S?%?VmEUP(`#6cb?;X3F0}Wc4odniU|K-#cPvrYwHVOv&-!jX zs+eW7qjJ7chy`byB+*9w>iLTuTx5i!U{JG$eg{eqg;OOAHA;Gj4t`!bf9X7)ku9f{ fYFWnkEgAkVl?=wN5FSIBB4gc0>GFK4QyBdR7spPR literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 0000000..f6237d1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,265 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Blue , 2011-2012 +# Jannis Leidel , 2011 +# Jeffrey Gelens , 2014 +# Sander Steffann , 2015 +# Tino de Bruijn , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sander Steffann \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Vermenselijken" + +msgid "th" +msgstr "e" + +msgid "st" +msgstr "e" + +msgid "nd" +msgstr "e" + +msgid "rd" +msgstr "e" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljoen" +msgstr[1] "%(value).1f miljoen" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljoen" +msgstr[1] "%(value)s miljoen" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljard" +msgstr[1] "%(value).1f miljard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljard" +msgstr[1] "%(value)s miljard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f biljoen" +msgstr[1] "%(value).1f biljoen" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s biljoen" +msgstr[1] "%(value)s biljoen" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biljard" +msgstr[1] "%(value).1f biljard" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biljard" +msgstr[1] "%(value)s biljard" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f triljoen" +msgstr[1] "%(value).1f triljoen" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s triljoen" +msgstr[1] "%(value)s triljoen" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triljard" +msgstr[1] "%(value).1f triljard" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triljard" +msgstr[1] "%(value)s triljard" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f quadriljoen" +msgstr[1] "%(value).1f quadriljoen" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s quadriljoen" +msgstr[1] "%(value)s quadriljoen" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f quadriljard" +msgstr[1] "%(value).1f quadriljard" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s quadriljard" +msgstr[1] "%(value)s quadriljard" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f quintiljoen" +msgstr[1] "%(value).1f quintiljoen" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s quintiljoen" +msgstr[1] "%(value)s quintiljoen" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f quintiljard" +msgstr[1] "%(value).1f quintiljard" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s quintiljard" +msgstr[1] "%(value)s quintiljard" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "één" + +msgid "two" +msgstr "twee" + +msgid "three" +msgstr "drie" + +msgid "four" +msgstr "vier" + +msgid "five" +msgstr "vijf" + +msgid "six" +msgstr "zes" + +msgid "seven" +msgstr "zeven" + +msgid "eight" +msgstr "acht" + +msgid "nine" +msgstr "negen" + +msgid "today" +msgstr "vandaag" + +msgid "tomorrow" +msgstr "morgen" + +msgid "yesterday" +msgstr "gisteren" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s geleden" + +msgid "now" +msgstr "nu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "een seconde geleden" +msgstr[1] "%(count)s seconden geleden" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "een minuut geleden" +msgstr[1] "%(count)s minuten geleden" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "een uur geleden" +msgstr[1] "%(count)s uur geleden" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s van nu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "over een seconde" +msgstr[1] "over %(count)s seconden" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "over een minuut" +msgstr[1] "over %(count)s minuten" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "over een uur" +msgstr[1] "over %(count)s uur" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..35956dd921dd0a4353b9ced9ffb1ff1432f489aa GIT binary patch literal 3482 zcmai$&2Jk;7{&)0K5D+pM=9lFN(qevKpZ(C@x1nUZSPKCl-b|TGtbWMyzlPo z{IPH51BNz_em{Ea8pf8uZ?DAx?ejg19Rat&1@I?u7W~KRhi8WRiB;N`JSEs5Tx}kTm56JU$Oku&Tm_O3El|**C4I; z9k>_#9{dEc{Sl;nv>{SlE`vwFAHX8`m(>pxhV##XKJ>2TXCTG*SFi%^y=iz|6{K}S zJANCa_km6dmY=GpC?YsnOosQLw)we8Pwezom6!+IbisxG(t@|#BRI~R%y5Ai7s6k5G zKAcfJ9zeg2^D1<9hI%sB_tMDft{~?$R&XTmzK|&<}S^ZEzNgR z^O+*AOLe44^IgPTipc2@9SKS$5l8EWHR7IN4b@GU3`{o(S|)Cbnc2Bev`kRcJc!gT zGmS*G5y(E1A(OEbjLsF9giMQ`kW9y$OdDp_@s|j}j0%G-9NQ{M;5B{4wuCk!A$cuP z8=`K!)1mjWNHi)$m4_RFj8x&g=%~bat2&B9@0o6-y_%}>!rHl-w~~m!!0SC57*XX% zEB@nN#rOP0?)%ls;zGr*RABVZi(X7?j(v+><%H*-;Qq1dW0i#pTH#EfjaN$osat_j zNtM44NEvH>M#KmQe*#Z~;nS_buoTONdJ@;js2fDWtBIgpvna_^K%+8RP< zFx1OOm-z5>c~0^}%iJ$66{d>o;42G|=*hx95`$z)4uy8qyj0D&GoLv9U<{>w6KcktCUDA~s#ET9_9o0@G2_iAl?Z, 2011 +# velmont , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "." + +msgid "st" +msgstr "." + +msgid "nd" +msgstr "." + +msgid "rd" +msgstr "." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f million" +msgstr[1] "%(value).1f millionar" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s million" +msgstr[1] "%(value)s millionar" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milliard" +msgstr[1] "%(value).1f milliardar" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milliard" +msgstr[1] "%(value)s milliardar" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billion" +msgstr[1] "%(value).1f billionar" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s billion" +msgstr[1] "%(value)s billionar" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrillion" +msgstr[1] "%(value).1f kvadrillionar" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrillion" +msgstr[1] "%(value)s kvadrillionar" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintillion" +msgstr[1] "%(value).1f kvintillionar" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintillion" +msgstr[1] "%(value)s kvintillionar" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstillion" +msgstr[1] "%(value).1f sekstilionar" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstillion" +msgstr[1] "%(value)s sekstillionar" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" +msgstr[1] "%(value).1f septillionar" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" +msgstr[1] "%(value)s septillionar" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktillion" +msgstr[1] "%(value).1f oktillionar" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktillion" +msgstr[1] "%(value)s oktillionar" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" +msgstr[1] "%(value).1f nonillionar" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" +msgstr[1] "%(value)s nonillionar" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f desillion" +msgstr[1] "%(value).1f desillionar" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desillion" +msgstr[1] "%(value)s desillionar" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googolar" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googolar" + +msgid "one" +msgstr "éin" + +msgid "two" +msgstr "to" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fire" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "seks" + +msgid "seven" +msgstr "sju" + +msgid "eight" +msgstr "åtte" + +msgid "nine" +msgstr "ni" + +msgid "today" +msgstr "i dag" + +msgid "tomorrow" +msgstr "i morgon" + +msgid "yesterday" +msgstr "i går" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s sidan" + +msgid "now" +msgstr "no" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s frå no" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c156f1a7e47a54138675d189243ac35223018867 GIT binary patch literal 3902 zcmb7_OKclO7{>?NQ0nq(c@$b66G~_v+SpqNX&k~Uv?8=oqbhJkTYKzmv3Js)b<*7O zpn+0}11POHAdo5{dO)NkRYIGj5*!O?SD{xVZd`iefCNI~|Jjp7iD#X5obhkw|2<}Q z=JV$FU0bIZS~L2S=!Lr&>jW3>#uwT*TNv99UIJUd2y6iV)B3)x75#|jFqnk>qUJJa zVZNoVLK|$t{5^0VcowAm--7kvO|Ac}^}Y90?A;)(|Gwr0kn;Sbc?)d7eD^lS5X!nh zEX}$#-vXb&ycc{L%!BlZliGe3#3Qj!G(Xk$^C0E>TBx{TX}#^9;l;@B&EZa}%_|Es2WWrm4Ul=$AGB1z*Sf&<=F)L$Cw<1*G_G z_f_T{U=!vFr2JoK{f1`U{gwDvHP3*wpBo_M-~Iq&ZQv0QN6W@QEX_Uwk%D~&J_dfJ zIS0}?{i^N1ffV-#NcZrkw%^kFUm)fCN9%PDR^oSnbbdQE_kfgVA4vYqT5kh!oU9Rj zrD5xf*9%C!kFJXX10=qy*-Gc;&u9C8XJ z(bQ_^_zAaAaHY4YmK7O;r&-NQnU{riDGgH5kk6!f(ldCPRhbD4zGn4Q$;tW#?|9wy zOxaJB%(@bTCihtRwAtGz2d0fziK^;$O-l70DsIv?T%qDs!p7TEyjrQgH^og_^_?kh z(oDCdc$`{&Q{-z>4cDZ2j97I=TCm4+-=x3P{L&9UqJvi(Xfa7DWu6OzmTL;(tXsw*^twUZ$W?e6z<_Ax>!Rj{CT&hH0 zfiBuQEd8QNb8oObRb2-h9CzR} zA1>C~O(j!pr)Vs^5?-&7<@Ow|Mq``h*u-VL#+gKMM#WbvbbY1OGQ`&>qG}qeix3e; z(Nuo$jgjMv4ly;2@dby-n#Rq_4Dq+^5?^AgS!%h|EHTAz#~fc=I=-eue0fz>UN}va z&Y};>uaVhsjzyEvx$rtZ)6pp2Su6iWQO?uhTsXTtwNA#bZ816*jV@1xKQId}Gn5OV zI&sCy!ue=Io8j|)ILnadOf-hDIjvh5FOWPMjW16zxLu|_F&x(t4B;%6nTRIHG*>Ai F_CFHWc^m)$ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po new file mode 100644 index 0000000..186ac89 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "-ӕм" + +msgid "st" +msgstr "-аг" + +msgid "nd" +msgstr "-аг" + +msgid "rd" +msgstr "-аг" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f милуан" +msgstr[1] "%(value).1f милуан" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милуан" +msgstr[1] "%(value)s милуан" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f биллон" +msgstr[1] "%(value).1f биллион" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s биллион" +msgstr[1] "%(value)s биллион" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" +msgstr[1] "%(value).1f триллион" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s триллион" +msgstr[1] "%(value)s триллион" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f къуадриллион" +msgstr[1] "%(value).1f къуадриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s къуадриллион" +msgstr[1] "%(value)s къуадриллион" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f къуинтиллион" +msgstr[1] "%(value).1f къуинтиллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s къуинтиллион" +msgstr[1] "%(value)s къуинтиллион" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстиллион" +msgstr[1] "%(value).1f секстиллион" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстиллион" +msgstr[1] "%(value)s секстиллион" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септиллион" +msgstr[1] "%(value).1f септиллион" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септиллион" +msgstr[1] "%(value)s септиллион" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октиллион" +msgstr[1] "%(value).1f октиллион" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октиллион" +msgstr[1] "%(value)s октиллион" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нониллион" +msgstr[1] "%(value).1f нониллион" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нониллион" +msgstr[1] "%(value)s нониллион" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f дециллион" +msgstr[1] "%(value).1f дециллион" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дециллион" +msgstr[1] "%(value)s дециллион" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гугол" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугол" + +msgid "one" +msgstr "иу" + +msgid "two" +msgstr "дыууӕ" + +msgid "three" +msgstr "ӕртӕ" + +msgid "four" +msgstr "цыппар" + +msgid "five" +msgstr "фондз" + +msgid "six" +msgstr "ӕхсӕз" + +msgid "seven" +msgstr "авд" + +msgid "eight" +msgstr "аст" + +msgid "nine" +msgstr "фараст" + +msgid "today" +msgstr "абон" + +msgid "tomorrow" +msgstr "сом" + +msgid "yesterday" +msgstr "знон" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s раздӕр" + +msgid "now" +msgstr "ныр" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s енырӕй" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..84c657162485315c55e064536eeb7e51e8a233e1 GIT binary patch literal 1569 zcmb7?O^g&p6vvAX6!-NdnYjq)$hH3y?U>z zX6~$6K1VRt!rp*ghrJ0qumlsvU2p?<&-3-AgcJ~e0ImZ+2A=`H2A6|#o<~7^WZuUo zz-5R}d!7ODkqemI{spgJ_WIABSN-}gp1*-BkbeVo_5J{#2XBGLamGKvGUCs07{^~d zm!ioC;w_-d-|zW}=U3pf(7*AV_xdT%i(dc9$Jc!PyN_>r-UeSpoxgm1-^YK0u6}@N z6}TF7Pwcc;Vb8(bx!mvIhRbpH!*$3?*b6XM*S+y;FgIR-t%e1#HL#apgT~7c(Z2U? zWc|=IPurqUjOuheNz+8hr)tdsd4n{g2P8fsX7u5`eMKaVNki(%v>b5m)JT+>lxR%AwKCs(wZ5)+2)tg(GUXSi}q zYg1e{RIo?1ls0TEYa})HVY`vBs)}h)*{5onWfw)9n+7vlu1T+iKHe{`W{Y$ za7)??i;1kO_pwJd+PooHRq$p^D_l7rX6lJu=IjS8c| zfBt|rKWp==HeayagEs%v=K23yKL6z1Pg$O~`Nb#ne(Z8aZT{HO0~g)hx|eKzoY?$( z+eO!7@Q&L23XTBp7(5`i-7kP2ZTFDPzk_$Aw`;DSak(d)gz&BH9sw45H4el3;emJ3 hy^3p+Ltbp`+MVlV&n@mdWxJn4Lxf}D`M*S4@(;XU>|6i< literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 0000000..d37c9ae --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,263 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "ਵਾਂ" + +msgid "st" +msgstr "ਲਾਂ" + +msgid "nd" +msgstr "ਜਾ" + +msgid "rd" +msgstr "ਜਾ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f ਮਿਲੀਅਨ" +msgstr[1] "%(value).1f ਮਿਲੀਅਨ" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ਮਿਲੀਅਨ" +msgstr[1] "%(value)s ਮਿਲੀਅਨ" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f ਬਿਲੀਅਨ" +msgstr[1] "%(value).1f ਬਿਲੀਅਨ" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ਟਰਲੀਅਨ" +msgstr[1] "%(value).1f ਟਰਲੀਅਨ" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "ਇੱਕ" + +msgid "two" +msgstr "ਦੋ" + +msgid "three" +msgstr "ਤਿੰਨ" + +msgid "four" +msgstr "ਚਾਰ" + +msgid "five" +msgstr "ਪੰਜ" + +msgid "six" +msgstr "ਛੇ" + +msgid "seven" +msgstr "ਸੱਤ" + +msgid "eight" +msgstr "ਅੱਠ" + +msgid "nine" +msgstr "ਨੌ" + +msgid "today" +msgstr "ਅੱਜ" + +msgid "tomorrow" +msgstr "ਭਲਕੇ" + +msgid "yesterday" +msgstr "ਕੱਲ੍ਹ" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "ਹੁਣ" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ac8cde4a45f483cdfe233b82d2218743c134ca80 GIT binary patch literal 7018 zcmds)Uu+yl9mj`Y5;z)~wrOcefGNa@FUi?^XQ#2xKBv@app<|WOj=OYvbh_d*S_1i z?(X?=m-LMa303e^q|l;9h)2W=5{iTnG<78eFFb;T5PyWk3j&@H5)XWTJG1|19iCZf z{h9gBZ@%;2JNNqsr(S1xF5*3ocjW+MHu%C6{^0q;`xrY6{tqXAdz}L;eNLZ-7zdyI zsb6n_tKXjieuY%Oxv*3Hdb><7M>HP+Y5tDu@@WuL z#;V{6?3H;i?AQIM3%v_o1p{ys{1tcwY#dR16}*Q0Z$K(vet@x;!0&-n?*KO0i{O{R zuYh-S{-K8$`#ka`FAf30rffQf)h>EX*6u$vd{0)%ee+W|i??7xd_HU5dpE{;k0crh?XdcykRP(qd z*F2#)qj^@-(p=D71ZjLL;304g4ELwbuY=T&=Rs=!MXg^0--A3ov@htv5-@C;a2yvv zEMfT2`JuU@hsKO4VNc-2(ue;$sNM5;&*8;(3LlyyOQ%n0ehOT}JFoLkYA%5*IvwGo zNL-9E;Hpla(X4`J@zU7o+|o0v5T5%5q_K6vvrY3s53M7e1$w6OVvC1ol=c^$Av!lR zcw2av@zV1Nh4^nXPN@Wr7pvpNbcXXwYmcMCI9}Qpi+G>HOAoe0_}~bHYl1C`j?8pK zFR-gVx4SZx+w^3gyK)3+*X|8Pb+*3AuQ|P*Bi(yy9nm&Kn$@n9UD?Z68l=9#&!oB1 zHAI?K*$xb`X7%Nv-SG_3<+|gV++QA=bzclj;id9*bF@(oOdT(XeqnV@N^uQ+Zqjl~ z=<|Y*Up=1}mEyYj*pvAc_IYv5%$jMnd|sv&SBhdys$rRYULqEjh$0Q5VS!@lGsC{^ zIupTcOqx3kgg(4&Idp@nfA_Xh)tQcCQb)QF7?;`TO^p$u4Ar&t3JAXFp_L6{6Kgl zuX}P^w1e6+o!V95`S@Nod1u>pyRvdc45Sy-F8f`lQ+sOI^=lil$t&w$*r=^}!VVBy zyJ!cZ$s1OEv1XmC)z9;Ky}7V-#%fp=0&7>qu0x*rxFv2`O>6#)g{Sg4Y?s=GXS;sS z4y4!Q{g>>vBX;;opSV3Mdpq*UZr^r#vu)X5MFqDzw7a6VA?$vWugjj}Z}FL}AQ&{~ z=0>B@Y(Q?#rnpWO=G1s1^mOgHL2s^Fx%|xKr<0M_XRXQ_c9U??qwxSk3-I3#k+$P5 z^Y#{Yx(Hfd+PG9(Oya1mP2ts^cH0vBq}$|+*PI~kWs?tjmGvH-{Msey_5CJy2VvH4 zEi9vuN?J2+t5xS0xW$`%#+|NPtE~nnORv>!{>D zj`~s1YRgJ0*Q*q-P0uCzQlg_Zxa#K6p0aJgcD}k?NnNx8(I2vj&Etz$<|>45qGMxk zr*C0e!~eL{)l7@;{3v^4E0K3b_>7H<)+s$}pDM^Vu}@L%qfb{zC5cSmm6rE4t2Ch8 z4OB_l{wghRX;z~F1F} zQ>~=uB9gLQGOO{qOU**8rA=co>za{y^iA`5*jje8MpD`}(z2#zHCf_RU-O5RrcQkw zi&L7`^^Y*Sy=}AbR=s!Y?(Ohvp8EX~7L0M{!ACwX@2BEIpgnOnxO+RUs?@PbG-|%s z8M>XlTZOh%L9u5_F9}yN`WD&d+SH~-)hu>pXX3b~nNua>;*_d_d+6w6WSwpJ?rm*s zmP=IWJEG49&fcxPue0_9H+^hD{Lq{@;@z)>Dc30??g2uhR^udvE0I#sVn@l)J{03p zl@PwO_i8(x#(!9tD;Eh*i|K}Hbrh{GMPsF=#VA}-VWXxdeJN7o)9tNIdosrE( J?TPfD{1=pu=r8~P literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..edec426 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,483 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Adam Stachowicz , 2015 +# angularcircle, 2011 +# angularcircle, 2014 +# Jannis Leidel , 2011 +# m_aciek , 2018 +# Piotr Meuś , 2014 +# Roman Barczyński , 2012 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-19 00:03+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Humanizacja" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f miliony" +msgstr[2] "%(value).1f milionów" +msgstr[3] "%(value).1f milionów" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s miliony" +msgstr[2] "%(value)s milionów" +msgstr[3] "%(value)s milionów" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliardy" +msgstr[2] "%(value).1f miliardów" +msgstr[3] "%(value).1f miliardów" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliardy" +msgstr[2] "%(value)s miliardów" +msgstr[3] "%(value)s miliardów" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f kwintylion" +msgstr[1] "%(value).1f biliony" +msgstr[2] "%(value).1f kwintylionów" +msgstr[3] "%(value).1f kwintylionów" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s kwintylion" +msgstr[1] "%(value)s biliony" +msgstr[2] "%(value)s kwintylionów" +msgstr[3] "%(value)s kwintylionów" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kwadrylion" +msgstr[1] "%(value).1f biliardy" +msgstr[2] "%(value).1f kwadrylionów" +msgstr[3] "%(value).1f kwadrylionów" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kwadrylion" +msgstr[1] "%(value)s biliardy" +msgstr[2] "%(value)s kwadrylionów" +msgstr[3] "%(value)s kwadrylionów" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f trylion" +msgstr[1] "%(value).1f tryliony" +msgstr[2] "%(value).1f trylionów" +msgstr[3] "%(value).1f trylionów" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trylion" +msgstr[1] "%(value)s tryliony" +msgstr[2] "%(value)s trylionyów" +msgstr[3] "%(value)s trylionyów" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f tryliard" +msgstr[1] "%(value).1f tryliardy" +msgstr[2] "%(value).1f tryliardów" +msgstr[3] "%(value).1f tryliardów" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] " %(value)s tryliard" +msgstr[1] "%(value)s tryliardy" +msgstr[2] "%(value)s tryliardów" +msgstr[3] "%(value)s tryliardów" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septylion" +msgstr[1] "%(value).1f septyliony" +msgstr[2] "%(value).1f septylionów" +msgstr[3] "%(value).1f septylionów" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septylion" +msgstr[1] "%(value)s septyliony" +msgstr[2] "%(value)s septylionów" +msgstr[3] "%(value)s septylionów" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kwadryliard" +msgstr[1] "%(value).1f kwardyliardy" +msgstr[2] "%(value).1f kwadryliardów" +msgstr[3] "%(value).1f kwadryliardów" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kwadryliard" +msgstr[1] "%(value)s kwardyliardy" +msgstr[2] "%(value)s kwadryliardów" +msgstr[3] "%(value)s kwadryliardów" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kwintylion" +msgstr[1] "%(value).1f kwintyliony" +msgstr[2] "%(value).1f kwintylionów" +msgstr[3] "%(value).1f kwintylionów" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kwintylion" +msgstr[1] "%(value)s kwintyliony" +msgstr[2] "%(value)s kwintylionów" +msgstr[3] "%(value)s kwintylionów" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kwintyliard" +msgstr[1] "%(value).1f kwintyliardy" +msgstr[2] "%(value).1f kwintyliardów" +msgstr[3] "%(value).1f kwintyliardów" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kwintyliard" +msgstr[1] "%(value)s kwintyliardy" +msgstr[2] "%(value)s kwintyliardów" +msgstr[3] "%(value)s kwintyliardów" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googole" +msgstr[2] "%(value).1f googolów" +msgstr[3] "%(value).1f googolów" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googole" +msgstr[2] "%(value)s googolów" +msgstr[3] "%(value)s googolów" + +msgid "one" +msgstr "jeden" + +msgid "two" +msgstr "dwa" + +msgid "three" +msgstr "trzy" + +msgid "four" +msgstr "cztery" + +msgid "five" +msgstr "pięć" + +msgid "six" +msgstr "sześć" + +msgid "seven" +msgstr "siedem" + +msgid "eight" +msgstr "osiem" + +msgid "nine" +msgstr "dziewięć" + +msgid "today" +msgstr "dzisiaj" + +msgid "tomorrow" +msgstr "jutro" + +msgid "yesterday" +msgstr "wczoraj" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s temu" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rok" +msgstr[1] "%d lata" +msgstr[2] "%d lat" +msgstr[3] "%d lat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d miesiąc" +msgstr[1] "%d miesiące" +msgstr[2] "%d miesięcy" +msgstr[3] "%d miesięcy" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tydzień" +msgstr[1] "%d tygodnie" +msgstr[2] "%d tygodni" +msgstr[3] "%d tygodni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dzień" +msgstr[1] "%d dni" +msgstr[2] "%d dni" +msgstr[3] "%d dni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d godzinę" +msgstr[1] "%d godziny" +msgstr[2] "%d godzin" +msgstr[3] "%d godzin" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutę" +msgstr[1] "%d minuty" +msgstr[2] "%d minut" +msgstr[3] "%d minut" + +msgid "now" +msgstr "teraz" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "sekundę temu" +msgstr[1] "%(count)s sekundy temu" +msgstr[2] "%(count)s sekund temu" +msgstr[3] "%(count)s sekund temu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "minutę temu" +msgstr[1] "%(count)s minuty temu" +msgstr[2] "%(count)s minut temu" +msgstr[3] "%(count)s minut temu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "godzinę temu" +msgstr[1] "%(count)s godziny temu" +msgstr[2] "%(count)s godzin temu" +msgstr[3] "%(count)s godzin temu" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "za %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rok" +msgstr[1] "%d lata" +msgstr[2] "%d lat" +msgstr[3] "%d lat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d miesiąc" +msgstr[1] "%d miesiące" +msgstr[2] "%d miesięcy" +msgstr[3] "%d miesięcy" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d tydzień" +msgstr[1] "%d tygodnie" +msgstr[2] "%d tygodni" +msgstr[3] "%d tygodni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dzień" +msgstr[1] "%d dni" +msgstr[2] "%d dni" +msgstr[3] "%d dni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d godzinę" +msgstr[1] "%d godziny" +msgstr[2] "%d godzin" +msgstr[3] "%d godzin" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutę" +msgstr[1] "%d minuty" +msgstr[2] "%d minut" +msgstr[3] "%d minut" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "za sekundę" +msgstr[1] "za %(count)s sekundy" +msgstr[2] "za %(count)s sekund" +msgstr[3] "za %(count)s sekund" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "za minutę" +msgstr[1] "za %(count)s minuty" +msgstr[2] "za %(count)s minut" +msgstr[3] "za %(count)s minut" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "za godzinę" +msgstr[1] "za %(count)s godziny" +msgstr[2] "za %(count)s godzin" +msgstr[3] "za %(count)s godzin" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d9bed57684daf9985dd04bb5124bfaf579caeb17 GIT binary patch literal 4154 zcmai$&yN&E6vsW~OnbYUrxo1rp=Y zlZlBMV!TK+G10_}@t_AItns2A3<-(R_#Y@9jU?*#b=S=9bl1kp)O@zS_4-xSdp-5` zx2@~mWoUKuJ?J0Z!Ps%|z+L!4n_0)$ICun{1O+$-zUlPOo&JmC`nwscVt(4O2?iLy z?RX8G!1xyU7`XGE%>OL74`T_E{)W>(b-V%6`nMg&*JplSc6<#S!~DnK2JlCa{M-a- z{lDF~j7b`w0y%gYd=h*g#Fp51AdbR*aQq3}iSbSFQSeXjPH^+a%x)`4q1x`a8>IQY zAo<(x^s>_rI9A>Kl;aEt*X$Tb{+=vpSjPBP3Aq7x+?$J?AyHd-B={LPI)F`L)`+5YO;#EPXbL~JMG=!2N{At5-X`E>=hE8XuMlsuu zPBC8HI0lqQit(Ur!5>I}`g@~X&^Zw%_8>atnBuezeLMPI^wsTQ493wZC-ghQYnL{P zCB=u0l@~=fkrS1Ai=T_S-AJqd)k4|ySo+nr)@|J#ap{qI9)CVfY2~r>tGa1Dwtn?O zBEr~Xy|x}HpZ5!iUpKPvGhb7_=(qOD*0=G3XbRc&Da9Nb?$dH9G`t|>vuAiwDdx>^ zpH|G7;XcimEyLGRiX|2bpS8d1%v$br0cN@)-{21a{NZD$IM#)PYB5Gkj{*(gVZcoKU=@lQ{2?H0RD4 z44+u#EwdWV$f(`1tQ9Rv*242l37f>CYonfAH&za1*NTbEsefkZNQF#AN-_$E2IG(! zxhNGg(M4t~vmJb5DVf!wxPdc9FQJXx#P zYA_7W$i;|!uGk$8YDa>pX7CHuo9`3K89yhI}vReEJ)F7@Of-BX(!T1UhY`iZ&a&GOG_0?PNSB*SZV5BH9OV- zUFV_Nx7CT#>654DRsvA3)Jn&-vQlAVm-;xN#rs|DcSWR*@@7ZGM%vl43nzk^6+2q1 zCF5XDHFX%Nc7xBHi|lZx4c@n<`7Y%;IHBX7X>ip~hh}!_D9`?!Ei1lnme(hamPX16 zs#di8A^ko^Dp|Drg)}2#dXW`Ootih!U1(GuJreG;PJZoF%ezajwZhs?%^Rn8Tfx|= zd1H6I70jX2g;ETIyW>0$q<3HOf$XL$*bn6VhO+CgqXPpj34Q>Uz6 z-W98ynJ2@Zf|bi|TCYZO>y**;ig|S^|LT*JMa^!ayFo&^RExfKLzT`UGWq%*DTg=Rd?vqwCxQ+uW(t64L`y~xrW z(>*pUbXg!)3A`_28^!pajOuMH*!8ba<4`WMQPLv;_piiPWN3g7ynKRKqn0s&e=P7) MvruD}F7Y1w4;oi}qyPW_ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..095ea1d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,265 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jorgecarleitao , 2014 +# Nuno Mariz , 2012-2013 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +msgid "th" +msgstr "º" + +msgid "st" +msgstr "º" + +msgid "nd" +msgstr "º" + +msgid "rd" +msgstr "º" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milhão" +msgstr[1] "%(value).1f milhões" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milhão" +msgstr[1] "%(value)s milhões" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f bilião" +msgstr[1] "%(value).1f biliões" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s bilião" +msgstr[1] "%(value)s biliões" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilião" +msgstr[1] "%(value).1f triliões" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilião" +msgstr[1] "%(value)s triliões" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrilião" +msgstr[1] "%(value).1f quatriliões" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrilião" +msgstr[1] "%(value)s quatriliões" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintilião" +msgstr[1] "%(value).1f quintiliões" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintilião" +msgstr[1] "%(value)s quintiliões" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextilião" +msgstr[1] "%(value).1f sextiliões" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilião" +msgstr[1] "%(value)s sextiliões" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilião" +msgstr[1] "%(value).1f septiliões" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilião" +msgstr[1] "%(value)s septiliões" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octilião" +msgstr[1] "%(value).1f octiliões" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilião" +msgstr[1] "%(value)s octiliões" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilião" +msgstr[1] "%(value).1f noniliões" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilião" +msgstr[1] "%(value)s noniliões" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilião" +msgstr[1] "%(value).1f deciliões" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilião" +msgstr[1] "%(value)s deciliões" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "um" + +msgid "two" +msgstr "dois" + +msgid "three" +msgstr "três" + +msgid "four" +msgstr "quatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "sete" + +msgid "eight" +msgstr "oito" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "hoje" + +msgid "tomorrow" +msgstr "amanhã" + +msgid "yesterday" +msgstr "ontem" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s atrás" + +msgid "now" +msgstr "agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "há um segundo atrás" +msgstr[1] "há %(count)s segundos atrás" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "há um minuto atrás" +msgstr[1] "há %(count)s minutos atrás" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "há uma hora atrás" +msgstr[1] "há %(count)s horas atrás" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s a partir de agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "daqui a um segundo" +msgstr[1] "daqui a %(count)s segundos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "daqui a um minuto" +msgstr[1] "daqui a %(count)s minutos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "daqui a uma hora" +msgstr[1] "daqui a %(count)s horas" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3c4f1096c3b3ce14bffbf730a5427a9ddab55ea GIT binary patch literal 5425 zcmb`JTZ|-A7{?FBVC=fB#j-e-VR~n4x_kCE+k3Hg*M_i6HskWJ38m{ycdhO^y;Y}Y zcC39M5s3#pun#U-LOdYegb)u554;dBE)j7F5gx3B2$Asrs=lu7t~$LEagtNN`o8*~ z@6@U9oI2;rbA}!lD7#QsqHZ}+2p8NpgbT`7CkwF@{2Dw5{29CoJaJfvad0&_3f>Bm z|6cY#&-@51!v7a@%_%}Su=g<^0t>KT2QLS|0j~mwPZi=aZ~`R%G)R8Kdk1i6bDzISNw$i){bG_VN)SB>X$U)u0DrsNxZjKE>nACqR0yqaek5 z8>IL84y68;o}T#EGH(Mfh5ryp?Vbcl_ZC0@mi?zJNuC!#>hA{dBygHJ1D*lO-;zRY}+`2q7Y<`2x@K^o^Ul1%+A0m(j#c^*jLZzVq;1@Xy50es;EA=ZLt z!u}jDcMGxdtqPG~Rt6`R`}{OUzHf68tBhm2d+%0lUUL0A z&rZJAHjw;xg5-aI`3gw=f5IHX#yE_&Rts_zgG?u39F)0*+d$GQejf7k``CUA zL`d-*NV?ZR>i1oc`h6e7k`*7a|6}GS%rBT2z!kqM{b%SK)3~V6`k~xVnM7TIx&f8GTM?DwZ$w>> zis=#;%0-FqDgRU`Pdic9l7X^4z6!Akq@4AZi(%~Qactvz$~hI93u{m*rJC&Y7bXx$U7Vu}$Q~W@RKvK1NV+xMW6g%TDFZzZ*PPpEtHMNi zR^H_|8omzx)#s_IMQQiew65t!Ur39qX^Cg^1v;=O?Ot6q7OmZTpzV60MLpQ>2e#-3 z+ID}WS~mGW_d&bb>Nd6)&pD%9c5R+~4kKyvWl|W)oFkjPNaj8HyhWIk*$hWApEJA9 zmaRw*^5!!|TASCBrbrHO=2ApTi_?;z)OB6E=?4BiO1SuFLE9)^yj9%}Od)#bnZ%o{ z=~UCRq;tabnTxln>cGoJOuU_ltVvsqj-?Sh!t|LN$hvNa*?{EZa4bk$^h8Tk=@aGG z>PF1^b4tvjy$D>>4&8?Fo64DO<6aGodeUIcuVa>BMy6|)*U0iD>e_zUB+S4|W%M-cn(O+->-)_O{pQAgbE@Cm zl$ep4Q-O&5gTmB9rG(Km#f)z1FvNh&ycP>8GAbnZbg1{Ms&TIOoLf~GVZW?MZ@(MV z^vGV-(xGwoL^a=YcC>4eGoveVWcubAXJ@Ef1Ff^mHL4;fOXVr2wB9Lil;v_|-KO!< zWT^z9vscae6thpa(J60|<*7=!JYGT>xe?RFnF-w>YPd#+6?wZ~)pA;ya6xW4i2I2a z-EXfoUB59=)y-{a64csmO*u2lZC2zo-m_h6t4PVQ9ie-V-zdnjx-qRvu{b|JKVc}i zKdTN>>tZsz4jLS)*fMwQ*jp@&?74o=wcT$~o+yp%#QahL-f^LY!5aMkimit02b*QJ zj=8VQ)>~$FJ5ya9bvLU*=h~pEF>`7aIdzwB(zmY2xUZ4v2K^44-8yVW6&bW*Guk@2 zSthqz#{#)cmJ6Flx|75hbEOrh+IcYwFk<8_<^2Dm6)N$mIsqLIPy{AK|+lb>qk31C8Ti@*{6I#i7IRyzw6{*prlqlphI9 W8w{?FO, 2014 +# bruno.devpod , 2014 +# Eduardo Cereto Carvalho, 2012 +# semente, 2012-2013 +# Jannis Leidel , 2011 +# Sandro , 2011 +# Xico Petry , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-19 18:11+0000\n" +"Last-Translator: Xico Petry \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "Humanizar" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}º" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}º" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milhão" +msgstr[1] "%(value).1f milhões" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milhão" +msgstr[1] "%(value)s milhões" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f bilhão" +msgstr[1] "%(value).1f bilhões" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s bilhão" +msgstr[1] "%(value)s bilhões" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilhão" +msgstr[1] "%(value).1f trilhões" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilhão" +msgstr[1] "%(value)s trilhões" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrilhão" +msgstr[1] "%(value).1f quadrilhões" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrilhão" +msgstr[1] "%(value)s quadrilhões" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintilhão" +msgstr[1] "%(value).1f quintilhões" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintilhão" +msgstr[1] "%(value)s quintilhões" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextilhão" +msgstr[1] "%(value).1f sextilhões" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilhão" +msgstr[1] "%(value)s sextilhões" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilhão" +msgstr[1] "%(value).1f septilhões" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilhão" +msgstr[1] "%(value)s septilhões" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octilhão" +msgstr[1] "%(value).1f octilhões" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilhão" +msgstr[1] "%(value)s octilhões" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilhão" +msgstr[1] "%(value).1f nonilhões" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilhão" +msgstr[1] "%(value)s nonilhões" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilhão" +msgstr[1] "%(value).1f decilhões" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilhão" +msgstr[1] "%(value)s decilhões" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "um" + +msgid "two" +msgstr "dois" + +msgid "three" +msgstr "três" + +msgid "four" +msgstr "quatro" + +msgid "five" +msgstr "cinco" + +msgid "six" +msgstr "seis" + +msgid "seven" +msgstr "sete" + +msgid "eight" +msgstr "oito" + +msgid "nine" +msgstr "nove" + +msgid "today" +msgstr "hoje" + +msgid "tomorrow" +msgstr "amanhã" + +msgid "yesterday" +msgstr "ontem" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)satrás" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%dano" +msgstr[1] "%danos" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%dmês" +msgstr[1] "%dmeses" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%dsemanas" +msgstr[1] "%dsemanas" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%ddia" +msgstr[1] "%ddias" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%dhora" +msgstr[1] "%dhoras" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%dminuto" +msgstr[1] "%dminutos" + +msgid "now" +msgstr "agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "um segundo atrás" +msgstr[1] "%(count)s segundos atrás" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "um minuto atrás" +msgstr[1] "%(count)s minutos atrás" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "uma hora atrás" +msgstr[1] "%(count)s horas atrás" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s a partir de agora" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%dano" +msgstr[1] "%d anos" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%dmês" +msgstr[1] "%dmeses" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%dsemana" +msgstr[1] "%dsemanas" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%ddia" +msgstr[1] "%ddias" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%dhora" +msgstr[1] "%dhoras" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%dminuto" +msgstr[1] "%dminutos" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "um segundo a partir de agora" +msgstr[1] "%(count)s segundos a partir de agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "um minuto a partir de agora" +msgstr[1] "%(count)s minutos a partir de agora" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "uma hora a partir de agora" +msgstr[1] "%(count)s horas a partir de agora" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a91e3d1da5b96e0bc5e7bf4b6f4c200d2725c84 GIT binary patch literal 6229 zcmdUyO^h5z6~`-%abSrdBsk&2khWo+8LxYHX4mW89W$|G$0ku?SXrCE!I$<-?QA;~Tk?+4!n9|3pl z5@H5C2u_2~f}~$%{TIwXfpgG5Vjj9j2p8pZ%TmZajlRJA7WgpqD~zvo_4-vp_@r@*_x zRpuJ_DU`p>9Dom@yvgMkm_KFylKBSn56rii|6qOq(mZ!zlc~RZK`P(Jd=RAd+spOS zAeKxt!C&1a!~#g;dK*7@6z_q@!GD9Nz+;~l;wboC@EG_eNcvs(8Gapn3gz#EPk?VR z_kYHep94=oe--S2AAsa%9>KT>hTsbL3P}1p%>54-|K~w!{|fV;%-PQ()}dbnX+FOO zkAts+&cwG{f{33V*TmXLq z;!oVh57~dj+=ERe`&p3ezX6i{1(5822Gah#22z~70n#{r2hu#Y!5!cqx%_A5UzoR< z?=nAR-i<*}``yfknEOB+T`>bvzw;pVyA0x}iZ0im0%;sibNwoa@X!e%rW2M-kB#0l zw8q#9o#^}=AYyWO;`pr@Ci$&9+;SQ>RvUifnDFWt$?WMyzZRSz1KP24&I{$;b=* z=cVwlXh9N7KD<4Z1aULE`La>Xna*r-N4jE|)p;0APX+z5N28`5*(Pf>-N-zqhFP5# zI2$Sn%MM9ncWjWg$aynXS&j4u8?jjTH>Frddl7hX5_-efA4zvT!L!^s-FN!lWnmE2 zSdd#X(e7((%o>svuV$T{3gQiIMh|s8Zb|tZ84>GjE=y03ideK6dr^F+nWgph^GYr5 zJgdy=4s%Lv>SvT%l;-0HQqUJgfhz3#fj4woJFi^B>ZQdticvf%whuY&dE|wn**uCt zKQp7+a8f*6G+rzgj}(hb#o}_YxMGTt+?0Wc{7WL<2&ELUq7aMKNQEIL6mKbUSw^u8 zNnQ=r1=)+;C;RTRGK}!O>^S`kUNBHoXXRLhv3n*O_%tlad;XW4GqX&vbtUYuzmO+Afpao0jG zh=yLQ!j5x74f;5TXW&~#y#xlqAn^v$U6bCZ}QJh7v`)@A6P3VI5WG3YqU=lwVvXU7TE)asDVx_erMqp0HqV_l583r8LE*lh&e zZu?lP(`Yn;>2|C2XnUo3^(q&--B$C!fkv2ZMT?J`8vU^@dtuSyrKYB5E@WjtnQZY?Ti3%^v$`~?YV~9ql&j1qzdWW? zEn8!g>Z;6*pz4V33D#&y8O|?Q_$_inhDU*Pu8(=l$`CgdsJd^T$ z>(-WFw_F)ZA+1|hv{I0p@fHr4ZdVC#zF8K>YYAc9+NxIqn=hfo4b$x{K^-|+d`|ws z%88XV%gl>4Y1kH>RO3~TBQ-9%NTV|EBGrnPH6ff{X^V?#i%~radqp{PBWrvX!uA<` zE%ribUh7Fh4B0_hp0wBB6-AfnBouiT=^%1m%KfEI%6iTR4@8BwK`36T@&HJOPpp7)bjxxFY+!4r#wnktS#hW5@0^&K|4n+H2oND zUmwTY*GIR0&NewAwJl2?VjchU7zgmhPye3-4^)E1@etf12@-*8_LXbyP, 2014 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2016 +# Sorin Sbarnea, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 06:45+0000\n" +"Last-Translator: Bogdan Mateescu\n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Humanize" +msgstr "Umanizare" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "al {}-lea" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "al {}-lea" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f milioane" +msgstr[2] "%(value).1f de milioane" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s milioane" +msgstr[2] "%(value)s de milioane" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliarde" +msgstr[2] "%(value).1f de miliarde" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliarde" +msgstr[2] "%(value)s de miliarde" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilion" +msgstr[1] "%(value).1f trilioane" +msgstr[2] "%(value).1f de trilioane" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s trilioane" +msgstr[2] "%(value)s de trilioane" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f cuadrilion" +msgstr[1] "%(value).1f cuadrilioane" +msgstr[2] "%(value).1f de cuadrilioane" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s cuadrilion" +msgstr[1] "%(value)s cuadrilioane" +msgstr[2] "%(value)s de cuadrilioane" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f cuntilion" +msgstr[1] "%(value).1f cuntilioane" +msgstr[2] "%(value).1f de cuntilioane" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s cuntilion" +msgstr[1] "%(value)s cuntilioane" +msgstr[2] "%(value)s de cuntilioane" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextilion" +msgstr[1] "%(value).1f sextilioane" +msgstr[2] "%(value).1f de sextilioane" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextilion" +msgstr[1] "%(value)s sextilioane" +msgstr[2] "%(value)s de sextilioane" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilion" +msgstr[1] "%(value).1f septilioane" +msgstr[2] "%(value).1f de septilioane" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilion" +msgstr[1] "%(value)s septilioane" +msgstr[2] "%(value)s de septilioane" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octilion" +msgstr[1] "%(value).1f octilioane" +msgstr[2] "%(value).1f de octilioane" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octilion" +msgstr[1] "%(value)s octilioane" +msgstr[2] "%(value)s de octilioane" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilion" +msgstr[1] "%(value).1f nonilioane" +msgstr[2] "%(value).1f de nonilioane" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilion" +msgstr[1] "%(value)s nonilioane" +msgstr[2] "%(value)s de nonilioane" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilion" +msgstr[1] "%(value).1f decilioane" +msgstr[2] "%(value).1f de decilioane" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilion" +msgstr[1] "%(value)s decilioane" +msgstr[2] "%(value)s de decilioane" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" +msgstr[2] "%(value).1f de googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" +msgstr[2] "%(value)s de googol" + +msgid "one" +msgstr "unu" + +msgid "two" +msgstr "doi" + +msgid "three" +msgstr "trei" + +msgid "four" +msgstr "patru" + +msgid "five" +msgstr "cinci" + +msgid "six" +msgstr "șase" + +msgid "seven" +msgstr "șapte" + +msgid "eight" +msgstr "opt" + +msgid "nine" +msgstr "nouă" + +msgid "today" +msgstr "astăzi" + +msgid "tomorrow" +msgstr "mâine" + +msgid "yesterday" +msgstr "ieri" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "Acum %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d an" +msgstr[1] "%d ani" +msgstr[2] "%d de ani" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d lună" +msgstr[1] "%d luni" +msgstr[2] "%d de luni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d săptămână" +msgstr[1] "%d săptămâni" +msgstr[2] "%d de săptămâni" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d zi" +msgstr[1] "%d zile" +msgstr[2] "%d de zile" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d oră" +msgstr[1] "%d ore" +msgstr[2] "%d de ore" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minute" +msgstr[2] "%d de minute" + +msgid "now" +msgstr "acum" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "Acum o secundă" +msgstr[1] "Acum %(count)s secunde" +msgstr[2] "Acum %(count)s de secunde" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "Acum un minut" +msgstr[1] "Acum %(count)s minute" +msgstr[2] "Acum %(count)s de minute" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "Acum o oră" +msgstr[1] "Acum %(count)s ore" +msgstr[2] "Acum %(count)s de ore" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "În %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d an" +msgstr[1] "%d ani" +msgstr[2] "%d de ani" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d lună" +msgstr[1] "%d luni" +msgstr[2] "%d de luni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d săptămână" +msgstr[1] "%d săptămâni" +msgstr[2] "%d de săptămâni" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d zi" +msgstr[1] "%d zile" +msgstr[2] "%d de zile" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d oră" +msgstr[1] "%d ore" +msgstr[2] "%d de ore" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minut" +msgstr[1] "%d minute" +msgstr[2] "%d de minute" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "Într-o secundă" +msgstr[1] "În %(count)s secunde" +msgstr[2] "În %(count)s de secunde" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "Într-un minut" +msgstr[1] "În %(count)s minute" +msgstr[2] "În %(count)s de minute" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "Într-o oră" +msgstr[1] "În %(count)s ore" +msgstr[2] "În %(count)s de ore" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5e3e331d9d09b90de6d35ad42566a5c341f3058a GIT binary patch literal 7859 zcmb_gO^h5z6|Tf4;N>TO5W($=Sj5CKOAa7F?U~-$wr9FG z-95Wr2oQU563GDzC7d`U+&FGFUd7(^t_e3Jkh%dyAYlZD+^%%+U6se;WOFw=s4c`0^I~gSNbtu@3{^0Nw+<0o)1v z4R9CmU%*k|j`zj#r+_36B)$%u!1z}Z{|z)S-hD@mUj>#hehK(6a0N*A-vK@d{Ew9L z_s8I{I(pw3*?aByN$6&fKxz( z%DxH25}76O43Oe-fn@JTz@5NV;3)8>ly4b{^*ezNK>kHJJ`1GzmnFUdB>TSwQp$fX z@sB|A|7SUVPmcd8@$W!{%>F6${{_M|+wwu=<#y~D@S_+Xz~&Kt3HTjg9e5G=7oY`f zeuS|O@Yg_+AH6fiUjnHxp1v!_cY!~^_}h2K<83GgviBO0=5N0@9=`(oI>vXyX&dMQ ziFZ@t*FF~8`GdsfeX+lP0EPXJ$M&|}&)74V_dVc?z;`5m;}ggo#_vg-|72|cj!(t- zec*?nza7O)`MDEFYpei?WWcoFz{;M>3>z%AS3Iywp@ej7;op8!dJQ|h;W zCbs*8#AzV;GbNq@VoR70LQ6}OXqAVCnPShZ+59PuhLZ^nU7k3AiC>pJo8l4|b4`|p={#&g@;aTg$(H(MR6G+vqEr|nkDcAbH;hE>-v z_0p#6Hr-anq(;=%*we`z*U>QbQnwyxxO(Zc9kbzS*u`?&(OG}CqnG>EoQ_^7KBs4E z#eptxMd&NLtCOgE=yRPcw}n1e1o_?bxhhfj%|}hZF=& z@_B(!*&*JEjXrV~!;NGrrdXCj)q z>ooEfV`;0tT5SiZEZmiE~ISnav`e>jblcMh`_E7cA>6kqC=8 ziVa{*VLW4bKHeNv-Z*1AO?Tv!HRpPPal&uf4dV-)rf*EU zRX%d^>1pGrXPE)G#$#q+RrzGOvfn80H7fgfrBa-E`w;CvgU2Fnc;z2;pKhR zJ(Ii2Xd_P{amKV~I)2LxT(8QX@a(4RE%IY9zG%(!G4rg+o1WDy@k7m-)2`<{+H9M4 zYrO8Z4`aI1?3hicqst!oqk!#_bvF9L<=Bm)C`soIc@o zCQ2hGj-PnEmx#)EdE_Xz%W@Fl;v7~Q;2M~iYnirlkk@BX0#;D_%JeZ~e~(ALW-QNm z+^M?_+i6z${?m4lgjwZYXXIpyj)ZZ{_1b=wJ9A>_*QO5g_^~$Tj8@9ET7~b}!RfL5 zV69T&M|hcoj`88zWLI^lHbswOM)^=>l0WxcJmqj@s)Q*OIi*%BlS=Ro*Y@_NA1Ebq z*oB*}&qFm>IKn4kU{C4bNb1WY+z6M$x6rS!=*4g~dOlnY-{Q%4O6E%;ydGW+*YW3S zxD4WzzRGa9zj`xVxkbVig!e)c!DhITov*0#5vT+uh9M|#MoZzF;byp=^`40HUV93~ zTOU;~)5!Iy@7RY6lYjb=e?^0C4wO+o8ek?p*RXfosU8#C{YYSSqoR_ zRG`kgHLvW1mXeP~Pf{Yf1=`hcqhEf=l0wl%rINH!4W>osacSJ>6O)dRi%3h!$1^-> zEjm9a9)+TdNF`}w8iIDAPbEb;Wj>O;T8W__!RLkdwyH{b)+p0{2dkCKG`TS`S5am? ztLmKZfrR98O?yp*S#LdY&P$;pbCIS!WE5F1Syj$cU!`(sradaktXEZ?^E{BCT$X9? ziZbh6Rp-19Bxo5+; zxipY+ON7kt0c}XxpA0(6rGb>egw$e1IU+|$1=3ltnhdEZCu!0UcG47mUeX4!i9?Wz za+9_+gq?J~!0U2!J{@d2c|sX3_gAA1Z;4Q_P~od6dKpN6H66fy#_7Z`9GXp$uj|pv z4BwzQSa=ZAE<~4bJXh(zf#Tx{Mf{BO*L}i~yOw{BlStC|iSCKynVc%4-Z722y>WC& zSf{tUIL6x1Dn3>(M=wa793_^z(LK|jbt2N&5mUT61^PL&sqGK zN1nu!^t=u~7lgF;B(Aw(^Vo}2Sn0(r^4ZfOa*uSis>sL1E>_&+oLWOD!j literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000..c64fe86 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,484 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mingun , 2014 +# Dimmus , 2011 +# Eugene , 2012 +# Grigory Fateyev (aka greg) , 2018 +# Jannis Leidel , 2011 +# Mingun , 2014 +# Алексей Борискин , 2012,2014 +# Дмитрий Шатера , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-08-01 07:32+0000\n" +"Last-Translator: Grigory Fateyev (aka greg) \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Humanize" +msgstr "Приведение значений к виду, понятному человеку" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f миллион" +msgstr[1] "%(value).1f миллиона" +msgstr[2] "%(value).1f миллионов" +msgstr[3] "%(value).1f миллионов" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s миллион" +msgstr[1] "%(value)s миллиона" +msgstr[2] "%(value)s миллионов" +msgstr[3] "%(value)s миллионов" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f миллиард" +msgstr[1] "%(value).1f миллиарда" +msgstr[2] "%(value).1f миллиардов" +msgstr[3] "%(value).1f миллиардов" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s миллиард" +msgstr[1] "%(value)s миллиарда" +msgstr[2] "%(value)s миллиардов" +msgstr[3] "%(value)s миллиардов" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" +msgstr[1] "%(value).1f триллиона" +msgstr[2] "%(value).1f триллионов" +msgstr[3] "%(value).1f триллионов" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s триллион" +msgstr[1] "%(value)s триллиона" +msgstr[2] "%(value)s триллионов" +msgstr[3] "%(value)s триллионов" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадриллион" +msgstr[1] "%(value).1f квадриллиона" +msgstr[2] "%(value).1f квадриллионов" +msgstr[3] "%(value).1f квадриллионов" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадриллион" +msgstr[1] "%(value)s квадриллиона" +msgstr[2] "%(value)s квадриллионов" +msgstr[3] "%(value)s квадриллионов" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтиллион" +msgstr[1] "%(value).1f квинтиллиона" +msgstr[2] "%(value).1f квинтиллионов" +msgstr[3] "%(value).1f квинтиллионов" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтиллион" +msgstr[1] "%(value)s квинтиллиона" +msgstr[2] "%(value)s квинтиллионов" +msgstr[3] "%(value)s квинтиллионов" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстиллион" +msgstr[1] "%(value).1f секстиллиона" +msgstr[2] "%(value).1f секстиллионов" +msgstr[3] "%(value).1f секстиллионов" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстиллион" +msgstr[1] "%(value)s секстиллиона" +msgstr[2] "%(value)s секстиллионов" +msgstr[3] "%(value)s секстиллионов" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септиллион" +msgstr[1] "%(value).1f септиллиона" +msgstr[2] "%(value).1f септиллионов" +msgstr[3] "%(value).1f септиллионов" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септиллион" +msgstr[1] "%(value)s септиллиона" +msgstr[2] "%(value)s септиллионов" +msgstr[3] "%(value)s септиллионов" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октиллион" +msgstr[1] "%(value).1f октиллиона" +msgstr[2] "%(value).1f октиллионов" +msgstr[3] "%(value).1f октиллионов" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октиллион" +msgstr[1] "%(value)s октиллиона" +msgstr[2] "%(value)s октиллионов" +msgstr[3] "%(value)s октиллионов" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нониллион" +msgstr[1] "%(value).1f нониллиона" +msgstr[2] "%(value).1f нониллионов" +msgstr[3] "%(value).1f нониллионов" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нониллион" +msgstr[1] "%(value)s нониллиона" +msgstr[2] "%(value)s нониллионов" +msgstr[3] "%(value)s нониллионов" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f дециллион" +msgstr[1] "%(value).1f дециллиона" +msgstr[2] "%(value).1f дециллионов" +msgstr[3] "%(value).1f дециллионов" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дециллион" +msgstr[1] "%(value)s дециллиона" +msgstr[2] "%(value)s дециллионов" +msgstr[3] "%(value)s дециллионов" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гугола" +msgstr[2] "%(value).1f гуголов" +msgstr[3] "%(value).1f гуголов" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугола" +msgstr[2] "%(value)s гуголов" +msgstr[3] "%(value)s гуголов" + +msgid "one" +msgstr "один" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четыре" + +msgid "five" +msgstr "пять" + +msgid "six" +msgstr "шесть" + +msgid "seven" +msgstr "семь" + +msgid "eight" +msgstr "восемь" + +msgid "nine" +msgstr "девять" + +msgid "today" +msgstr "сегодня" + +msgid "tomorrow" +msgstr "завтра" + +msgid "yesterday" +msgstr "вчера" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s назад" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d год" +msgstr[1] "%d года" +msgstr[2] "%d лет" +msgstr[3] "%d лет" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месяц" +msgstr[1] "%d месяца" +msgstr[2] "%d месяцев" +msgstr[3] "%d месяцев" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d неделя" +msgstr[1] "%d недели" +msgstr[2] "%d недель" +msgstr[3] "%d недель" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d дней" +msgstr[3] "%d дней" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "now" +msgstr "сейчас" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s секунду назад" +msgstr[1] "%(count)s секунды назад" +msgstr[2] "%(count)s секунд назад" +msgstr[3] "%(count)s секунд назад" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s минуту назад" +msgstr[1] "%(count)s минуты назад" +msgstr[2] "%(count)s минут назад" +msgstr[3] "%(count)s минут назад" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s час назад" +msgstr[1] "%(count)s часа назад" +msgstr[2] "%(count)s часов назад" +msgstr[3] "%(count)s часов назад" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "через %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d год" +msgstr[1] "%d года" +msgstr[2] "%d лет" +msgstr[3] "%d лет" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месяц" +msgstr[1] "%d месяца" +msgstr[2] "%d месяцев" +msgstr[3] "%d месяцев" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d неделю" +msgstr[1] "%d недели" +msgstr[2] "%d недель" +msgstr[3] "%d недель" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d дней" +msgstr[3] "%d дней" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d час" +msgstr[1] "%d часа" +msgstr[2] "%d часов" +msgstr[3] "%d часов" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минута" +msgstr[1] "%d минуты" +msgstr[2] "%d минут" +msgstr[3] "%d минут" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "через %(count)s секунду" +msgstr[1] "через %(count)s секунды" +msgstr[2] "через %(count)s секунд" +msgstr[3] "через %(count)s секунд" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "через %(count)s минуту" +msgstr[1] "через %(count)s минуты" +msgstr[2] "через %(count)s минут" +msgstr[3] "через %(count)s минут" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "через %(count)s час" +msgstr[1] "через %(count)s часа" +msgstr[2] "через %(count)s часов" +msgstr[3] "через %(count)s часов" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..633b9a925dc19589ae63c364130e777f5b9aa67d GIT binary patch literal 6930 zcmbuCO^h5z6~`-y@rF$d`5@uTkTPMNUE8xev%8MhW3TPRv6aZNy@{6u2_w;&uAOb~ zOxL8lXVz;Ii336r5+4`mkN_c(xrF3`FDA&AlJVw{140~-Kq7+hA&8I&;t+`siT|sr z?&*)}-IZyn=U4Tw*RS8JdezhY&K;XBFdPrz+=_Gmjf^?q=}q{-@w*Q(wgvn>cnA1* z@ILUy&5Z2?cYq_{6CmkdHTp%vUw{+P|6{moh_MR#rwzXej-h`Uycc{Iybs)bGh^Gp zagg*mko3s#dm!Ean&JB(`Puqm&7&a2)d4ZYo&(9xiy+;F36i9L1{!zw|3gh4@a2MDBzXl!y|7i5;ZHx)@zYfy)dm!1L zxSg>l!IwcA|Ci~11w}WH{$=naxaCg9z65?5JPiI6oCE(0o(4~ROppHW! zG=32zKR4XX*rVWMAW~pI0LkyG;1Tdq7^v1Fa!SMeS{x z2RdloX)n+*f)k~!_9*QO+C#K&Msd#K+=r8n&uJvT^`xa6RGT%Nm`=66c+4pYmEQPx|X> zu4q^+?P^oXrfg+gTBNqcpH1_nZ?UwivJqKq?dsEA#|!Ik_%uD67 zc5AB~*#a+!VPSP`N^uQCZqss081jOUU%ikQmEyXEsLA{ahrGCEcFne0Aum&lD@C?8 z)v`<>FA)n%M3xrOvOtOSaJTLF-Z{Y>Oq$<~gxS0e+4ZBb@Xa4;RqyGxHQt@=-k@YHg-c-Ce2e;k87x>Mt(-f6?;k4`gR7>`pB|f?sMV=)*bR%Qlvbgu;wRF3!! zi8^W4`OH&ZltfwQ;nMJ2i*|nHs0`X+o%|@!45k<=eM&pISA3 z5IvaZh7Qc~No}-$mQTZ|mKbfL>ksnDI-eTbH_SSLaC!35#AK?SepAAKndhJ!GVe7; z#KS4|PDNt>C6w>F;!;oj_mJPLi**MI{^KhO1G&Fxdg;4vNo97)?-nz=elZC=?_whZ zvX==ZbxC1Fz3tg%dYys7gf8{;6@>x3OBel@iq^{uBE2AZ{ruGY|7wy%-t|TXO6C?} z=0;SUh2maAEy+K>nP^gRx6IlbExV75mEZvR?d#mg-6F=GykQZZe%utmevw5DQBtxHC==9?**jCsy^vP-kG znaEl1mK{pYtuj?ZZk3Fb_Ni(nU5DyhD*K!ddAu>%pb%my?JU+ZIaChLf(b1`@SajOv3Z)m@>rRKsCY~MBrNq@e(9lkE4OjG3S>P+oImgZj7hi1WpBdlq j8RCjIib{m2Ej+K7>x+<`bI#z)hq*n6^{#yjuG#+pQuXZZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 0000000..e8d8d3a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,478 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +# Marian Andre , 2012-2013 +# Martin Tóth , 2017-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-09-05 17:04+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "Humanize" +msgstr "Poľudštenie" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miliónu" +msgstr[1] "%(value).1f miliónu" +msgstr[2] "%(value).1f miliónu" +msgstr[3] "%(value).1f miliónu" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] " %(value)s milión" +msgstr[1] " %(value)s milióny" +msgstr[2] " %(value)s miliónov" +msgstr[3] " %(value)s miliónov" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliarda" +msgstr[1] "%(value).1f miliardy" +msgstr[2] "%(value).1f miliárd" +msgstr[3] "%(value).1f miliárd" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] " %(value)s miliarda" +msgstr[1] " %(value)s miliardy" +msgstr[2] " %(value)s miliárd" +msgstr[3] " %(value)s miliárd" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilión" +msgstr[1] "%(value).1f bilióny" +msgstr[2] "%(value).1f biliónov" +msgstr[3] "%(value).1f biliónov" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s bilión" +msgstr[1] "%(value)s bilióny" +msgstr[2] "%(value)s biliónov" +msgstr[3] "%(value)s biliónov" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biliardy" +msgstr[1] "%(value).1f biliardy" +msgstr[2] "%(value).1f biliárd" +msgstr[3] "%(value).1f biliárd" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biliarda" +msgstr[1] "%(value)s biliardy" +msgstr[2] "%(value)s biliárd" +msgstr[3] "%(value)s biliárd" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f triliónu" +msgstr[1] "%(value).1f triliónu" +msgstr[2] "%(value).1f triliónu" +msgstr[3] "%(value).1f triliónu" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s trilión" +msgstr[1] "%(value)s trilióny" +msgstr[2] "%(value)s triliónov" +msgstr[3] "%(value)s triliónov" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triliardy" +msgstr[1] "%(value).1f triliardy" +msgstr[2] "%(value).1f triliárd" +msgstr[3] "%(value).1f triliárd" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triliarda" +msgstr[1] "%(value)s triliardy" +msgstr[2] "%(value)s triliárd" +msgstr[3] "%(value)s triliárd" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvadriliónu" +msgstr[1] "%(value).1f kvadriliónu" +msgstr[2] "%(value).1f kvadriliónov" +msgstr[3] "%(value).1f kvadriliónov" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadrilión" +msgstr[1] "%(value)s kvadrilióny" +msgstr[2] "%(value)s kvadriliónov" +msgstr[3] "%(value)s kvadriliónov" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvadriliardy" +msgstr[1] "%(value).1f kvadriliardy" +msgstr[2] "%(value).1f kvadriliárd" +msgstr[3] "%(value).1f kvadriliárd" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadriliarda" +msgstr[1] "%(value)s kvadriliardy" +msgstr[2] "%(value)s kvadriliárd" +msgstr[3] "%(value)s kvadriliárd" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintiliónu" +msgstr[1] "%(value).1f kvintiliónu" +msgstr[2] "%(value).1f kvintiliónov" +msgstr[3] "%(value).1f kvintiliónov" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintilión" +msgstr[1] "%(value)s kvintilióny" +msgstr[2] "%(value)s kvintiliónov" +msgstr[3] "%(value)s kvintiliónov" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintiliardy" +msgstr[1] "%(value).1f kvintiliardy" +msgstr[2] "%(value).1f kvintiliárd" +msgstr[3] "%(value).1f kvintiliárd" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintiliarda" +msgstr[1] "%(value)s kvintiliardy" +msgstr[2] "%(value)s kvintiliárd" +msgstr[3] "%(value)s kvintiliárd" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" +msgstr[2] "%(value).1f googol" +msgstr[3] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" +msgstr[2] "%(value)s googol" +msgstr[3] "%(value)s googol" + +msgid "one" +msgstr "jeden" + +msgid "two" +msgstr "dva" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "štyri" + +msgid "five" +msgstr "päť" + +msgid "six" +msgstr "šesť" + +msgid "seven" +msgstr "sedem" + +msgid "eight" +msgstr "osem" + +msgid "nine" +msgstr "deväť" + +msgid "today" +msgstr "dnes" + +msgid "tomorrow" +msgstr "zajtra" + +msgid "yesterday" +msgstr "včera" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "pred %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rokom" +msgstr[1] "%d rokmi" +msgstr[2] "%d rokmi" +msgstr[3] "%d rokmi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesiacom" +msgstr[1] "%d mesiacmi" +msgstr[2] "%d mesiacmi" +msgstr[3] "%d mesiacmi" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d týždeň" +msgstr[1] "%d týždne" +msgstr[2] "%d týždňami" +msgstr[3] "%d týždňami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d dňom" +msgstr[1] "%d dňami" +msgstr[2] "%d dňami" +msgstr[3] "%d dňami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hodinou" +msgstr[1] "%d hodinami" +msgstr[2] "%d hodinami" +msgstr[3] "%d hodinami" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minútou" +msgstr[1] "%d minútami" +msgstr[2] "%d minútami" +msgstr[3] "%d minútami" + +msgid "now" +msgstr "teraz" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "pred sekundou" +msgstr[1] "pred %(count)s sekundami" +msgstr[2] "pred %(count)s sekundami" +msgstr[3] "pred %(count)s sekundami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "pred minútou" +msgstr[1] "pred %(count)s minútami" +msgstr[2] "pred %(count)s minútami" +msgstr[3] "pred %(count)s minútami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "pred hodinou" +msgstr[1] "pred %(count)s hodinami" +msgstr[2] "pred %(count)s hodinami" +msgstr[3] "pred %(count)s hodinami" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "o %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d rok" +msgstr[1] "%d roky" +msgstr[2] "%d rokov" +msgstr[3] "%d rokov" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d mesiac" +msgstr[1] "%d mesiace" +msgstr[2] "%d mesiacov" +msgstr[3] "%d mesiacov" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d týždeň" +msgstr[1] "%d týždne" +msgstr[2] "%d týždňov" +msgstr[3] "%d týždňov" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d deň" +msgstr[1] "%d dni" +msgstr[2] "%d dní" +msgstr[3] "%d dní" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d hodina" +msgstr[1] "%d hodiny" +msgstr[2] "%d hodín" +msgstr[3] "%d hodín" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minúta" +msgstr[1] "%d minúty" +msgstr[2] "%d minút" +msgstr[3] "%d minút" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "o sekundu" +msgstr[1] "o %(count)s sekúnd" +msgstr[2] "o %(count)s sekúnd" +msgstr[3] "o %(count)s sekúnd" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "o minútu" +msgstr[1] "o %(count)s minút" +msgstr[2] "o %(count)s minút" +msgstr[3] "o %(count)s minút" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "o hodinu" +msgstr[1] "o %(count)s hodín" +msgstr[2] "o %(count)s hodín" +msgstr[3] "o %(count)s hodín" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9d5f9aa18af95490612a99fc7b4de72ecfc63d56 GIT binary patch literal 5430 zcmai%O^g&p7={Z4!BIgGL_nnkMs`_xXJ!||GPr15KoE!n|lCML!xCcf2OQ`6O58#~+cPCeh(Z+%_W zHC_Aj#?>DY95tNJ;Jm(ykO}C%2l0VpY&9W!pogGCPzEhSuPFYd;y)=}yM~Yo;-g9% zPzUV~mEM33qWv3m7j)}GssA|id9*oH@(&dMTS(f4!RZXd(h{gze68@Zg@D&+X$6I zwMFT6sEqG`O23_o4=BD*X+_0Hl#W4RO^!gN->XpkkyH4%i#a(DJ&X3B)zT(2udT@q3=S!fXciLPvRMZHlZ^AHdNkMc~g4b z0#uIwGE|PkZ78Ok+<~GLausD<}<7=QYzE0_S#WyM4 z0+spORQx%myA|IH#iK)pp_qo`*_QJp*UL7XxUHlf2tn7$vr?4}b;xH%9b1k;ur7+$hZeJ?||tM3kUC(ajCyC)Q1cHcP-%~iZ;M{>Td*F7Hbw2>zg|noBa*XA8kn%v6wPHRvT$`pByjIH-{{J$U zH!PWU+7zNGT85=Vv8Atw7wp+q z9N7vlz_2j8Hd36!klI*o3PV}|`PmC;krd}Gq&8NZvyj@DZMH(X5-rY@%(YR=G=+2p zSePQ2X@Qmr(&$9oX1=$?3B#cIal|QW3M`?9i2Z0Vym>XHVS;tebRgOozIj`sjxkiz z5WbstOli+i<>;$2UH1}ojQMm%#6jLrGG(U{^c5MmG)qUg*PMySwAbZi8rKt_MRCAd zk=N#{%L6WNMQkuNwMVp(?-JkhIg!I5pn*$5-sL_Cy#*3RB$~lrz&VM8%NFt37D0gA zXkL&-9!5Nncrp;Pyb(DkUFQuRg!pN!Q+Jm6O;I|_J0ggjGhx$nomb*!=uC+^Els{Y z8jX%15!w#jUR?3UYmKj=tEDU}?CUwqI_xnb#U_i1ra&>o;T8 zOvHm#J zhO4Cs;YZv@eTyC3XoSbS(rGczKTI1lEC_itetzn>GuF?OeNFSgIp#Nn>-o((9lPK~ zy3jfeTcydCoO0*52-;zt`kka1j_*HA)34(Lei=WW0&+lQhdP)i&taAh$t-CBK&5Z0;?pso9mrW@j3UuHoH`3$Id1OwT0A z^h;3A3%6dVQZds{LDNyeoM-aeU2xUZ^wrpO);Q-a=I}}^cx!5UYixRJob#r0-Q@LO zu+Ij}9~+x49s?6 zTiVz?84FvrvtGGHtupern5(L=oRiy;N!f~uOIdBga&CHIX6w>0>!_hopI&^KvD7T< zsbSVrL&MXyZo}*X%=%`Mv(6cu^DZt{>8+{ht+DB?vEkicU75k?!>n_kW{vwa=c|{L zVXUd?tg&gWvEiLxlp!rFNsY38{pC0*maoV?$nq7BbOP>Dy%9{exxz|Wo2|g}E^1%Q z+8$ZH!k3EnHfqo1IR|B(F9bh&vF{e@PO+u%ULapNHs#XDQhBe3T, 2011 +# Jure Cuhalev , 2011 +# Primož Verdnik , 2013-2014 +# zejn , 2016 +# zejn , 2011,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Humanize" +msgstr "Počloveči" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milijon" +msgstr[1] "%(value).1f milijona" +msgstr[2] "%(value).1f milijoni" +msgstr[3] "%(value).1f milijonov" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milijon" +msgstr[1] "%(value)s milijona" +msgstr[2] "%(value)s milijoni" +msgstr[3] "%(value)s milijonov" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljarda" +msgstr[1] "%(value).1f miljardi" +msgstr[2] "%(value).1f miljarde" +msgstr[3] "%(value).1f miljard" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljarda" +msgstr[1] "%(value)s miljardi" +msgstr[2] "%(value)s miljarde" +msgstr[3] "%(value)s miljard" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f triljon" +msgstr[1] "%(value).1f triljona" +msgstr[2] "%(value).1f triljoni" +msgstr[3] "%(value).1f triljonov" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljon" +msgstr[1] "%(value)s triljona" +msgstr[2] "%(value)s triljoni" +msgstr[3] "%(value)s triljonov" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kvadrilijon" +msgstr[1] "%(value).1f kvadrilijona" +msgstr[2] "%(value).1f kvadrilijoni" +msgstr[3] "%(value).1f kvadrilijonov" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kvadrilijon" +msgstr[1] "%(value)s kvadrilijona" +msgstr[2] "%(value)s kvadrilijoni" +msgstr[3] "%(value)s kvadrilijonov" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintilijon" +msgstr[1] "%(value).1f kvintilijona" +msgstr[2] "%(value).1f kvintilijoni" +msgstr[3] "%(value).1f kvintilijonov" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintilijon" +msgstr[1] "%(value)s kvintilijona" +msgstr[2] "%(value)s kvintilijoni" +msgstr[3] "%(value)s kvintilijonov" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sekstilijon" +msgstr[1] "%(value).1f sekstilijona" +msgstr[2] "%(value).1f sekstilijoni" +msgstr[3] "%(value).1f sekstilijonov" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sekstilijon" +msgstr[1] "%(value)s sekstilijona" +msgstr[2] "%(value)s sekstilijoni" +msgstr[3] "%(value)s sekstilijonov" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilijon" +msgstr[1] "%(value).1f septilijona" +msgstr[2] "%(value).1f septilijoni" +msgstr[3] "%(value).1f septilijonov" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilijon" +msgstr[1] "%(value)s septilijona" +msgstr[2] "%(value)s septilijoni" +msgstr[3] "%(value)s septilijonov" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilijon" +msgstr[1] "%(value).1f oktilijona" +msgstr[2] "%(value).1f oktilijoni" +msgstr[3] "%(value).1f oktilijonov" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilijon" +msgstr[1] "%(value)s oktilijona" +msgstr[2] "%(value)s oktilijoni" +msgstr[3] "%(value)s oktilijonov" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilijon" +msgstr[1] "%(value).1f nonilijona" +msgstr[2] "%(value).1f nonilijoni" +msgstr[3] "%(value).1f nonilijonov" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilijon" +msgstr[1] "%(value)s nonilijona" +msgstr[2] "%(value)s nonilijoni" +msgstr[3] "%(value)s nonilijonov" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilijon" +msgstr[1] "%(value).1f decilijona" +msgstr[2] "%(value).1f decilijoni" +msgstr[3] "%(value).1f decilijonov" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilijon" +msgstr[1] "%(value)s decilijona" +msgstr[2] "%(value)s decilijoni" +msgstr[3] "%(value)s decilijonov" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugol" +msgstr[1] "%(value).1f gugola" +msgstr[2] "%(value).1f gugoli" +msgstr[3] "%(value).1f gugolov" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugol" +msgstr[1] "%(value)s gugola" +msgstr[2] "%(value)s gugoli" +msgstr[3] "%(value)s gugolov" + +msgid "one" +msgstr "ena" + +msgid "two" +msgstr "dve" + +msgid "three" +msgstr "tri" + +msgid "four" +msgstr "štiri" + +msgid "five" +msgstr "pet" + +msgid "six" +msgstr "šest" + +msgid "seven" +msgstr "sedem" + +msgid "eight" +msgstr "osem" + +msgid "nine" +msgstr "devet" + +msgid "today" +msgstr "danes" + +msgid "tomorrow" +msgstr "jutri" + +msgid "yesterday" +msgstr "včeraj" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s nazaj" + +msgid "now" +msgstr "zdaj" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "pred %(count)s sekundo" +msgstr[1] "pred %(count)s sekundama" +msgstr[2] "pred %(count)s sekundami" +msgstr[3] "pred %(count)s sekundami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "pred %(count)s minuto" +msgstr[1] "pred %(count)s minutama" +msgstr[2] "pred %(count)s minutami" +msgstr[3] "pred %(count)s minutami" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "pred %(count)s uro" +msgstr[1] "pred %(count)s urama" +msgstr[2] "pred %(count)s urami" +msgstr[3] "pred %(count)s urami" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "čez %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "čez %(count)s sekundo" +msgstr[1] "čez %(count)s sekundi" +msgstr[2] "čez %(count)s sekunde" +msgstr[3] "čez %(count)s sekund" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "čez %(count)s minuto" +msgstr[1] "čez %(count)s minuti" +msgstr[2] "čez %(count)s minute" +msgstr[3] "čez %(count)s minut" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "čez %(count)s uro" +msgstr[1] "čez %(count)s uri" +msgstr[2] "čez %(count)s ure" +msgstr[3] "čez %(count)s ur" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c755b4ab244ab758779cec0cadc8572d96a0e13a GIT binary patch literal 4912 zcmb`J&5smC7{&`(KNuAR!4D8Dkd+;l-kDkX*d1J>ASfaqfz@y@XfsnY)AP|a+f_5W zizb@jm6({ICyb~G2e|kbs1P+quNqIDGy#p#8=9Et^LAJF^z`&#VytZKuj;9%->#~+ zd#Zm}HFA!jOrt)8`r{JDj)0e!;vdSj5ytKYuY;?=8{if&b1P%x;3PN-o&-sM)99BC zzXx;BM{Wza9kkFd8@>%@(f<^D1pFDKILmKmY$Lc6B>e7O*?E{LVE zH%$L6GkyUi|Hr2Pg&F@2B>y!Kk0iSRQa=AS96=IDUj|aXR)Uo0wT2r&n%^ey7BFk{ zZ6MO-wOWSA8XSbXkTcLsL(xj`mJEUY0Z`{>NOojHJQv-#befnLYf-Ue%4*wrOrRRgnR#ZG@Y%MCS zo$?%(0vdVK!4~*?jz^j8K&9WT^{5Y`(q4sS6B-k!%TOujcvP^^v9f4tJFB=|m9bvM zlP&Jbc}QKm*%8@^LWQ4lnoUQ#|EiTmDaDztR;8@UW?#q@sg)8hO>?E2;!Ia%NvC+z z)wzyc_EOx#b;nJMKG#Xtm1w8ghsq1-?o?T)O?*I91KCYe26L!*nwChR;sZi5dx{S# zgLzYUCX*Rfd@yI}T3WUgAEpjwio9uRN}3cOA`Ya8oGD^Tf+FeJPRn+k(}LO9G`FLL zd3j5+U0#zNFBy(-o|O>zQloj%PQu(-KytgSHqME%UOy$O5P#4hl;aKl~6+ zu!rO_yE)7!U0w5S)EIWhc_A8PA`bH`3frF*vES3SmA=`^!tvqj3LQ6JRph$KnnKU; z6@`w(dK_0UI#DF3L|3>>ISWkJJRz8tlr$|{((_=^^O7wJrG-cGQBT%INm~cX){DYZ zIDv}1T({k-%p4PK>1pebsybzBPp7J^Sy|+nqeo_~y`Hc&yw=mU7DYapFHBka9ado% zFBFQ~r^oY?`8X3{ss^V7x2{CFNE^E?t@&3d-0nzoi+k?#@8bsGHfQ$C+; zd$Q`;Eum_2PJ2Rn)hBR?TkY6YVa*D=Rpd`KPvM=#%P>~cx?RlW=I7@pG(~hOVqu~r zTe)COA)4m;oSMsJGlvcw+SglsVIrT|iyR3Tvs!Fpc^bbVxpvcb+}*rX!}BBb%nP&o zt*M@m?o|<z!B%Ps{@X7|x;iNYd6W&Jf36XU7I(0izo3MhPM&0Bqs5&55#E>INa=HhX^b8N^9_MJ^!fVpif@QSR)grVoQ6VQlrVL% zyM8|A6bIhZ@elbMSY#CuM( z9Zs)0Uf;uYf%o^c^za*9N8djuh_P2YI^+F8d{;zc?W>nO9>0$HO6(vHE(u~Q(ZCnR zu;9UHJh~tFKV2lTrr0!N^GS^K7C-|7v-d?UGz|%b{|y^$|FAAQq~c_c8on7qNVApE zmxS%NI(9wIy4?-JM2)Va$, 2011,2015 +# Besnik , 2015,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 09:20+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Jepi Formë Njerëzore" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milion" +msgstr[1] "%(value).1f milionë" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milion" +msgstr[1] "%(value)s milionë" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliard" +msgstr[1] "%(value).1f miliardë" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miliard" +msgstr[1] "%(value)s miliardë" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilion" +msgstr[1] "%(value).1f trilionë" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilion" +msgstr[1] "%(value)s trilionë" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f kuadrilion" +msgstr[1] "%(value).1f kuadrilionë" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s kuadrilion" +msgstr[1] "%(value)s kuadrilionë" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kuintilion" +msgstr[1] "%(value).1f kuintilionë" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kuintilionë" +msgstr[1] "%(value)s kuintilionë" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sestilion" +msgstr[1] "%(value).1f sestilionë" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sestilion" +msgstr[1] "%(value)s sestilionë" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilion" +msgstr[1] "%(value).1f septilionë" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilion" +msgstr[1] "%(value)s septilionë" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilion" +msgstr[1] "%(value).1f oktilionë" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilion" +msgstr[1] "%(value)s oktilionë" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilion" +msgstr[1] "%(value).1f nonilionë" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilion" +msgstr[1] "%(value)s nonilionë" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decilion" +msgstr[1] "%(value).1f decilionë" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decilion" +msgstr[1] "%(value)s decilionë" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f gugol" +msgstr[1] "%(value).1f gugolë" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s gugol" +msgstr[1] "%(value)s gugolë" + +msgid "one" +msgstr "një" + +msgid "two" +msgstr "dy" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "katër" + +msgid "five" +msgstr "pesë" + +msgid "six" +msgstr "gjashtë" + +msgid "seven" +msgstr "shtatë" + +msgid "eight" +msgstr "tetë" + +msgid "nine" +msgstr "nëntë" + +msgid "today" +msgstr "sot" + +msgid "tomorrow" +msgstr "nesër" + +msgid "yesterday" +msgstr "dje" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s më parë" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d vit" +msgstr[1] "%d vjet" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d muaj" +msgstr[1] "%d muaj" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d javë" +msgstr[1] "%d javë" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ditë" +msgstr[1] "%d ditë" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d orë" +msgstr[1] "%d orë" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutë" +msgstr[1] "%d minuta" + +msgid "now" +msgstr "tani" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "një sekondë më parë" +msgstr[1] "%(count)s sekonda më parë" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "një minutë më parë" +msgstr[1] "%(count)s minuta më parë" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "një orë më parë" +msgstr[1] "%(count)s orë më parë" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s nga tani" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d vit" +msgstr[1] "%d vjet" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d muaj" +msgstr[1] "%d muaj" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d javë" +msgstr[1] "%d javë" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d ditë" +msgstr[1] "%d ditë" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d orë" +msgstr[1] "%d orë" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d minutë" +msgstr[1] "%d minuta" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "një sekondë më parë" +msgstr[1] "%(count)s sekonda më parë" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "për një minutë" +msgstr[1] "për %(count)s minuta" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "për një orë" +msgstr[1] "për %(count)s orë" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..43ee2b1fd3abc5664544e7023c2c9752bbb3b90d GIT binary patch literal 7246 zcmbuCU2Gjk700J-nt*9aNohz+fCs-vsIXKV$w4BtKi<8Syws>zW6l5?=wy&r2Y^|EE0uJCE<{6GB3M1l$2OK!hs3 z2vRCuV7>^_x?Tdw-%mhV*P9@{Z{xcn`3Uoq;D;bT57NAEfMmDE`Zrj<;jTzu0qK2@ zfp>rt%t`QWj6cO}g73q4fyd7?zr}o+d5!r?=5LvAG5-ltoa?d4^uD`58sEd*3{w8K zvc4Zg%0vZx^EM$yz5e$#s(122P< z;GaR#??9A*08gJjSA1ud0r}ei()%`o^u8@1#k-B=1I!VY9|Xzn7>M!+AIb|oR3Err z!h7an5L*~NbbfYle;7on#9lPIZ-&q|pzTB3gNAYnpY8Zt<^D&Q9|ez~jqvyob3Zu7 z{TLrW=V&|t4|0DevjXly3u9&3Ad~iMHyTPOJlk|$>G>eq-C-{}<0$d)jN*ugIiYhi zfHsbH0F9mxM@atGlU~%p@e(yOY)g1PX)ka@ghZpd8bzaXKo3eLe5jsj?@+2($Uwtt z`)0+HX4A=xW?W}Z+Rh?G3ue1xRR(J_a;nvCw;cPXvW7LSvD8bOj?;A7IhPvIoW`F{ zW;?dVQZIF;eT}VN`b@`cxEkwndCS&$f2O0Cd)B<&kx`h{nUSW52lHwkE zQYTZk(31s$x_h21N{ajDp(fQG_GEF-^fKLUd9qAe+$plvNj2N#$r52~SXslLq))zCa1xw6ezOYTdreToo~IGjDo+ zugGG3d0eqY@2C>19x=r>P&Ya`A z2*_V_#5v3JEtkX-uJg1t?Hi9aj3+JE!|!EXHl8-^rqg%Qns;2^IN>#04dZa9=^2ww zUG_~pF=-reEz^gsan$s!x*V?7Mvdwoqqa}hYW3awcUFh1RTvs4t%Vl(RP9DFrCzP= ztm5f=9OYt6x~A>5P2X|r@-X^m9Ql}Y#t(}z5FsM2@h(G$ng6x0T* zeMeAMmW`#In@5a3uDzl8w%M`|$mv;>yycI7V)D2#n%dF3W-Qk@W=}gPm}Xs$PPP1G znRV&8eG_fE0*vF1JLlDW&ZC{k7`&cuj8KE~#7HHeRdAhh5ggKNQR_iMotCNBp|z11tSw|+IRel_?3Ub)u2*y}ApnN|K}rDm(jnqKK% z3SL3L*Yayg#A=MC3eF8&t>s;16sofxDkV(Str{QcgC!+4jSqDNk;yW4v**rg%mSLU zk`Gm57S@Tf(cka=GF7d-L{;aVcQ3}Vs40_qm6C~`O3rqYrh;pof%1Y|FiF=?a>6tQ z`Q&H}^63dUd&LMc3U%drl_z`L2O4F%QjIcQrKgs5nv1l&%Z)PEK)F%o62MxLBb^j; zR+vdfxj1u>vraPNyqgk*8anM#kDy7NJ@kcu%M6l2?v>l3ktVlAqkL}F!TD{~pb~X98F3ovwHc>b zalZKS$2s^8e$rR)HSl@-_~Hk+`yy`jIT;}v*X>3)u_d6ZbkLWZt%vQ?ab%y43z0^-;CW$QqP`~Xa4yT09Ps>N)SRP4AIBN3 z<2qstvr^Ejc~Ik4$4VZ$m%==yaToJI3C0x^)<^i?2iAZqj}lMCasF8Y#q$6BrN}~O l*9ERS1WJ_{elUtS>D}i9#JJ~BnYihe=}N>RAVI~7{{qT#0XqNy literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 0000000..1e9f014 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,436 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 20:01+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Humanize" +msgstr "Улепшавање" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}-и" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}-и" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f милион" +msgstr[1] "%(value).1f милиона" +msgstr[2] "%(value).1f милиона" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s милион" +msgstr[1] "%(value)s милиона" +msgstr[2] "%(value)s милиона" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f милијарда" +msgstr[1] "%(value).1f милијарде " +msgstr[2] "%(value).1f милијарди" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s милијарда" +msgstr[1] "%(value)s милијарде" +msgstr[2] "%(value)s милијарди" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f билион" +msgstr[1] "%(value).1f билиона" +msgstr[2] "%(value).1f билиона" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s билион" +msgstr[1] "%(value)s билиона" +msgstr[2] "%(value)s билиона" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f билијарда" +msgstr[1] "%(value).1f билијарде" +msgstr[2] "%(value).1f билијарди" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s билијарда" +msgstr[1] "%(value)s билијарде" +msgstr[2] "%(value)s билијарди" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f трилион" +msgstr[1] "%(value).1f трилиона" +msgstr[2] "%(value).1f трилиона" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s трилион" +msgstr[1] "%(value)s трилиона" +msgstr[2] "%(value)s трилиона" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f трилијарда" +msgstr[1] "%(value).1f трилијарде" +msgstr[2] "%(value).1f трилијарди" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s трилијарда" +msgstr[1] "%(value)s трилијарде" +msgstr[2] "%(value)s трилијарди" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f квадрилион" +msgstr[1] "%(value).1f квадрилиона" +msgstr[2] "%(value).1f квадрилиона" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)sквадрилион " +msgstr[1] "%(value)sквадрилиона " +msgstr[2] "%(value)sквадрилиона " + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f квадрилијарда" +msgstr[1] "%(value).1f квадрилијадре" +msgstr[2] "%(value).1f квадрилијарди" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)sквадрилијарда " +msgstr[1] "%(value)sквадрилијарде " +msgstr[2] "%(value)sквадрилијарди " + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f квантилион" +msgstr[1] "%(value).1fквантилиона " +msgstr[2] "%(value).1f квантилиона" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)sквантилион " +msgstr[1] "%(value)sквантилиона " +msgstr[2] "%(value)sквантилиона " + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f квантилијарда" +msgstr[1] "%(value).1fквантилијарде " +msgstr[2] "%(value).1fквантилијарди " + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)sквантилијарда " +msgstr[1] "%(value)sквантилијарде " +msgstr[2] "%(value)sквантилијарди " + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гугола" +msgstr[2] "%(value).1f гугола" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гугола" +msgstr[2] "%(value)s гугола" + +msgid "one" +msgstr "један" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "четири" + +msgid "five" +msgstr "пет" + +msgid "six" +msgstr "шест" + +msgid "seven" +msgstr "седам" + +msgid "eight" +msgstr "осам" + +msgid "nine" +msgstr "девет" + +msgid "today" +msgstr "данас" + +msgid "tomorrow" +msgstr "сутра" + +msgid "yesterday" +msgstr "јуче" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "пре %(delta)s" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d годину" +msgstr[1] "%d године" +msgstr[2] "%d година" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месеца" +msgstr[1] "%d месеца" +msgstr[2] "%d месеци" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d недеље" +msgstr[1] "%d недеље" +msgstr[2] "%d недеља" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d дана" +msgstr[1] "%d дана" +msgstr[2] "%d дана" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d сата" +msgstr[1] "%d сата" +msgstr[2] "%d сати" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минута" +msgstr[1] "%d минута" +msgstr[2] "%d минута" + +msgid "now" +msgstr "сада" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "пре %(count)s секунде" +msgstr[1] "пре %(count)s секунде" +msgstr[2] "пре %(count)s секунди" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "пре %(count)s минута" +msgstr[1] "пре %(count)s минута" +msgstr[2] "пре %(count)s минута" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "пре %(count)s сата" +msgstr[1] "пре %(count)s сата" +msgstr[2] "пре %(count)s сати" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "%(delta)s од сад" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d година" +msgstr[1] "%d године" +msgstr[2] "%d година" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d месец" +msgstr[1] "%d месеца" +msgstr[2] "%d месеци" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d недеља" +msgstr[1] "%d недеље" +msgstr[2] "%d недеља" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d дан" +msgstr[1] "%d дана" +msgstr[2] "%d дана" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d сат" +msgstr[1] "%d сата" +msgstr[2] "%d сати" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d минут" +msgstr[1] "%d минута" +msgstr[2] "%d минута" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s секунда од сад" +msgstr[1] "%(count)s секунде од сада" +msgstr[2] "%(count)s секунди од сада" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s минут од сад" +msgstr[1] "%(count)s минута од сада" +msgstr[2] "%(count)s минута од сада" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s сат од сад" +msgstr[1] "%(count)s сата од сада" +msgstr[2] "%(count)s сати од сада" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ae5cebe05569315bf6f787abf3028c0bb677cd49 GIT binary patch literal 562 zcmYLFO-~y!5Tz=oJ@(wgAhjqFo!Cx6q)wKi@*zwc7S=2@{Iuc58G_E3ZBZ9Gw<$GRh}CM@-Y3!2#?cUFw)ZyspqVcn zRT>62F1;Gp@UkwO*2`dOy!2raHBhrIWBz#vn>6pxM0F=W f{g>7#KWx*rLXMP#$H$F?IkL+d#hQM1nC<)n4o093 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 0000000..72c18ef --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,290 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/django/" +"language/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ec4c8d482108e7d8dbc0831777f47bbca7b5d55 GIT binary patch literal 4097 zcmb7`UuYaf9LGnE)?T&M_@}m2JFUhhrklH~+NM`hu(j1{gQZP<6ehQGcbneLraN<& zrr?{XFZxn_Q7D225g!Y_=!*slf(1pXU_qfED2V#xgMIP)yPe(J+npc|nf=^+=exh1 z`Th28^3&+ZI}ELg{vi5?H!*e?+G?M-cdd)#oU(ic9K-xa;O*cQ zkm6hg>G}WI@i-=Fd>rK9dGK-YJrGM`mqBcWeQo(IxCP^@;KSfw;LYHs^|5ahq*QIT z+y>J8c97!jwEDQ!cUzY2{2t3`5TV&Ykm5ZH;*Y(6%d4o#X>bDLA4_qqMmEHG+iUqU zNO^w^q*{IolK)q$kKPf_9|9+#N8m2-B1n0=3{qZx2Ptn`?~Hj6B>y}}^KXIV|J>@= zEjMnABqE3sOBUg7{+} z;4%tc0x8dzLGpcN$5-t58$15qj(@PcX7!&fuUq{Wke>4!h*yREVaI=iw4NIv%Fxd- z)roSv6`j_Ct@PWyxYD~)iHH3wy))Ekjr9F`2%X+H+B;rl_5ga)kV=O1_uE~#Qog8B zKDYHh#WmQ8&y=%l;}|@OPB~24-T1Hpo$|dNo%VrkuzS$yyGHrDAAK|WcJyq!4+DBX z#?k40pjuL+98rGQ*mzI0yK-Wx+Tim+yB&n;KQ&+09Zt8}48vyF9t!D@I*xcQO@+$g zbgN`BFRaE@uiObdUJl+1*_SjM#zMiIPbDP+r18yS&&A_^B|-FU}*?t^%wDIO5p>$iAFskwALu|c; zq#qBIzxuI)Lp8giDZM!75K5ou{=PR||nrUyQHRzpVK z5mgWUKs9T8dOk4eGHYD-N+;S>R_|ySb##rZ#r{yw>^Z>Wk2B+n@0j7$i36qdGi+JL++fOyCe4tM&?+``DhKfGcuNPzGMYC??5j2`$v#t z#i^dV1IKm2ZMB?p@K9%x@D0glFMeiW?TMW8(=S(HDT$czQoU$}nYaTfb4L!dv4h6IdT=CJRWh9tX@#%#V#~1WZW$yTj>_qBoM5`-` ztM0&RkH3hgQ!s0Jri%lt5H;3iCaiU)H>XRmG2l(-5E#cyM;7CfEHY7JTYBRls5PcD zt1HF`){q_6SVleu2UxQ7e9j;kgr OV0x=7ENHH-MC@PW15@Du literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po new file mode 100644 index 0000000..2a5e50a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sv/LC_MESSAGES/django.po @@ -0,0 +1,265 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Andreas Pelme , 2011-2012,2014 +# Jannis Leidel , 2011 +# Jonathan Lindén, 2014 +# Rasmus Précenth , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jonathan Lindén\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Humanisera" + +msgid "th" +msgstr ":e" + +msgid "st" +msgstr ":a" + +msgid "nd" +msgstr ":a" + +msgid "rd" +msgstr ":e" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljon" +msgstr[1] "%(value).1f miljoner" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s miljon" +msgstr[1] "%(value)s miljoner" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value)1.f miljard" +msgstr[1] "%(value)1.f miljarder" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s miljard" +msgstr[1] "%(value)s miljarder" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value)1.f biljon" +msgstr[1] "%(value)1.f biljoner" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s triljon" +msgstr[1] "%(value)s triljoner" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f biljard" +msgstr[1] "%(value).1f biljarder" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s biljard" +msgstr[1] "%(value)s biljarder" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kvintiljon" +msgstr[1] "%(value).1f kvintiljoner" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kvintiljon" +msgstr[1] "%(value)s kvintiljoner" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f triljard" +msgstr[1] "%(value).1f triljarder" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s triljard" +msgstr[1] "%(value)s triljarder" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f kvadriljon" +msgstr[1] "%(value).1f kvadriljoner" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s kvadriljon" +msgstr[1] "%(value)s kvadriljoner" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f kvadriljard" +msgstr[1] "%(value).1f kvadriljarder" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s kvadriljard" +msgstr[1] "%(value)s kvadriljarder" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f kvintiljon" +msgstr[1] "%(value).1f kvintiljoner" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s kvintiljon" +msgstr[1] "%(value)s kvintiljoner" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f kvintiljard" +msgstr[1] "%(value).1f kvintiljarder" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s kvintiljard" +msgstr[1] "%(value)s kvintiljarder" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googoler" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googoler" + +msgid "one" +msgstr "ett" + +msgid "two" +msgstr "två" + +msgid "three" +msgstr "tre" + +msgid "four" +msgstr "fyra" + +msgid "five" +msgstr "fem" + +msgid "six" +msgstr "sex" + +msgid "seven" +msgstr "sju" + +msgid "eight" +msgstr "åtta" + +msgid "nine" +msgstr "nio" + +msgid "today" +msgstr "idag" + +msgid "tomorrow" +msgstr "imorgon" + +msgid "yesterday" +msgstr "igår" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s sedan" + +msgid "now" +msgstr "nu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "en sekund sedan" +msgstr[1] "%(count)s sekunder sedan" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "en minut sedan" +msgstr[1] "%(count)s minuter sedan" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "en timme sedan" +msgstr[1] "%(count)s timmar sedan" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s från nu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "en sekund från nu" +msgstr[1] "%(count)s sekunder från nu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "en minut från nu" +msgstr[1] "%(count)s minuter från nu" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "en timme från nu" +msgstr[1] "%(count)s timmar från nu" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c0b789139b772962373c78f5c046c5edd67444a9 GIT binary patch literal 4146 zcmai$O^h2g6vquMw1kgBDgB@=bqmWTw6jUJE#0PURnZS9bVb$O!WD1ENv4_D>DbwH zSKWAKt;(Y4Fene4xy2WNaEd4ju#rI0e4x^v|6Bv*V__7%QUxuwxYr z(0<$TOR#|U@8IL$uDetJ^Wc88B}n?~PXEO5Cy?g<$8ma7>SxjMHE;_3AA_60??Li& z6QucXyLKL()V=_6a1DG4d>_P;*ta0I!frVJ2<}4rCiocm2Y4sA<(|}TD@dW*;kX;5 z{(T_%JK*%Z(+@coUH`1(90=F!BuM_A1M$yZ#K*hH$z^aF?cZ`~9Jbw??)MZ(dJUxb zyyf^gNO}0xar=GgzR!V_YYP^@k3fpk4i-Bxc~}OwfNy|@!1ur-;5Xn5cpH2gEWn7yzX~1(uY(l-FC4!HDIVW}+rS&(Bj7I} z!ovOn$^LK0e;qeGnD%c5sXynq#p&A|w>y0&Nb~FkDR287r(J&l(tJf!$`i%#QPi!d z*h;U^`sl2b(q`|I&I}duP2aD*sC3>a1~|%WCu+YSlnmkT6-?KQ8#O4NyXgTXKs|u^ zBsE3~$MX}Yl$(Be2oFeqFTOZFy?r4(>|s>OF`d)xs5?;ip^g@cG37mvO6LQ|u2(3Q zo9JmOzarv}EX5*CWLK zS~h2f`!rv+44FCL~`>^c7jP!TB(FStbUr#tILw2vyg) zOR}vK8!VW56b8?B>Lysy6`s5J(o%3bk;1|@I3ujA@Yz!NXizE#dLeyBJfVgL67*nF?3!UenCap5W=@d|vVW^SoR*kz=@~5VnYq zTwPu*l*VJ}SL<|3t#|2>@CwV!?9+NLv5ci(9oYrfO}zJM+`9X6s5aAUD&u*w-g}*S z?EQNBPRp22l$$1U3tpEDBPVpw8!qGBD~{*bWHM}6Hj{pBERlv~gz+32mQ}LZGkCq= z=g7JZ88*n)AS8axmovjAso8vytxxqN%i!flzdy!S>P-{bda`F&CQV-H71?-j$PA=rPXHdYD% literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 0000000..5852ab3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,262 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "Weka kibinadamu" + +msgid "th" +msgstr " " + +msgid "st" +msgstr " " + +msgid "nd" +msgstr " " + +msgid "rd" +msgstr " " + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "milioni %(value).1f" +msgstr[1] "milioni %(value).1f" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "milioni %(value)s" +msgstr[1] "milioni %(value)s" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "bilioni %(value).1f" +msgstr[1] "bilioni %(value).1f" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "bilioni %(value)s" +msgstr[1] "bilioni %(value)s" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "trilioni %(value).1f" +msgstr[1] "trilioni %(value).1f" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "trilioni %(value)s" +msgstr[1] "trilioni %(value)s" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "kuadrilioni %(value).1f" +msgstr[1] "kuadrilioni %(value).1f" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "kuadrilioni %(value)s" +msgstr[1] "kuadrilioni %(value)s" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "kuintilioni %(value).1f" +msgstr[1] "kuintilioni %(value).1f" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "kuintilioni %(value)s" +msgstr[1] "kuintilioni %(value)s" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "seksitilioni %(value).1f" +msgstr[1] "seksitilioni %(value).1f" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "seksitilioni %(value)s" +msgstr[1] "seksitilioni %(value)s" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "septilioni %(value).1f" +msgstr[1] "septilioni %(value).1f" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "septilioni %(value)s" +msgstr[1] "septilioni %(value)s" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilioni" +msgstr[1] "%(value).1f oktilioni" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "oktilioni %(value)s" +msgstr[1] "oktilioni %(value)s" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "nonilioni %(value).1f" +msgstr[1] "nonilioni %(value).1f" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "nonilioni %(value)s" +msgstr[1] "nonilioni %(value)s" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "desilioni %(value).1f" +msgstr[1] "desilioni %(value).1f" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "desilioni %(value)s" +msgstr[1] "desilioni %(value)s" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "gogoli %(value).1f" +msgstr[1] "gogoli %(value).1f" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "gogoli %(value)s" +msgstr[1] "gogoli %(value)s" + +msgid "one" +msgstr "moja" + +msgid "two" +msgstr "mbili" + +msgid "three" +msgstr "tatu" + +msgid "four" +msgstr "nne" + +msgid "five" +msgstr "tano" + +msgid "six" +msgstr "sita" + +msgid "seven" +msgstr "saba" + +msgid "eight" +msgstr "nane" + +msgid "nine" +msgstr "tisa" + +msgid "today" +msgstr "leo" + +msgid "tomorrow" +msgstr "kesho" + +msgid "yesterday" +msgstr "jana" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s zilizopita" + +msgid "now" +msgstr "sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "Sekunde iliyopita" +msgstr[1] "Sekunde %(count)s zilizopita" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "Dakika iliyopita" +msgstr[1] "Dakika %(count)s zilizopita" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "Saa lililopita" +msgstr[1] "Masaa %(count)s yaliyopita" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s kutoka sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "Sekunde moja kutoka sasa" +msgstr[1] "Sekunde %(count)s kutoka sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "Dakika moja kutoka sasa" +msgstr[1] "Dakika %(count)s kutoka sasa" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "Saa limoja kutoka sasa " +msgstr[1] "Masaa %(count)s kutoka sasa" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..77e9f9b72e8f0e776be6733ff81ebd237c3f9bd8 GIT binary patch literal 466 zcmYLE!A=4(6x8TxkDfi$!~+B$ZHWXdt}!Ac7>IHS!F3gRIa+{@~*so|Wf-sk19J4=_sMT{*9<5hPtnli6sd zO6vkle5O-)T4x>-D@ZhbO`z|T4CsYt8I&L`#@oO+@DAZzuug+<#?S~e^{K1Oqwf|t z1J=e7!CMW6h{n)$gYq%o$)+|7`+zehTgyyAqGTaR zA`6|9+A@SvP`cS{nxV?m3$<;|Z9&U@OHWI>FGutL02(B%N0ZTHaO}^UEb3bml)=5e zN-P-EHqbJc+VseLDV\n" +"Language-Team: Tamil (http://www.transifex.com/projects/p/django/language/" +"ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7439a30495b2dadc52d45c653b8db45a1209830 GIT binary patch literal 1327 zcmZ{i&ubKC7{_02THCc&jYX?8^;NJWhIe-+YF8)SQkp765)5JM$%A9|-PsAd@4LM7 zZZ9G^j7rZ!J~Td63Q$14|wUNmwunw(UqbP`@Elden0Qb z{yjX@V~~%bpF;nFjzBML!2x*$z6(AEhrp*fH^Kd|pMjr&|AJe=12`ye1bhcPobz)K zKXw!c^%J@OSne<94Dxs-=M?xp@~1)SHxGUQo(FrFc@f+T`yT|!zXQXE!F}LC@F+L| zo&~A?d+-x*6{NafK+509;}1aU^DyU=+`pOAfgd9N9NY!I$nCAT)K1tta~=e-UUp|7 zo4t+VWI%R6--FWZ?NFLofPMts10~rFrFTX5r&%=jO+w#}1gkJ6u5_2F8dI^7jGi@UYAlgUQn4gnW{G9CfuE6* zSzQZPaJIBD$hBR~R%BwOA@`ioi*mt=>6$n%O%iJr@Y-UiB3+o5ZEdWWO`^CazUf4X zsOo?h=FU~cl#!uDuJ|^zGT;-Qe?oY^@XOry1Ft;p`JRVFF)x>5>N&_O3-6ThPjUZ? z;J7#LK?*ZrVnx-2DrtsRn}DAUm5LKSBV)V{{w217`E@fhi?OQfuTZ0+P8dm1m0>I3 zRoU!B9X{HywjGp8-EOyNsbO4~%f$uVD)q1Q63x82WMyfrFgrbadT@Ea=oO~4vQlBG zl{Ri?<+3fcn_;Xb`9dQ!iL{mPs%ON>K_1PjOCwIJ1zn3(6!4RmV*6@K>QR_$(sveT zv}q*)SMAJ9Dif2u|5zDS{7{AaW0M8u((5i=cj2FzVJuCmgrEApxe;sJbpU~TG<4V>8 zEeG2m@LE6GVhzn`$6GJw_xfY, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "వ" + +msgid "st" +msgstr "వ" + +msgid "nd" +msgstr "వ" + +msgid "rd" +msgstr "వ" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "ఒక్కటి" + +msgid "two" +msgstr "రెండు" + +msgid "three" +msgstr "మూడు" + +msgid "four" +msgstr "నాలుగు" + +msgid "five" +msgstr "ఐదు" + +msgid "six" +msgstr "ఆరు" + +msgid "seven" +msgstr "ఏడు" + +msgid "eight" +msgstr "ఎనిమిది " + +msgid "nine" +msgstr "తొమ్మిది" + +msgid "today" +msgstr "ఈ రోజు" + +msgid "tomorrow" +msgstr "రెపు" + +msgid "yesterday" +msgstr "నిన్న" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s క్రితము" + +msgid "now" +msgstr "ఇప్పుడు " + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "ఇప్పటినుండి %(delta)s కు" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eaf0a943d2fc57add756f0fccac31bc9ed51c834 GIT binary patch literal 3922 zcmb7`Uu+ab9LGn*Kb#;60-_?LSm;@|cZW8`gQ~GYB#}^|_~grSH@#bOw{z^w^{9!7 zU?O1RlM;du12%?4Ljo$geIO>1XrhlM`lf4q6HI*4$b<3w+nu{>yK@4Q?tXT@^PAty z{C+cY{dw8KV+W;+Es9_!KL;G=%`d77aaNsvQ#!Nl(gRt zlD|bDwJ$aLa>JFTeYN3Q5H46BNcMvu{@6ym-a#(5fE1VSGK{SNuY$|K1$QNJTLF?j zVz?Vzg}P^W5L}7+3B&W?W2k=%t_81x%fZEq8M_DMAlVl{(qA-u6{K+*hHruQp?=En z0!V(p0Sn+2!!=778%BMn;bE|d`d5b6Kw9t6-3gyH+zzgXz8j>xz6MhKPlIsHra_9s zd2lIs*|h&)+J6MGRoHJv|K0EpkjDEHr2f~y`@tn}Li&1;;++Q(em01Q@mJ#QXgA_l?E$t85)3XcZmg2p^h}dRvp)-LagbDOd zy0xar4i+Z(Uawa3q<>wlEJ_wjyIPU5B5QM8TBN$gpH1_nZ?UwivZO7xc6EQ#Ee96s z-n!@8yzg(?btM`$^PchnyR}u;wuz@imCCM7N#{^;n>H_nil>D6*;72Nr1Pe@O-tuY zahqn#mg2qCbf(DGrdraZcn>j^BC@oImIQSq7qRl2T5z`_adJws>Fcce`gEeISnk+N z1hS5(wQPo+HW!m9NxwYbW1_Y_8k7f9AWo8Mrm=)y2ZT{<5fPH=8)Mw{#r&W#)UnU=$7s24$wir0|*Y4lt#e zuHr8cf@xWHr|_=JAb_oINj4>v76Hj)f!rrb+Sy)qUJ-%9jacO6eXd`TnO&kG1MTck z6|d|(->fKSTo!p|Z0EQ$8VFaz)_K9zqR2Pq3qwx6;1q^=p-{{Z59AB^JPe&(V$vg@ zUAti?|Fl!s#Pd%ThlU37D4CaBrJeD>^;ON)GAQyf5d>3wmu!fDZ^0{=dafdL%T?8K zARB`vS$_td{7TcU2xnZl^&%gyx*qSZYTYR2a;;WtP?JAzLL4CTT(Y7zYNl^aS996S zj_o_PcGq4Q%x6ZWuZ52}O*ODMjUAn9)LhTs%u7`_P(qLF8Qe|s*6C!Z7`XyQR z{7R8;+Ux1g9O0vy8LLs6oozCxt0MOsaaD~JHuL0jB)>T`=a(Z2KaRrBqwxJG{3x0^ z8ik)m;fXmG>C1|K*yi0%Bt_vT=o^J!L^DUC@NiFu>HCO!r*9upZ8uG#r*9R~Emue) zr|t`qqi{N2^SLPe&^lcOlMkZsLcA_Zd~Wb6@8LTgh?~2F(;>M29m?DPohXjAb(b{z zyL<1!1PR5KI39%;&6|>YDo!zNl_)#|gPuK(#fFG4I>G#4+~XpGKBvdocnjYANa=nz zHs0HmQd-B^Xy#D70_@g!iPv46wQKKDqZusuWE8%~=yb&A3tu>Lh`|xWpnVe~(Em4n z+bjxu4~3gLnt6j_+#Uu?dp8QtcVj;9gwkamcR3QxAOOi6!-M8pkEe;8oxy|==;RC_ mN0|9hNH`YLQ5eQyMCWb;7KeNvPCR3CeA(UtaFXnpw(Wmzi2C&a literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po new file mode 100644 index 0000000..00decc3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,237 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2012 +# Perry Roper , 2017 +# sipp11 , 2014 +# Vichai Vongvorakul , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-18 04:55+0000\n" +"Last-Translator: Perry Roper \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f หนึ่งล้าน" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s ล้าน" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f สิบล้าน" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s พันล้าน" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ร้อยล้าน" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] " %(value)s ล้านล้าน" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f quadrillion" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s quadrillion" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f quintillion" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s quintillion" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f sextillion" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s sextillion" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septillion" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septillion" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f octillion" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s octillion" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonillion" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonillion" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f decillion" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s decillion" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" + +msgid "one" +msgstr "หนึ่ง" + +msgid "two" +msgstr "สอง" + +msgid "three" +msgstr "สาม" + +msgid "four" +msgstr "สี่" + +msgid "five" +msgstr "ห้า" + +msgid "six" +msgstr "หก" + +msgid "seven" +msgstr "เจ็ด" + +msgid "eight" +msgstr "แปด" + +msgid "nine" +msgstr "เก้า" + +msgid "today" +msgstr "วันนี้" + +msgid "tomorrow" +msgstr "พรุ่งนี้" + +msgid "yesterday" +msgstr "เมื่อวานนี้" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s ที่ผ่านมา" + +msgid "now" +msgstr "ขณะนี้" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s วินาทีที่ผ่านมา" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s นาทีที่ผ่านมา" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s ชั่วโมงที่ผ่านมา" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s ต่อจากนี้" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s วินาทีต่อจากนี้" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s นาทีต่อจากนี้" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s ชั่วโมงต่อจากนี้" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9238c9992a34227d1ffe90a7149d38ddce6b3acd GIT binary patch literal 5304 zcmcJSONDt+LX1bT|>RkpT z#)Ah!PV7&Myb!6?MUnD|I^my2Ay8WW=!6B7@<4qiO?|GK~F-RZ7DFIKkZSKq(B zuGd%9UHjdtrLPF2-N>tvw=NMvfsZf657PG+39$nF0bB+C3f=`SSti6FxEAaO9|lQ( zlJ&QlUxUNY|7NaRE`$U7aprSi3HHa}?ch1^E^yh!Lfi@tfuxUtq#Nc5kouoz{svMz zt1n5p2c&ULgQyb6L2BnDNd3>T{X5&&^a&xM?*i9?E{Lg$7eQKzSD3GYG_I2%wf6-` zg$=0fVV(D3et10f#mlY*Z;`+^2^ft5=i|$0A2`=F~`BnVL!^OgV({H zVfzK<>&*9p@T!tW1f0uz|uVh{e()z9D`hE~gCQ9Iu3xrq?UIF`k z4375C=OE4RTd)LPfJ(9lnGb=a&obWx2VtLO{>8j~WvcH7X?>4^w0>`a)ZQ7ke_^h; zGS!Ef2f^ey=3C6O%s)Yj-%Z%mG@tDt`R@gHfQQ)rknL|l@?Ue65Zk~VAg$9=AjRt$ zwx0tr1@RK|4G@3g6n+qDF%P0^@ij<(=a_#mmt39tuL8;cPLTXZK=R)WQorLMj+A%| zq_`=jW_rvP^AIy;wwcG6PcxrkKFfR_r1`xJQoqO9J^@nyZ!+HnX&fJL{f8j7N0P9` zl5`Dz@p?)2$#xJ^P7ogOmn1tM`5!~r3D->Q9-^5nbsGtnPfjm&_NzW-ib`<#uNfe zpTz2Vvik>I-88BcNmUOPS(9PVl727?X+||;T^g!P$_cO8^aB51HCNXxo_4h!1ofcV z)ucsgS=zH{e&Aa??P^dn7GJx1C{}K0@$RjAzOD5`v0ab!w9UPzeAw=7m5puS1u-f_ z*QOL>7)hI!3t=P+LOyztEGosgMc9-12uHFQGrMMsRwR3=#YmB_O|^t6l0C#ih{)3- zS^|_w_s1>edq=cTSTsL2nh$R+h<#IvzI-E9(=(m4sqa0nj>q|Dm3f_KP92}#GwOKc=HvNV&=(~DgV6PS)s*F>M~`9kI%WlCWERZI zI$0S(Uf=CD0@HUhH>wR6%njYn8@tWByUk7A=4iLMIW;3aqkR#1hlQC6wH79zEoOpN z5QdnLnGHl+M@EMvkA=Y#x@MfcuJf=CBYZEb(tSet^`P&7o(@9e?2GE2>+Fo{kux4t zW#8ETac5Vkm4UCbTNz!IBjw7dQ{L!QHpxn*x?%HRd8Ay1qjNydc+_UzZ&a2yS2u1N zEF<+ji0$Hxhsuwd$^>Cm?hN7sL9KxbzaFc)cE+`8RpodbHoRy`4on#{T^$~tot+&r z^q4oP4-eIX)^IxT4x0SZsGbi|!KLD-6_(w|PuXxqpZ znHIMV`0^fEDQ)RnbbXoo$ggQ}=433D@8S*Q8E-;`+LzgVr|ZUnPfwf9-lDsXMRIin zzuf)DD(1d+ba%2y)J3i}iwfI`q^qZG&x0l+m zEN6t*W3e~eX!BZffmj?xi%+AJ_tE1Y~!Zt}-bLrSw9S{!Xb$qo_J7wC7LbA23&T_&@jH295X# tChxUekD?`x9vk}4xvlXKZhY8MbDz$=BPQZxv^e+kr+wiyJS-H}=O4WadW!%6 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000..9bb2363 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,400 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmet Emre Aladağ , 2013 +# BouRock, 2018 +# BouRock, 2014 +# Jannis Leidel , 2011 +# Metin Amiroff , 2012 +# Murat Sahin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 09:57+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Humanize" +msgstr "İnsansı" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}." + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}." + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milyon" +msgstr[1] "%(value).1f milyon" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s milyon" +msgstr[1] "%(value)s milyon" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f milyar" +msgstr[1] "%(value).1f milyar" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s milyar" +msgstr[1] "%(value)s milyar" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f trilyon" +msgstr[1] "%(value).1f trilyon" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s trilyon" +msgstr[1] "%(value)s trilyon" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f katrilyon" +msgstr[1] "%(value).1f katrilyon" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s katrilyon" +msgstr[1] "%(value)s katrilyon" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f kentilyon" +msgstr[1] "%(value).1f kentilyon" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s kentilyon" +msgstr[1] "%(value)s kentilyon" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f seksilyon" +msgstr[1] "%(value).1f seksilyon" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s seksilyon" +msgstr[1] "%(value)s seksilyon" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f septilyon" +msgstr[1] "%(value).1f septilyon" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s septilyon" +msgstr[1] "%(value)s septilyon" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f oktilyon" +msgstr[1] "%(value).1f oktilyon" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s oktilyon" +msgstr[1] "%(value)s oktilyon" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nonilyon" +msgstr[1] "%(value).1f nonilyon" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nonilyon" +msgstr[1] "%(value)s nonilyon" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f desilyon" +msgstr[1] "%(value).1f desilyon" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s desilyon" +msgstr[1] "%(value)s desilyon" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f googol" +msgstr[1] "%(value).1f googol" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s googol" +msgstr[1] "%(value)s googol" + +msgid "one" +msgstr "bir" + +msgid "two" +msgstr "iki" + +msgid "three" +msgstr "üç" + +msgid "four" +msgstr "dört" + +msgid "five" +msgstr "beş" + +msgid "six" +msgstr "altı" + +msgid "seven" +msgstr "yedi" + +msgid "eight" +msgstr "sekiz" + +msgid "nine" +msgstr "dokuz" + +msgid "today" +msgstr "bugün" + +msgid "tomorrow" +msgstr "yarın" + +msgid "yesterday" +msgstr "dün" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s önce" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d yıl" +msgstr[1] "%d yıl" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ay" +msgstr[1] "%d ay" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hafta" +msgstr[1] "%d hafta" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d gün" +msgstr[1] "%d gün" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d saat" +msgstr[1] "%d saat" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d dakika" +msgstr[1] "%d dakika" + +msgid "now" +msgstr "şimdi" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "bir saniye önce" +msgstr[1] "%(count)s saniye önce" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "bir dakika önce" +msgstr[1] "%(count)s dakika önce" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "bir saat önce" +msgstr[1] "%(count)s saat önce" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "şu andan itibaren %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d yıl" +msgstr[1] "%d yıl" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d ay" +msgstr[1] "%d ay" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d hafta" +msgstr[1] "%d hafta" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d gün" +msgstr[1] "%d gün" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d saat" +msgstr[1] "%d saat" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d dakika" +msgstr[1] "%d dakika" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "şu andan itibaren bir saniye" +msgstr[1] "şu andan itibaren %(count)s saniye" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "şu andan itibaren bir dakika" +msgstr[1] "şu andan itibaren %(count)s dakika" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "şu andan itibaren bir saat" +msgstr[1] "şu andan itibaren %(count)s saat" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..98df56f9585769d3b7d58d5a45e8e313e8cc2b67 GIT binary patch literal 3243 zcmb7^-)~e!6vs!Xzg9uTAE@=mAXZwM+udtaU~3JrLPTh6$ijn(F}K~>?SsQ?y-aT8fFj`Y^YR@y-8$nE2uoiQlt3ZEbgMiPN6@x#v4) z&Yd}DvVU%C`I2GmhP?nQ-N#rrcxw|L7~gGXY!^5Qc7ie32HrLL&X$IL*suzwF@N1~ z33T9ZzP~{i?129XxDz}NQvUD39pLXq|HtU94>aa`LHhnl!z&==`PJ|a*am<5gN$J* z>jCj;)@%4a_#FH`@FlPa(h<*@`ST!-#4Z_rVdgJ`l<%t1uNnQi;kRaf(r^lV2=O(L z^4$g>27duBqPD+*ROgQ%(mtw&m%-=Z*Nm?X{{mluzBSdL3v&25<5xh+_Z3)QZ+s0t z1^o{AEV${BMqI1mUXVjSW;g=Uey$k*Cy?^}0U`za8$^lOU69V#@+f25z%3xfaggfW z4O0Am!^0r0J8tGb25J3(;Yp(_!!g58LCSL$#6P=)2j%%1r1jr`C?{)&EsrhBFCgu0 z7wkpYRv3-lFuEf&UV}Yee``FbMl?8#zOx-h{d)q|3Zoi74Wm0t=cPS71EWFvqr0?& z91N6bWl#^Oe^eW)?~^bZufphj9WY#p`rQQBV=%P5e&@)i@iINy+DE)nMRatz1wP=H zN`4sJQ_G7%OQc;bhG8)*tx0K-%9eaKEeHckq+JaMl_l1$o~n5H$P%5b`++U{sft~f zV%Qd*D398st+KLhyh)Tz-L)yrJ(S$0t!ts=O~U%_N#3k9_f2w}*4#76ZJMoHk|(Ln zouXKqYH5??31U-=DAFQY8nhw_zc{2=!5WdQ z@&Z}%R2XIX2VM~Pk{=O1%E8~pZs6`O)!i;XD1`4|O;D_OMd9RxSI+XBr@V-_4=FXA zO{c5XYL}vXenE_O4Tj}(<3!6SnZ;?P(jBS3LwyHU&+c|*QoUiIM1Vbw4dZYM9ZnCI zJU{5>gF{{C%&!c z;_>9^IsK!)p=Yq)<-Iq3fI?>V!UkF5GrFdKzE{9pd}gDN@q|4{o>*8+C6^VG)A3n7 zjq=Q|)Ot;_|DF^R$%VvZav3qXaS=^GatS5huz+SdxqJv%Upyq7#nEf}CeuIY+4ys& zXBMa8)A2Y;vHY7AU&Ljt={XjEwsckB#0ABz#oGd3iDB`Ct}&!XA>#|kwi-%_v7!;N vcm>}>FBmS, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "че" + +msgid "st" +msgstr "че" + +msgid "nd" +msgstr "че" + +msgid "rd" +msgstr "че" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f миллион" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s миллион" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f миллиард" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s миллиард" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f триллион" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s триллион" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадриллион" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадриллион" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квинтиллион" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квинтиллион" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстиллион" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстиллион" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септиллион" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септиллион" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октиллион" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октиллион" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нониллион" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нониллион" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f дециллион" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s дециллион" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f дециллион" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" + +msgid "one" +msgstr "бер" + +msgid "two" +msgstr "ике" + +msgid "three" +msgstr "өч" + +msgid "four" +msgstr "дүрт" + +msgid "five" +msgstr "биш" + +msgid "six" +msgstr "алты" + +msgid "seven" +msgstr "җиде" + +msgid "eight" +msgstr "сигез" + +msgid "nine" +msgstr "тугыз" + +msgid "today" +msgstr "бүген" + +msgid "tomorrow" +msgstr "иртәгә" + +msgid "yesterday" +msgstr "кичә" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s элек" + +msgid "now" +msgstr "хәзер" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "хәзердән %(delta)s" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" + +msgid "one" +msgstr "" + +msgid "two" +msgstr "" + +msgid "three" +msgstr "" + +msgid "four" +msgstr "" + +msgid "five" +msgstr "" + +msgid "six" +msgstr "" + +msgid "seven" +msgstr "" + +msgid "eight" +msgstr "" + +msgid "nine" +msgstr "" + +msgid "today" +msgstr "" + +msgid "tomorrow" +msgstr "" + +msgid "yesterday" +msgstr "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fe9442db4aa59f2b625be59da722980bdcbf98dd GIT binary patch literal 8854 zcmds5U2Ggz6~3ft(wL@yknqz0w*)8NBxCQ|PGYaUPTTybRf%dyntI3Ut#@af znOQqdV&NwJK{Rcing{;M0}njp!6Yt8ojOt5NR@c$>;poTPz4kO5=elA)CVfTcV_O+ z&dj~DyHUjpBVB)U&iU>+=brmBcm3gg>tADd4xw#B8(qhk4t#1o{^0rD?Tl>({vLQA z@bAE#z;zoK+YQ_W>;^swB>icj|CvA!*a!V50{3iWOoRNC!0!Vykgo!_1OEWr3EXf8 zV-Em(futV?lHL{gBOt}UDexaa^0RGIfJcCo*DMewb^%C!UI$YAcZK{YWVyNsqkV^5Iz#jl9uh)U(?`gq{kAXDK4VYw# zcPEhKdjxI;QvJ3Gdp8gzV;SHg*2(~o*2ORGX6*C8o4^|I1K{4;;BS z&|elfjLx(GZwNg0ImTXr{8u397vOXec=r~@s=!x(B>x-uG}*TX`riOae;7p}d>2T5 z9{OT{?*l2Hr@s`)9|3ESkAFGH`_I6aAb$dUANc(JfjogtLGo{b-vwU$3S;j9_k5Kx zOgZ}(km~UtAWF$LVX`&gR^SNm5bz*yN#IT30myf7#&W<%fW$uuB>vBV#Q&qf9xNK- zSAfL72;2<(5J>U=2Bi7<7>F&#*w+KxDDWI2V!d2J~UcaeP|oe z_M`1Z!?N<99r&9S@81yk5Rhs&Amj%H4g*KUdjl|y{+ZX1$HdESff?W)G^!~|>p#5$ zw*v>!u;l!`EsjctCE)K-fWOD7K3IkfTilwS#8qh()8z0Jr8GsvR45e_6sjJnRdus`(qKA@X4YIoY~D$$X1W>You3BU zU{8mf$d;Cfp-o3Nla^UbdJMD;kAf5S>h1|WHi)53H~F+xvy%=N*uy>3t~;CW>zkjS z?{&#_dCE9JefomIHJ~CK^wnniGF?X>J$krVhFov9>mZhvVIsYSS&Y-g(bqRyL5vYT zIgMp+xP@aAN3@|Pk77+3wszQ@w6JJOc|P<^*$orT^V&?;c!iDu?TBSpojf;ZebFfl zj_}~M&|~s$p5uiA&+;8RxG!Z%%r(UkVR2{|&yuaCjj~4hKiGlZQmXBh& z^3$h<|12Nlxxow^<|K!r3sT5ZhlV&-*c^(4Xf6nUSu@ z4X%F1yY9VJKg;Sbd2iI0yf?fnJiP72?pt78@UGR*)z5>r(!%6jZDE9uOSfcRL0T_* zS1GdhCURYi_m<4b=n_HBpaaU~`dRNXqF;+g57o)2p+Sz;!XzrJ8fVNTJNTVj*A;Da#9fz8L22zKAn?R>(8~zN1~`Ql1S>DI-s3tv6AWu zV=|M3SE$F;g;9OQUpHMk7kbcvQ)pjNFzW9g@-Lk})1#GAE-H6h$^|NvdNoQW=#wmWhgx$fHw=bnqqfkO*=n5=E6uTTo4L4eVuNx9C!U?d??SRC6CN*z0?1&3*9qTaRXn&y)31!5lUKJBNTOA zZ-vl#T_avQuWO`Jr**ycF8(i?l@_bDNl2+_lc20<$L5Z!+4R_PEt_3BtYl{$XoFx6 zUGUyw-i@93QGBL;j($X6r&EFMeDr@jy7u5KI49om8>{(7zk_`S{qhRl=@+J$58oEb z!docEtt7?Io}?z|ALS$&zDHb2Fr@QzQY7Rc@20(xv83^D-@lBGTWG}Cn^G`lNnS!V zR{iXjP>ofQx&Pj%6RJzsh(->{8lU%br&GGgXugLv^p<^IQx0Y, 2014 +# Kirill Gagarski , 2014 +# Max V. Stotsky , 2014 +# Mykola Zamkovoi , 2014 +# Alex Bolotov , 2013 +# Taras Korzhak , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-08-24 20:06+0000\n" +"Last-Translator: Taras Korzhak \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "Humanize" +msgstr "Олюднювати" + +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}ть" + +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}ій" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}ий" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}ий" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f мільйон" +msgstr[1] "%(value).1f мільйонів" +msgstr[2] "%(value).1f мільйонів" +msgstr[3] "%(value).1f мільйонів" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s мільйон" +msgstr[1] "%(value)s мільйони" +msgstr[2] "%(value)s мільйонів" +msgstr[3] "%(value)s мільйонів" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f мільярд" +msgstr[1] "%(value).1f мільярди" +msgstr[2] "%(value).1f мільярдів" +msgstr[3] "%(value).1f мільярдів" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s мільярд" +msgstr[1] "%(value)s мільярди" +msgstr[2] "%(value)s мільярдів" +msgstr[3] "%(value)s мільярдів" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f трильйон" +msgstr[1] "%(value).1f трильйони" +msgstr[2] "%(value).1f трильйонів" +msgstr[3] "%(value).1f трильйонів" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s трильйон" +msgstr[1] "%(value)s трильйони" +msgstr[2] "%(value)s трильйонів" +msgstr[3] "%(value)s трильйонів" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f квадрильйон" +msgstr[1] "%(value).1f квадрильйони" +msgstr[2] "%(value).1f квадрильйонів" +msgstr[3] "%(value).1f квадрильйонів" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s квадрильйон" +msgstr[1] "%(value)s квадрильйони" +msgstr[2] "%(value)s квадрильйонів" +msgstr[3] "%(value)s квадрильйонів" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f квінтильйон" +msgstr[1] "%(value).1f квінтильйони" +msgstr[2] "%(value).1f квінтильйонів" +msgstr[3] "%(value).1f квінтильйонів" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s квінтильйон" +msgstr[1] "%(value)s квінтильйони" +msgstr[2] "%(value)s квінтильйонів" +msgstr[3] "%(value)s квінтильйонів" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f секстильйон" +msgstr[1] "%(value).1f секстильйони" +msgstr[2] "%(value).1f секстильйонів" +msgstr[3] "%(value).1f секстильйонів" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s секстильйон" +msgstr[1] "%(value)s секстильйони" +msgstr[2] "%(value)s секстильйонів" +msgstr[3] "%(value)s секстильйонів" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f септильйон" +msgstr[1] "%(value).1f септильйони" +msgstr[2] "%(value).1f септильйонів" +msgstr[3] "%(value).1f септильйонів" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s септильйон" +msgstr[1] "%(value)s септильйони" +msgstr[2] "%(value)s септильйонів" +msgstr[3] "%(value)s септильйонів" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f октильйон" +msgstr[1] "%(value).1f октильйони" +msgstr[2] "%(value).1f октильйонів" +msgstr[3] "%(value).1f октильйонів" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s октильйон" +msgstr[1] "%(value)s октильйони" +msgstr[2] "%(value)s октильйонів" +msgstr[3] "%(value)s октильйонів" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f нонільйон" +msgstr[1] "%(value).1f нонільйони" +msgstr[2] "%(value).1f нонільйонів" +msgstr[3] "%(value).1f нонільйонів" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s нонільйон" +msgstr[1] "%(value)s нонільйони" +msgstr[2] "%(value)s нонільйонів" +msgstr[3] "%(value)s нонільйонів" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f децильйон" +msgstr[1] "%(value).1f децильйони" +msgstr[2] "%(value).1f децильйонів" +msgstr[3] "%(value).1f децильйонів" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s децильйон" +msgstr[1] "%(value)s децильйони" +msgstr[2] "%(value)s децильйонів" +msgstr[3] "%(value)s децильйонів" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f гугол" +msgstr[1] "%(value).1f гуголи" +msgstr[2] "%(value).1f гуголів" +msgstr[3] "%(value).1f гуголів" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s гугол" +msgstr[1] "%(value)s гуголи" +msgstr[2] "%(value)s гуголів" +msgstr[3] "%(value)s гуголів" + +msgid "one" +msgstr "один" + +msgid "two" +msgstr "два" + +msgid "three" +msgstr "три" + +msgid "four" +msgstr "чотири" + +msgid "five" +msgstr "п'ять" + +msgid "six" +msgstr "шість" + +msgid "seven" +msgstr "сім" + +msgid "eight" +msgstr "вісім" + +msgid "nine" +msgstr "дев'ять" + +msgid "today" +msgstr "сьогодні" + +msgid "tomorrow" +msgstr "завтра" + +msgid "yesterday" +msgstr "вчора" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s ago" +msgstr "%(delta)s тому" + +#. Translators: 'naturaltime-past' strings will be included in +#. '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d рік" +msgstr[1] "%d роки" +msgstr[2] "%d років" +msgstr[3] "%d років" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d місяць" +msgstr[1] "%d місяці" +msgstr[2] "%d місяців" +msgstr[3] "%d місяців" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d тиждень" +msgstr[1] "%d тижні" +msgstr[2] "%d тижнів" +msgstr[3] "%d тижнів" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дня" +msgstr[2] "%d днів" +msgstr[3] "%d днів" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d година" +msgstr[1] "%d години" +msgstr[2] "%d годин" +msgstr[3] "%d годин" + +#, python-format +msgctxt "naturaltime-past" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d хвилина" +msgstr[1] "%d хвилини" +msgstr[2] "%d хвилин" +msgstr[3] "%d хвилин" + +msgid "now" +msgstr "зараз" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s секунду тому" +msgstr[1] "%(count)s секунди тому" +msgstr[2] "%(count)s секунд тому" +msgstr[3] "%(count)s секунд тому" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s хвилину тому" +msgstr[1] "%(count)s хвилини тому" +msgstr[2] "%(count)s хвилин тому" +msgstr[3] "%(count)s хвилин тому" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s годину тому" +msgstr[1] "%(count)s години тому" +msgstr[2] "%(count)s годин тому" +msgstr[3] "%(count)s годин тому" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "через %(delta)s" + +#. Translators: 'naturaltime-future' strings will be included in +#. '%(delta)s from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%d year" +msgid_plural "%d years" +msgstr[0] "%d рік" +msgstr[1] "%d роки" +msgstr[2] "%d років" +msgstr[3] "%d років" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d month" +msgid_plural "%d months" +msgstr[0] "%d місяць" +msgstr[1] "%d місяці" +msgstr[2] "%d місяців" +msgstr[3] "%d місяців" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d week" +msgid_plural "%d weeks" +msgstr[0] "%d тиждень" +msgstr[1] "%d тижні" +msgstr[2] "%d тижнів" +msgstr[3] "%d тижнів" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d день" +msgstr[1] "%d дні" +msgstr[2] "%d днів" +msgstr[3] "%d днів" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d hour" +msgid_plural "%d hours" +msgstr[0] "%d годину" +msgstr[1] "%d години" +msgstr[2] "%d годин" +msgstr[3] "%d годин" + +#, python-format +msgctxt "naturaltime-future" +msgid "%d minute" +msgid_plural "%d minutes" +msgstr[0] "%d хвилину" +msgstr[1] "%d хвилини" +msgstr[2] "%d хвилин" +msgstr[3] "%d хвилин" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s секунда від цього часу" +msgstr[1] "%(count)s секунди від цього часу" +msgstr[2] "%(count)s секунд від цього часу" +msgstr[3] "%(count)s секунд від цього часу" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s хвилина від цього часу" +msgstr[1] "%(count)s хвилини від цього часу" +msgstr[2] "%(count)s хвилин від цього часу" +msgstr[3] "%(count)s хвилин від цього часу" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s година від цього часу" +msgstr[1] "%(count)s години від цього часу" +msgstr[2] "%(count)s годин від цього часу" +msgstr[3] "%(count)s годин від цього часу" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..078d2e9fc3854556af8cbdeb473f174d4ba1d940 GIT binary patch literal 1347 zcmaiyO=uHA6vxMJjo)9l3e$twB9rX;RlBt!Y72f8t3)q~ux2Oemd#9+xOo$|Gc;4%Yn^L2-YD)7vde_ z2;$xb99W;gW8i1YA7C%??u~?O0k46Z!JC$MKx}f?=J&x($O~34f#%-0)hkxlmNonS zq2(iRJL>D8@p%mH02jao^zsxm{kUkt@Gj_rv!J>6+VTUq75PUn1AYRrNz3YAt^UpC z-$88h1BdbXY4vSr-uUdXJPhtf-UXWaEVvgu38KCBtOr1I$M~$R-FPtbpnb9vVZOiV z%Xl0_m}Pv8mzj4TVi%&*+GE9ShDUoQ{HV%%vu=?-2%{*J;=fwCLtQ6Ls}6;~MIM&M zG%1D?oD^kM5fKm(3Qip6YL9oKPC$Zqk8(0H!b^)aWPx&72Vx<$2r@rK(@zEYJP2M{ld3N_)n%u6VgztyarwV;2_r zWVRs7xz&Nz5ZSxAs>=0dMy`wut&i?zoy;XEG#6-Ts)E@xpVYZZa&3K?b2HdGzdqQ2*}Hqg9m|jjGCz*sxUP*rTG-PUFE719bIqut(7D zLF)DnWd8auCC}5D)_hw3znIQ;sO&7hNmk(buW$P2i=>e*BumZrBz=#^db3WN^`w!k zkYqWXOI{@_NrR;IbdDsA)_il3BulM%D+7&W3H9yUt?6{e)XpW1=G%4|#%a61SjDrn Xo-DVfX>&21X}go=a`F-;OKajU6L@(3 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 0000000..2e889dd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,261 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Humanize" +msgstr "" + +msgid "th" +msgstr "واں" + +msgid "st" +msgstr "پہلا" + +msgid "nd" +msgstr "دوسرا" + +msgid "rd" +msgstr "تیسرا" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f ملین" +msgstr[1] "%(value).1f ملین" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f بلین" +msgstr[1] "%(value).1f بلین" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f ٹریلین" +msgstr[1] "%(value).1f ٹریلین" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "" +msgstr[1] "" + +msgid "one" +msgstr "ایک" + +msgid "two" +msgstr "دو" + +msgid "three" +msgstr "تین" + +msgid "four" +msgstr "چار" + +msgid "five" +msgstr "پانچ" + +msgid "six" +msgstr "چھ" + +msgid "seven" +msgstr "سات" + +msgid "eight" +msgstr "آتھ" + +msgid "nine" +msgstr "نو" + +msgid "today" +msgstr "آج" + +msgid "tomorrow" +msgstr "آئندہ کل" + +msgid "yesterday" +msgstr "گزستہ کل" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "" + +msgid "now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "" +msgstr[1] "" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "" +msgstr[1] "" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c0b900c798a9f98e4d3aab1efbdef3f2c0a26b6 GIT binary patch literal 3646 zcmai#UyKt)9LEPmPwO8LMLRm5dF6yTDP<1_#0OTK`<@KWPr!!&nyf z9hybZ!uTD{ufP$E?|@st4fjUzC&8yN79i>8w0>3ddyt<0kLJ)o6z90+Yv3U4AA$FQ z-+&b7Hb~F^TaSlfr14>pgJ;3#z>6T3#BPCj7525}ci;w$Z-Y;Pe}H#^tL~5d)_|0% zb($MNvTp_{-ZNSs*7`QhthR60oB$D;?Exv?OCWyi5H9CYlM~=-jDN`>CioY)8C>@O zV~>L4Am#56_yp*I>%lj{wcsMS3A_eUoqqt=fq#MzgP8}Td~5*8uK+#*zM}QhAjNwd zd>p(2(sP^OM(|tB-$8obz(djdYyv5NTfxV`y?T5?k9|FU1EhHGgOvZzG_Qe_$1g#O zdjrIe{fGETFv#E8$rtdQy}Gi2&6jXwZ0QX z89IBL{OEh3Jg-5Asnh8F=v{Nsuydt7Lycll-YK`V-^S3fl{+~FIt@!_NMEN>t+(m> zL6CAx%|fU8Z>2#`@=SY$@k+J+7Kjl^`t}p*rD~Y1P)2uqa@A#EONQ2}V;+Zt*OM|Cb z^^3~jYgW(H>{4LxUS4;lDf*e3Sr0|ki3%Czv57^bRgQqnaHxk>9QVaQWL zfAvD1R?>9~xk*dcEaWE5RIQLNr=}}Kz9!XBrjRcqrb?U9dUKXVO-+z^*9Q6DtRYOQNFektnFy5(knc zCS55QrNak<5(`CLNEW&aEL2RD@e71t$}iasTs=Ps;H&0+))1i*0m(-L|FkG7>tM+` zDS{A3V}X}W+tTqf$3)c+lrqT3M0^gp?@3eAx zD?iTj`9f}dG?&li;AkBab(dl;`Hfq-UDoy;JU>y``TS@OEpylol{FjKGOXCj4+@;_ z`APH_>b6u1-rj~?_WiMly3KYG@j2&{dw=$BmS6!^p`SH&wW@Vc8hTA?yq`~AQR3tUz^!*DXcn@6{k zx!sw>Ux;cquO)@RZ8y)=I2o2MNtcAFtDOu^uL4VAvl&<Ji-q^u9#@ zs(Wmy1te|V%CY!7?Kyd><<@nDoZR}f-Mm=D#Q1QHETLWN6&<(rLBr@CSyJxp<|TtW zcd#Wcaq^yREqd(8&DT9P)oxyptk_yCmif&K^qlyt!xFlu9?ikAHeGIgB3ZrNyo!S# zOLwCwY^L3OPtiFy)xQ2=gB@=z*7QL)WwQgVFYwoZ6YYr8y4>KN?Xm;ZNygtJ`xntp B`UL<0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000..4b7cd6e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,235 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# xgenvn , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "Humanize" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f triệu" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s triệu" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f tỷ" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s tỷ" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f nghìn tỷ" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s nghìn tỷ" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f triệu tỷ" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s triệu tỷ" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f tỷ tỷ" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s tỷ tỷ" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f nghìn tỷ tỷ" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s nghỉn tỷ tỷ" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f triệu tỷ tỷ" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s triệu tỷ tỷ" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s tỷ tỷ tỷ" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f nghìn tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s nghỉn tỷ tỷ tỷ" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f triệu tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s triệu tỷ tỷ tỷ" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f tỷ tỷ tỷ tỷ" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s tỷ tỷ tỷ tỷ" + +msgid "one" +msgstr "Một" + +msgid "two" +msgstr "Hai" + +msgid "three" +msgstr "Ba" + +msgid "four" +msgstr "Bốn" + +msgid "five" +msgstr "Năm" + +msgid "six" +msgstr "Sáu" + +msgid "seven" +msgstr "Bảy" + +msgid "eight" +msgstr "Tám" + +msgid "nine" +msgstr "Chín" + +msgid "today" +msgstr "Hôm nay" + +msgid "tomorrow" +msgstr "Ngày mai" + +msgid "yesterday" +msgstr "Hôm qua" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "cách đây %(delta)s" + +msgid "now" +msgstr "vừa mới đây" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s giây trước" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s phút trước" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s giờ trước" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s sau" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s giây sau" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s phút sau" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s giờ sau" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5e5b7814d63c54968de0e1bdf551cfa2cc6cd429 GIT binary patch literal 3573 zcmai#U2GIp6vwZKBI^eVDk2J35NR#bokg(iVu`VW5Q`El`rv~Zc5iow?9Q}vXImgK z!5|{v1{6j7j2JLzLSi&+AsRK&#HfiM5EG3r?zYhf@L3=9e|Ar&W%h2o>Dk}h|2cE+ z+;i?sf15e=C4rHG-3B{;nGjvzlFRXf(LPm(#b5{60y^L#a6juGvi=Km+7&`1;lGEO z0WHiAGd}~HF~0~d1m|2?%ijs!fw=-n-^KbV=8qt){||HVv|66Wm`{U?;6DLg1%3-s zp7S8B|2NN@;G}ssD8X&u-QY10k0ibXu@&(R^Lua(=I6nA;9uYraK`jn+)R*4HJdpX zB>#Mn@-1M!iS;GSB>R^#+d-rjD?!Tl5QsnVFn*4rCmX?;m|si?F&CV2wGg+0^FY!& zK+?Ne&og&0-(U_ie*&xd!0RdBHMM=t0&l_G0!d%Z`V*}8GxspxVV-541L?jCAU*%T z;7#E4Yipbj(z?r;Ygm7h*$>kGcQN-e4}z5UF!MM_b^eI`Lm-ZZILq@d*#8yJzh-{N z`VY)=tp5zs{l7AQXZ=r}UjWgD>e;3~(fdO6r@dSUqj4jQ&WcSF9&~1C(4Of1x*bO6 ztrbS=QLV=ZmJldcbMacmwg7e)O(qSA>pNjBle8OfjrLaGH|hnQ#~H9$ zFnZUhemBEr!{);#59--sSQBg^49BiI=-t4pgqN*pz$uheb8D(sZgL9+*Z2Nc%c_ha z(yZouKj#-NNokOZhI}T?^F2ePS@koaA=a$+mz->1h;FRAo+*2O$*gPDX9{m9Z!t$3 z<#i3qF9q^Xp@!= z#JUzyq(L+^D3aEcijL=QQ^G;fyi%y7lk@QkW&DyCHtWyds;RmvM=`yDUqtx^O@Wcm z!P8`XFB{KTQ^zxMOmx?zrN;v!pX15AUkc(0N#k@J5Zy5;TP-T`C^wf6MXx)cL@(|a zo)eY=rx3bDHFZ%_Ruw|0xt7%Ii4u8P;klj?R1O~uvO=o?5jqrM9)E#SBJ{J) zR{R$IAV6$5=!>mNhbka>ec*3anb2CBwH{Z2#-}kYvzr|+=O;F(K0gSpbvox}tp`du zZT0wRnOOg5kJS|@Cq%6EpcAUJTxzG5TXxDywaHW}ZMU`9DceS%wLuNIlyf4k&9XbJ zREJF6n_gzO*cgd!M~7BV;CQ;=gnp2g-KwBux9{cTeL9m@MJJ>0&lMfF(3h`KFbZ4@*uW=MOO>$fQsjf$o z&53nu*R7f;LaNnHbopMWJUraiKI}5Y8Bg{V9M@YRGkGV_D(u|Yv)XE(h@<6tRbZ|1 zGJe+ea%tJV$ql0?PRr_AiS-3)xwYC4iaIU5zUowWrdG(>Wv9I&aml}v%Km4{BcEO( zp~CjqtIwuVqwl{xdSp1}BadwxTw_N+DG%+6Mb|Q!!g-YrLnd}DZ|qvu*wxl80tP~SD;)RGj@iIh?co8B;yabUWUVz9E-@cZ-`SQrf==Kwp zeMitd{z_J!f9{V%ZI(FhvJdmVVROR%+(U(7t2eMj=t?WD{ z$|Em|%CTd}KK{XqZka4#eSD?L!>^061E(vmofPGv?ev{05A6_@ogeU5sywt?l+Wy` T9Dh%YzH)$29@&S>lXUqXr(ET! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 0000000..8eb6c92 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,239 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Lele Long , 2015 +# Ronald White , 2014 +# Xiang Yu , 2014 +# Ziang Song , 2011 +# Kevin Sze , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Lele Long \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "人性化" + +msgid "th" +msgstr "th" + +msgid "st" +msgstr "st" + +msgid "nd" +msgstr "nd" + +msgid "rd" +msgstr "rd" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f 百万" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s 百万" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f 十亿" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s 十亿" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f 万亿" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s 万亿" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f 1000的5次方" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s 1000的5次方" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f 1000的4次方" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s 1000的4次方" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f 1000的7次方" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s 1000的7次方" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f 1000的8次方" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s 1000的8次方" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f 1000的9次方" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s 1000的9次方" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f 1000的10次方" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s 1000的10次方" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f 1000的11次方" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s 1000的11次方" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f 10的100次方" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s 10的100次方" + +msgid "one" +msgstr "一" + +msgid "two" +msgstr "二" + +msgid "three" +msgstr "三" + +msgid "four" +msgstr "四" + +msgid "five" +msgstr "五" + +msgid "six" +msgstr "六" + +msgid "seven" +msgstr "七" + +msgid "eight" +msgstr "八" + +msgid "nine" +msgstr "九" + +msgid "today" +msgstr "今天" + +msgid "tomorrow" +msgstr "明天" + +msgid "yesterday" +msgstr "昨天" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s 之前" + +msgid "now" +msgstr "现在" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s秒之前" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s分钟之前" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s小时之前" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s 之后" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s秒以后" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s分钟以后" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s小时以后" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..909a067f6bd50786272dfcbed776a85557813c5a GIT binary patch literal 3314 zcmai#TZ|M%6oyMhltH}U1@T&-E4wVcGh;+xmNmu|B8g--IBKE~q?xImX`HDZx~g|s zOc3M}F(4=+5JZfk3sE9(;9@pPd{7g-B>I3R2IKUOw-=)iCcgMrckM7eQyVLL`s?%e zsnd1pRL}l6bILw~VZm;LZM}q$9`KJ#alyE786oq)pTJIV+7v?Cz=fdFp9Yn_Me_qN z3I7Mp>6b^jyEPrK1JCz^cY&XPDo+5;0cT8&^dzYC$26Y>)qCF7{0dZg{?%-|B3f4; zcqMcnRQWf8s;9KAeK&~<}f%L{zmW)@PO7&f!GrAk>Bj4kq=KTy#18d+B?D?PIO!zM+A|3^Agnvr==QJ;9{-rr}dK5n! zyaw?Lw7*pQec-jwS8G)~(K{yxojHBV`NrgkT@|f=7O3*g(Od|s z_pQ);O6$*PJ_oA$_iFCfJOrwFM?m$ylUg4G(PDB|`=4u`)BHyBJ5a@)*Sw(hn)ZJO zvCZLGm=CHkHv(w~uZG>NeO1pa*zK@RnCd^uCbz)UP~QoKss5o2;l2Z5{}k0wy;DP- ziHXsMo10+QX<;6CGfaPK;rUXJ?u4l`cmqtGVRg>cz>y^jU??RVYM)fi_rTPi-U`Dp z3cn*D+)vWhK4_PG*3p$7plh5`$#MDrYI&A3M4Hut>lWNnETusz8}gYn?s7wO zyWrvz%DFz59pdbpkt#yD9y8#%Wo+M&DX{*`#%gjd&o^g`)QOBbrar6T)f0jBXEvur z*Y}zeDov-;0reRT*`lcW6Xq0(k_vXC-NOL`lt0>WR3+ z8Bu%Tf`Sb)PK2|b$fCy>k#61|#^_VRYYdvgBmZA5i(hIFr+Db2?>2xNw zs56yLr4VSXVuOy#c`*}@Ik)@(Ch>xA7nqf0b~%Gc?0{gjJ!?BdHt(SAMJX$pWO8U| zs7tEc&H!7lrY586CQ#COk{gPvvri^F5-V4%Ty}9Q(p{-UugfLlSmJO6wMv}sWTj*~ zyqo5VwkMeEc|5z^T6{51y>5Vc)-s-R^Qa?37q4+-eaRUbzAMpRQq8uOyIxsjD6fRB z=t+0e=(Z=-orwJ-33hD`wr*{f#zzmwq}uV5!O@ZNeW&B0u?CeURzWDl-`uo% zf8BE+*s-fs8{65S)ka>42Pq*I5uDsT ze(?Etkk$|vY4k7Erk3#j#JJEy*L8YvIc$n07j|HzEBh}NJU|TTz1h|7# W&%78MJx<0CyrfVa-HF>{>h?d_0-PlP literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po new file mode 100644 index 0000000..72ae856 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/humanize/locale/zh_Hant/LC_MESSAGES/django.po @@ -0,0 +1,238 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Chen Chun-Chia , 2015 +# Jannis Leidel , 2011 +# tcc , 2011 +# Tzu-ping Chung , 2016 +# Yeh-Yung , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Humanize" +msgstr "人性化" + +msgid "th" +msgstr "" + +msgid "st" +msgstr "" + +msgid "nd" +msgstr "" + +msgid "rd" +msgstr "" + +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f 百萬" + +#, python-format +msgid "%(value)s million" +msgid_plural "%(value)s million" +msgstr[0] "%(value)s 百萬" + +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f 十億" + +#, python-format +msgid "%(value)s billion" +msgid_plural "%(value)s billion" +msgstr[0] "%(value)s 十億" + +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f 兆" + +#, python-format +msgid "%(value)s trillion" +msgid_plural "%(value)s trillion" +msgstr[0] "%(value)s 兆" + +#, python-format +msgid "%(value).1f quadrillion" +msgid_plural "%(value).1f quadrillion" +msgstr[0] "%(value).1f 千兆" + +#, python-format +msgid "%(value)s quadrillion" +msgid_plural "%(value)s quadrillion" +msgstr[0] "%(value)s 千兆" + +#, python-format +msgid "%(value).1f quintillion" +msgid_plural "%(value).1f quintillion" +msgstr[0] "%(value).1f 百京" + +#, python-format +msgid "%(value)s quintillion" +msgid_plural "%(value)s quintillion" +msgstr[0] "%(value)s 百京" + +#, python-format +msgid "%(value).1f sextillion" +msgid_plural "%(value).1f sextillion" +msgstr[0] "%(value).1f 十垓" + +#, python-format +msgid "%(value)s sextillion" +msgid_plural "%(value)s sextillion" +msgstr[0] "%(value)s 十垓" + +#, python-format +msgid "%(value).1f septillion" +msgid_plural "%(value).1f septillion" +msgstr[0] "%(value).1f 秭" + +#, python-format +msgid "%(value)s septillion" +msgid_plural "%(value)s septillion" +msgstr[0] "%(value)s 秭" + +#, python-format +msgid "%(value).1f octillion" +msgid_plural "%(value).1f octillion" +msgstr[0] "%(value).1f 千秭" + +#, python-format +msgid "%(value)s octillion" +msgid_plural "%(value)s octillion" +msgstr[0] "%(value)s 千秭" + +#, python-format +msgid "%(value).1f nonillion" +msgid_plural "%(value).1f nonillion" +msgstr[0] "%(value).1f 百穰" + +#, python-format +msgid "%(value)s nonillion" +msgid_plural "%(value)s nonillion" +msgstr[0] "%(value)s 百穰" + +#, python-format +msgid "%(value).1f decillion" +msgid_plural "%(value).1f decillion" +msgstr[0] "%(value).1f 十溝" + +#, python-format +msgid "%(value)s decillion" +msgid_plural "%(value)s decillion" +msgstr[0] "%(value)s 十溝" + +#, python-format +msgid "%(value).1f googol" +msgid_plural "%(value).1f googol" +msgstr[0] "%(value).1f 穰大數" + +#, python-format +msgid "%(value)s googol" +msgid_plural "%(value)s googol" +msgstr[0] "%(value)s 穰大數" + +msgid "one" +msgstr "一" + +msgid "two" +msgstr "二" + +msgid "three" +msgstr "三" + +msgid "four" +msgstr "四" + +msgid "five" +msgstr "五" + +msgid "six" +msgstr "六" + +msgid "seven" +msgstr "七" + +msgid "eight" +msgstr "八" + +msgid "nine" +msgstr "九" + +msgid "today" +msgstr "今天" + +msgid "tomorrow" +msgstr "明天" + +msgid "yesterday" +msgstr "昨天" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s ago" +msgstr "%(delta)s 以前" + +msgid "now" +msgstr "現在" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "%(count)s 秒前" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "%(count)s 分鐘前" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour ago" +msgid_plural "%(count)s hours ago" +msgstr[0] "%(count)s 小時前" + +#, python-format +msgctxt "naturaltime" +msgid "%(delta)s from now" +msgstr "%(delta)s 後" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a second from now" +msgid_plural "%(count)s seconds from now" +msgstr[0] "%(count)s 秒後" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "a minute from now" +msgid_plural "%(count)s minutes from now" +msgstr[0] "%(count)s 分鐘後" + +#. Translators: please keep a non-breaking space (U+00A0) +#. between count and time unit. +#, python-format +msgid "an hour from now" +msgid_plural "%(count)s hours from now" +msgstr[0] "%(count)s 小時後" diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__init__.py b/env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c441b6e82ecd670c765ab26cbc6553bce7bb9d2 GIT binary patch literal 162 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m%n~VZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rYWD=ErM($6T(P0Y)zO4Tn(%`M1DEJ-a%OfS}t ekI&4@EQycTE2zB1VUwGmQks)$2ePObh#3I6Oewqo literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__pycache__/humanize.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/humanize/templatetags/__pycache__/humanize.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07f49989f5ce002165b1f4e371e894d597082c5e GIT binary patch literal 8123 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 or see #19988 + return mark_safe(value) + + +@register.filter(is_safe=True) +def intcomma(value, use_l10n=True): + """ + Convert an integer to a string containing commas every three digits. + For example, 3000 becomes '3,000' and 45000 becomes '45,000'. + """ + if settings.USE_L10N and use_l10n: + try: + if not isinstance(value, (float, Decimal)): + value = int(value) + except (TypeError, ValueError): + return intcomma(value, False) + else: + return number_format(value, force_grouping=True) + orig = str(value) + new = re.sub(r"^(-?\d+)(\d{3})", r'\g<1>,\g<2>', orig) + if orig == new: + return new + else: + return intcomma(new, use_l10n) + + +# A tuple of standard large number to their converters +intword_converters = ( + (6, lambda number: ( + ngettext('%(value).1f million', '%(value).1f million', number), + ngettext('%(value)s million', '%(value)s million', number), + )), + (9, lambda number: ( + ngettext('%(value).1f billion', '%(value).1f billion', number), + ngettext('%(value)s billion', '%(value)s billion', number), + )), + (12, lambda number: ( + ngettext('%(value).1f trillion', '%(value).1f trillion', number), + ngettext('%(value)s trillion', '%(value)s trillion', number), + )), + (15, lambda number: ( + ngettext('%(value).1f quadrillion', '%(value).1f quadrillion', number), + ngettext('%(value)s quadrillion', '%(value)s quadrillion', number), + )), + (18, lambda number: ( + ngettext('%(value).1f quintillion', '%(value).1f quintillion', number), + ngettext('%(value)s quintillion', '%(value)s quintillion', number), + )), + (21, lambda number: ( + ngettext('%(value).1f sextillion', '%(value).1f sextillion', number), + ngettext('%(value)s sextillion', '%(value)s sextillion', number), + )), + (24, lambda number: ( + ngettext('%(value).1f septillion', '%(value).1f septillion', number), + ngettext('%(value)s septillion', '%(value)s septillion', number), + )), + (27, lambda number: ( + ngettext('%(value).1f octillion', '%(value).1f octillion', number), + ngettext('%(value)s octillion', '%(value)s octillion', number), + )), + (30, lambda number: ( + ngettext('%(value).1f nonillion', '%(value).1f nonillion', number), + ngettext('%(value)s nonillion', '%(value)s nonillion', number), + )), + (33, lambda number: ( + ngettext('%(value).1f decillion', '%(value).1f decillion', number), + ngettext('%(value)s decillion', '%(value)s decillion', number), + )), + (100, lambda number: ( + ngettext('%(value).1f googol', '%(value).1f googol', number), + ngettext('%(value)s googol', '%(value)s googol', number), + )), +) + + +@register.filter(is_safe=False) +def intword(value): + """ + Convert a large integer to a friendly text representation. Works best + for numbers over 1 million. For example, 1000000 becomes '1.0 million', + 1200000 becomes '1.2 million' and '1200000000' becomes '1.2 billion'. + """ + try: + value = int(value) + except (TypeError, ValueError): + return value + + if value < 1000000: + return value + + def _check_for_i18n(value, float_formatted, string_formatted): + """ + Use the i18n enabled defaultfilters.floatformat if possible + """ + if settings.USE_L10N: + value = defaultfilters.floatformat(value, 1) + template = string_formatted + else: + template = float_formatted + return template % {'value': value} + + for exponent, converters in intword_converters: + large_number = 10 ** exponent + if value < large_number * 1000: + new_value = value / large_number + return _check_for_i18n(new_value, *converters(new_value)) + return value + + +@register.filter(is_safe=True) +def apnumber(value): + """ + For numbers 1-9, return the number spelled out. Otherwise, return the + number. This follows Associated Press style. + """ + try: + value = int(value) + except (TypeError, ValueError): + return value + if not 0 < value < 10: + return value + return (_('one'), _('two'), _('three'), _('four'), _('five'), + _('six'), _('seven'), _('eight'), _('nine'))[value - 1] + + +# Perform the comparison in the default time zone when USE_TZ = True +# (unless a specific time zone has been applied with the |timezone filter). +@register.filter(expects_localtime=True) +def naturalday(value, arg=None): + """ + For date values that are tomorrow, today or yesterday compared to + present day return representing string. Otherwise, return a string + formatted according to settings.DATE_FORMAT. + """ + try: + tzinfo = getattr(value, 'tzinfo', None) + value = date(value.year, value.month, value.day) + except AttributeError: + # Passed value wasn't a date object + return value + except ValueError: + # Date arguments out of range + return value + today = datetime.now(tzinfo).date() + delta = value - today + if delta.days == 0: + return _('today') + elif delta.days == 1: + return _('tomorrow') + elif delta.days == -1: + return _('yesterday') + return defaultfilters.date(value, arg) + + +# This filter doesn't require expects_localtime=True because it deals properly +# with both naive and aware datetimes. Therefore avoid the cost of conversion. +@register.filter +def naturaltime(value): + """ + For date and time values show how many seconds, minutes, or hours ago + compared to current timestamp return representing string. + """ + if not isinstance(value, date): # datetime is a subclass of date + return value + + now = datetime.now(utc if is_aware(value) else None) + if value < now: + delta = now - value + if delta.days != 0: + # Translators: delta will contain a string like '2 months' or '1 month, 2 weeks' + return _('%(delta)s ago') % {'delta': defaultfilters.timesince(value, now, time_strings={ + # Translators: 'naturaltime-past' strings will be included in + # '%(delta)s ago' + 'year': npgettext_lazy('naturaltime-past', '%d year', '%d years'), + 'month': npgettext_lazy('naturaltime-past', '%d month', '%d months'), + 'week': npgettext_lazy('naturaltime-past', '%d week', '%d weeks'), + 'day': npgettext_lazy('naturaltime-past', '%d day', '%d days'), + 'hour': npgettext_lazy('naturaltime-past', '%d hour', '%d hours'), + 'minute': npgettext_lazy('naturaltime-past', '%d minute', '%d minutes') + })} + elif delta.seconds == 0: + return _('now') + elif delta.seconds < 60: + return ngettext( + # Translators: please keep a non-breaking space (U+00A0) + # between count and time unit. + 'a second ago', '%(count)s seconds ago', delta.seconds + ) % {'count': delta.seconds} + elif delta.seconds // 60 < 60: + count = delta.seconds // 60 + return ngettext( + # Translators: please keep a non-breaking space (U+00A0) + # between count and time unit. + 'a minute ago', '%(count)s minutes ago', count + ) % {'count': count} + else: + count = delta.seconds // 60 // 60 + return ngettext( + # Translators: please keep a non-breaking space (U+00A0) + # between count and time unit. + 'an hour ago', '%(count)s hours ago', count + ) % {'count': count} + else: + delta = value - now + if delta.days != 0: + # Translators: delta will contain a string like '2 months' or '1 month, 2 weeks' + return _('%(delta)s from now') % {'delta': defaultfilters.timeuntil(value, now, time_strings={ + # Translators: 'naturaltime-future' strings will be included in + # '%(delta)s from now' + 'year': npgettext_lazy('naturaltime-future', '%d year', '%d years'), + 'month': npgettext_lazy('naturaltime-future', '%d month', '%d months'), + 'week': npgettext_lazy('naturaltime-future', '%d week', '%d weeks'), + 'day': npgettext_lazy('naturaltime-future', '%d day', '%d days'), + 'hour': npgettext_lazy('naturaltime-future', '%d hour', '%d hours'), + 'minute': npgettext_lazy('naturaltime-future', '%d minute', '%d minutes') + })} + elif delta.seconds == 0: + return _('now') + elif delta.seconds < 60: + return ngettext( + # Translators: please keep a non-breaking space (U+00A0) + # between count and time unit. + 'a second from now', '%(count)s seconds from now', delta.seconds + ) % {'count': delta.seconds} + elif delta.seconds // 60 < 60: + count = delta.seconds // 60 + return ngettext( + # Translators: please keep a non-breaking space (U+00A0) + # between count and time unit. + 'a minute from now', '%(count)s minutes from now', count + ) % {'count': count} + else: + count = delta.seconds // 60 // 60 + return ngettext( + # Translators: please keep a non-breaking space (U+00A0) + # between count and time unit. + 'an hour from now', '%(count)s hours from now', count + ) % {'count': count} diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__init__.py b/env/lib/python3.5/site-packages/django/contrib/messages/__init__.py new file mode 100644 index 0000000..25da09f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/__init__.py @@ -0,0 +1,4 @@ +from django.contrib.messages.api import * # NOQA +from django.contrib.messages.constants import * # NOQA + +default_app_config = 'django.contrib.messages.apps.MessagesConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bcf43d737b5a065ccbcd82077b6c978051307d02 GIT binary patch literal 315 zcmZ{eu?oU45QZgGmQ{BNrdY)yY?I^3dvL zxcl!Jj-c}(@<95q3@Z=Zfsout=iHTh zp_80$bM205L$lagk;Ik?V=SGQw^^=tDp`bn)cn7%qV~T}q+2Jnvr%2fJ5i*LBcJ0l zVlQy?G0$6`Q|2> J6_kJk-U}V7T(kfH literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/api.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/api.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b595b27b71ec611bb1862dd9c5ab5f47623f36b1 GIT binary patch literal 3254 zcmcgvUvtw&5MSAHWIJ{eQV0~P6JiO>%RX^9IFiF9E* zJ95+WgIMq$=`y(t9NfVsm$2iAkwNHp3gm#cQxJ6&x13^HcHPh$ao0_&t~-iY9MHJt zx-Vld$X4EgxPZHL_t)3!YBXLS`{P@Cu^+Ho;n4kp-F~6g+0Y9I(c}l=P{Q9^&yAMr z-q>%95A1z= zw1~#MDS*5Ssz^+t?IsLMu=2)$Ukx}kLGFS=@)RMHJPR+v)58)BEjYw=d<0jD&_*J) zol^3kYU8z`6d#S1ts)y8XM1*T1qsx1ZVUc0=2F?QL}zHp>cq}f+Z&G?`jn2j-Q3+s zzMb*?O~>}cARh5h*`pXw*yFYr+TSZR-pS95_J+Kt*6c7+_Ua9}+DP1IQEd0TkR+te z7gjC>>iABS;cjGfhVQwiUo9(_G(&0<(#?H%F#(n8LO>aiL}aJDdD-w8_2ZY zN6Na=4-kpqAT3W6JtCS|rh`rFh`@3MJ1~nz9q&b>i1$)q4*LbOM@*-Serdnv4?UzH zr^o=bkDWrowP$v?ibbd$m%rG~Bh`*F@x;S^-}aTwU-?qWH9JD*i+x`b1Ly>O82XRM za$pCzDf7Izh;PR{U}0<%bdDjeqU5A;MEo1rbSyw=Y6yh}t!YE9<6vqC1^`kVnT(Wu zjbj6b1&Ze6-M{SeLw^*HZ0!R(>L0NNIgG5sY!L~@S);0-+(lOBNh^QEml~gLce~kc zZ`^OX51T(WA9lMoCMktfYuHhjc?QG3#RHqj{3-V%G(%T#}3zm;)({$%a14z9lwu}%3B*cGI{r(6X`M24YPl|!D_CV#ny-3%OsPy)5Lqgq zFQ1@%FDOX~3UomsBZzi_Tqg*EnS`K=Qz{qI@>f{}`wi6sk}}Mav4sCu&^>3an9G-H N<=T9$zC4%R{{R7k=pO(8 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/apps.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/apps.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..49a5ca44abc24fd246ccd76be89cbb3afaf64277 GIT binary patch literal 511 zcmYLFyH3L}6unN|s*e^PhjI#xjFf~0ox5i#<+$WN=2JE=8~q;A*`XJW^*DEGH{W{P;@r)@bLbdC43el=h$ z2)Y?K-!1+d%|DJiEgz?4%;%+`2Is9kiQ55JuO;(z&H2X%T;te<@c_ z`wN~-iUkw$U>%SS zL`DV>88v{&$OIyzCJ-I)2_yy}18}R<+NEZdnq6ugr75QYxC=qQcT_hYPZiD;E)}jM zgn`Mnh=rcew^W$Ch$6zdFh4>@6B-MHFqSf5Ox&mSOz3lOx)f%x9*^B15a!Fs_vYSA z7_RRxeXnn_wmg$r3bsN=p(}x`i8~#w7pu)`Gz(CtS}ojXcM*I6>nT&=XYAyM%*m2$ zuq~239?;$977yQZ2k$}}r_~gtG-t`yImq{hG2xEf;CV=Mew}@a=KUeX#hyIKF93ca O(a`>Sy{as|s(t}#{b1h! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/context_processors.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/context_processors.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef746ee25022e64d2cc0e3e83fdfb02fe6904cf4 GIT binary patch literal 561 zcmZ`$Jx{|h5IraTQq`hPU0BQ%WoUxBfe->gUty4=SQ;zu9`NC*T3NLd>Y8<3a~ zm{^+-*5Dl=s6kkVk=^*hF0jeEGv{iOa4FfGORRU!y^GU3|90Yg_ntqRA+5GD*U-<< zWgi3bDS%giH&Svb0+E5h=4#xgXg6FHBBhMRY_+6T#bD7{mMZ?D=o1qWo5q|nNuPNf zW7dsUCE&^%jZQDUjS$Pxf7h)FDd_)w&^AOl8ew9<`!ofAEVxu3AR4&y?Yk<;-8{+% z(;|w)LAsb6gu@5rh6|R?vnrJ;MKpCQHg_X?l8bDH)5?T&@}(#zQb(8N0va8ncdqSv zu=|VWY=E2!$YFV;1qOTnoxm2USgNGHgGSWaw?Y%y)~%x?3yYW^mv5sL^hnSA0T$MY A>Hq)$ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/middleware.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/middleware.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..685de1d53b6e5973ce330ea11b095289279ffbb8 GIT binary patch literal 1256 zcmaJ=%}x|S5U!coKNb+s#CWsy*uSlYVR*E57(1dpPB&RH(XmC)HiXPcPJ!29%KNy z2eAhpefyC4kOvS4?RNlK2l6h&UGR2f2V@t1pjj7G7cSAP2eJqIVgC=tgV1XRMp>H{ z#|HHksg6XQS#E5p#j&EJ-Bij zj4)$r;KGATk0f{C_Cs$k^fl59%>tjr3H_#HRCd(#wK}VnvA;kspvm8@kok+ki!pyG*H7(8jzw`?&R$7bSe+h@X7NV(6>Cv--mFx*Ob{}kMqea+4zxFUbc==P zhIK+!4f~*L)i#vi=pGh0dAc_Zal7|7gGFJl>7NKA ztkurB>D8_zO-wgkm!}!d5r!Sz#~VGM>w#9LDhs3HwYs4CmAsk`Hwvv7lI`leL9Ndn zJT-I$gB9XG9kemFm&(T!$3ji$|af06jX)T*{= kW+JI7trB6=vd}b)F8nnZ4wa*5u+i4?+M5Ad_3#(`1L)F2lmGw# literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..475a9b2c0864fdc87bc99b250ebf702ecadffa7f GIT binary patch literal 472 zcmYk3J5Iwu5Qb;{NJ2T=wh0?d7SrWWt{MSwg`^+;0ay62(xIpPSgw* z@yz`bA>9(=L^}CPwL|Ej))XjBiYyHZU^ZCMqYX0z>Aw+TYu5k( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/views.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/__pycache__/views.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b498e08f81527b21d2bf084333618e77ecb2486f GIT binary patch literal 931 zcmZuvO>fgc5S_IhJEZ9cjnpIZt@5FX)EiZ4sW@Qj9nYmsD6loENv1ClBv2`=Odn%e7qIBWgYN({ zjN{gWZ(lc89b(x~ZfxJ?hUN;w%+rFqbuN+47dH=_i?t3n{pW>sS#h6SVJ` zK*{??>N@g_r)4%X9#u14C3RI6TAIUus^K_ZaGqqb)|~%<-`Ar$uSQi`olToG6KBPO zzZT~o>ycQ*#k|};lCr2(Ivs5%IeJLtCq1mbC?EOsNErfP$9VZ{z?QGZ{|{xjJL;3V zbRJsoaOph+(h`xuiPedz0}MuvqMYgy96iBH@&W{Mv>g~*o<7(48DVh*UCxU*mzoeau4irW2B6o7I dQFYkLX@_Z(yJ{PcYMJikhSC+If^@ng_YZdR+q(b& literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/api.py b/env/lib/python3.5/site-packages/django/contrib/messages/api.py new file mode 100644 index 0000000..f0da168 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/api.py @@ -0,0 +1,96 @@ +from django.contrib.messages import constants +from django.contrib.messages.storage import default_storage + +__all__ = ( + 'add_message', 'get_messages', + 'get_level', 'set_level', + 'debug', 'info', 'success', 'warning', 'error', + 'MessageFailure', +) + + +class MessageFailure(Exception): + pass + + +def add_message(request, level, message, extra_tags='', fail_silently=False): + """ + Attempt to add a message to the request using the 'messages' app. + """ + try: + messages = request._messages + except AttributeError: + if not hasattr(request, 'META'): + raise TypeError( + "add_message() argument must be an HttpRequest object, not " + "'%s'." % request.__class__.__name__ + ) + if not fail_silently: + raise MessageFailure( + 'You cannot add messages without installing ' + 'django.contrib.messages.middleware.MessageMiddleware' + ) + else: + return messages.add(level, message, extra_tags) + + +def get_messages(request): + """ + Return the message storage on the request if it exists, otherwise return + an empty list. + """ + return getattr(request, '_messages', []) + + +def get_level(request): + """ + Return the minimum level of messages to be recorded. + + The default level is the ``MESSAGE_LEVEL`` setting. If this is not found, + use the ``INFO`` level. + """ + storage = getattr(request, '_messages', default_storage(request)) + return storage.level + + +def set_level(request, level): + """ + Set the minimum level of messages to be recorded, and return ``True`` if + the level was recorded successfully. + + If set to ``None``, use the default level (see the get_level() function). + """ + if not hasattr(request, '_messages'): + return False + request._messages.level = level + return True + + +def debug(request, message, extra_tags='', fail_silently=False): + """Add a message with the ``DEBUG`` level.""" + add_message(request, constants.DEBUG, message, extra_tags=extra_tags, + fail_silently=fail_silently) + + +def info(request, message, extra_tags='', fail_silently=False): + """Add a message with the ``INFO`` level.""" + add_message(request, constants.INFO, message, extra_tags=extra_tags, + fail_silently=fail_silently) + + +def success(request, message, extra_tags='', fail_silently=False): + """Add a message with the ``SUCCESS`` level.""" + add_message(request, constants.SUCCESS, message, extra_tags=extra_tags, + fail_silently=fail_silently) + + +def warning(request, message, extra_tags='', fail_silently=False): + """Add a message with the ``WARNING`` level.""" + add_message(request, constants.WARNING, message, extra_tags=extra_tags, + fail_silently=fail_silently) + + +def error(request, message, extra_tags='', fail_silently=False): + """Add a message with the ``ERROR`` level.""" + add_message(request, constants.ERROR, message, extra_tags=extra_tags, + fail_silently=fail_silently) diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/apps.py b/env/lib/python3.5/site-packages/django/contrib/messages/apps.py new file mode 100644 index 0000000..0ff25d3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class MessagesConfig(AppConfig): + name = 'django.contrib.messages' + verbose_name = _("Messages") diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/constants.py b/env/lib/python3.5/site-packages/django/contrib/messages/constants.py new file mode 100644 index 0000000..b431448 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/constants.py @@ -0,0 +1,21 @@ +DEBUG = 10 +INFO = 20 +SUCCESS = 25 +WARNING = 30 +ERROR = 40 + +DEFAULT_TAGS = { + DEBUG: 'debug', + INFO: 'info', + SUCCESS: 'success', + WARNING: 'warning', + ERROR: 'error', +} + +DEFAULT_LEVELS = { + 'DEBUG': DEBUG, + 'INFO': INFO, + 'SUCCESS': SUCCESS, + 'WARNING': WARNING, + 'ERROR': ERROR, +} diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/context_processors.py b/env/lib/python3.5/site-packages/django/contrib/messages/context_processors.py new file mode 100644 index 0000000..b4b2095 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/context_processors.py @@ -0,0 +1,13 @@ +from django.contrib.messages.api import get_messages +from django.contrib.messages.constants import DEFAULT_LEVELS + + +def messages(request): + """ + Return a lazy 'messages' context variable as well as + 'DEFAULT_MESSAGE_LEVELS'. + """ + return { + 'messages': get_messages(request), + 'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS, + } diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/middleware.py b/env/lib/python3.5/site-packages/django/contrib/messages/middleware.py new file mode 100644 index 0000000..d5b787c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/middleware.py @@ -0,0 +1,26 @@ +from django.conf import settings +from django.contrib.messages.storage import default_storage +from django.utils.deprecation import MiddlewareMixin + + +class MessageMiddleware(MiddlewareMixin): + """ + Middleware that handles temporary messages. + """ + + def process_request(self, request): + request._messages = default_storage(request) + + def process_response(self, request, response): + """ + Update the storage backend (i.e., save the messages). + + Raise ValueError if not all messages could be stored and DEBUG is True. + """ + # A higher middleware layer may return a request which does not contain + # messages storage, so make no assumption that it will be there. + if hasattr(request, '_messages'): + unstored_messages = request._messages.update(response) + if unstored_messages and settings.DEBUG: + raise ValueError('Not all temporary messages could be stored.') + return response diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/__init__.py b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__init__.py new file mode 100644 index 0000000..373dbba --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__init__.py @@ -0,0 +1,12 @@ +from django.conf import settings +from django.utils.module_loading import import_string + + +def default_storage(request): + """ + Callable with the same interface as the storage classes. + + This isn't just default_storage = import_string(settings.MESSAGE_STORAGE) + to avoid accessing the settings at the module level. + """ + return import_string(settings.MESSAGE_STORAGE)(request) diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dc522ad182c81a61b23503ade82a2fdc88e116a GIT binary patch literal 632 zcmZ8e&1w`u5U$?Y&4!gF0l|xxzUdq?Be^Lmkr0GH6r7v}Vd$Oi-R-sK$F7=);!O{E z6<@_i*lSL{f+wqIHV{*Ef7Mmg&-cwdn$Ks)<%^Hk0^kPj*ofaJeDN8B<|DuXR047V zBE%zbBd8+CBaS1`WB3V>k3ml$i}(I;7sO(_kA}$BE9CdwR&C>{K=Pa^d1G(Ehi#{P z@gW285wID-4*}mHU>1vSzh{!|R5_;>&d4v8){@pnqNi#?#s1BX|aAna?>G6ZI-HYfzeR?O8!Uj=`H!>;w;PFyge(j%l9AH$Ne;Fq`GRX zmZ~fbB5N8}?-WZ#eOxuVW5Ui{8JF~papWV`>4WP0;Qnl}oqF@RGf2O{Pq^goc}i8A zwzfT5bk^ykdQ&{t$Db(G8&$8GTURzUf7wM^F&Wm5=}uN!6t=ch6iNGadvH&4Sb%{D zO#PJcT|CJj40976xEx46-eo$n4wFGq;Tok`^q?j5_H6IK9_P0EFNgBi;XmV;;ZPh# F{{T15sOJCx literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb18cec08465ca040c9e6914132073de3daaaa77 GIT binary patch literal 6709 zcmbtY&vP6{74Df`?P{f!SC$joi4BKD%n@s!>gC*VL%4w(H8# zb#<_$PLMs8aE2yrMFQ+=oqIfUu zx_N7m#Az19S(-0RvS^qNIH>$o!i~_Pv7kc{w_QpJc_3S{JRa++T6Y@)G*!4v86acW zQsIi!n@U5NRTZ}Rc#5}L(z2$)b7jj4r`_sy^5*+GO@lo>{mY7n&j)&JbgJXb3t}%A zWRqa%jqC_7+Yd5tfc72jrCDNh=tUS5pLoeGI?*^8j}w#WP^RJ#OzaJYL7M8+yPlnl zqd_nno_Kgnqa?oNCB_>h$zh~#?F6X~yO=HXjE+NH&h8yW`dH?}*i4Vc!ywZ=Y1kap z3kdn^;`DN(YN`2~Z>z^v+qjaT$vL+RPs<3-!vs=$=QJm#VLw%%&d9&DRzM?^mc*HZSK1_KFODTKZ>Kw_s?P0w1Gl79jE0?*9!&p$^iq1o%ry# z+Vv0cz+EeKFu!p;iX9!clzFin;1Zb_AXt24z*g6t{$60E8T{DjabUD)wN(Eu6p(5Y z1;c0>WKf^CbK;?K03(-y{eCgD->)X3KKuO{n*F|)C9obt(-~mzeDlQPTEk#^;sNzI zg^DqKYPC#pHoLXFhL>jWcOA2W9g7ZZ(Z(ZCg!xkP3wTP!JeD@*F)X?V#El>R^8AVA zd>a*OITee^EaJ*_3uEKB1FL#O;K0dELgY`Me z2$ml@kE$~%5W#7>y%+NuPT(2HzG&Uq)3N?!Z0=s;gq*pdrq7jo;F;~+87A;F>D^v6 z78X=LNTOH{Z{Cvg&hz~QnChJ7g>ru7PTTYIS6kx|tjvct2lK)CvxopJ7!eNEX0EXO z%6s=dy!W2}@QwRhd2LT;Vj_=U-aLb;h_}^{J3U{nK9hTuE+Y;`+V}Gn-ybF6WXO8k z_aDJ)7d=pSm<)X1&|FN1#Rdz?nlFz{GS((LG0(D%i_U>f_hxvi#GvW@QW{r#so{2( z+RN>FyS7o6z5$x6j~qHYrGG>5-)#09rFOw@!fC$-ae>f;(_l>`H1JrHmPJAXiM6C| z2@RCB%12lj2o2;Gu1PQ2&#AB@b&%e=3eQU&12$B6LF%Bsr&Rc~3NNb9@jAv|QsHIk z>ZtG;6+WxNE7G-2s?;5&QCU}~hzQOr$h_6Pnyb`$?F>2m3I&eqTEAKuI(nlOy<~C=7LMy=~P8LhTkx32yg>UljdduiS{JmxQ=tQOoO;|o~$ z%wGA{ckoR~5eg(~|E5pPDe&=h${oMOH+dlD>9nW|b6yfx3q~617<(Be0i`bYViZ&fqChAO|S4ZAR{^*@xM-`A?U-pBAgj& z;bC{l(5;A!<`!ys1KbRQ&FfL7%@f3CY=U0jXOJ-m>IKFpXF-*Ll^Id^Y6DmCV9f|5 za@bJgE9IlZ$AZBqmIbk3PKq{~b4{gE$0JBr9N^=QlAO`k8hNQFR>&Dj}cQ^1v($-Y+?`%d&3Ba5&^L_i}L8FHxbq% z0@O!Ev^4T|BZHBVgw7}4esE+DGUFY3gdMHpa*`9B&4M9#_`>AEAPYb&&HW$^vdrXl zo^kVC?5JC_LC11wmD_6wy!}E19iBl`OyNF3WPGa{9cKf<=k)3VlxOUG0ZwB7fbXxP z0G!0qQNI#Lztyb;9SoRncgZI}TDogx=P>j)w#Z8|zt8 z?cji+9Wu%QoTlFKi~+yEAC+8Izd8sXpMH>IPD1+e{7@D%&% z%KTLN5SvMyaEY{r8paC0abN+<-z!)O(}p9N#6|~m4tl})*yz^=zThGcbXE9Kh7Gu{ z2@7B8VS`6eGD&#{#A7p?v05|O1E=@A2lU{_Q3`*X#O3hW$&pCW3wANT_;$pA@PM)! zt`6oE)i8{kY{Vn64}&lBO%{waN)5is22tY~4K^lY@T`{Pm63;Pt|RPW=(FxD8l)X) znBgwmOwpZ);(mb&&_)DBq#1PxP1;1*s^t(;bfp_95}JHhWs)J|J>=ZDzdCiDLUnRM ziFWE=R9Bz=wSw^{jIh0+L~McA=Df;7`6fTq%fqc4X zNivGpszvF$hVVO339bog7Df*e6Y?cH_(@J>qds|y?+`s3`{Q+s$UM%;>`x2g<(ZFspiE-k%Y`_2R<~tAYPBkT| ze+D|7tn_TJEi3{hd=FdCn_xvomWGZMH#JPaIHCC=s!vE3R!F6G*56^2y~=EMoXgJi z;ymcHVVjkk<1$=Dz~^Da0fA*7E-Q1bR0QnZ7Zm9v2x;E&QR_`V08D`|k4qWmSR@y9a~#1ZBJQz)RH{ME`?K)fCfgPRU~gl(c~iIe)dXaz zi_KRzg-5|~qR-m%iVwN$oPV6*dc|qEXK<~CbvMjcG18C>jmP477R-*3H=^Kur(vRO zUSJ`K7o#L2E>hg)9X{S=@g@rTEw;){(brJpQ+gFeyU}nrn(bN}-;LFF zr@e~Wxz0v=wbM2nx!G-PuiAU^9{kL%nA!HFSqrbsdu6mF_GfrDx6f53CRg-^tJ!N; ePCJL3NGbW^@*R6ac9#cS(wueYqT8-rxb`3XiXr*{ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/cookie.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/cookie.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..080b3ce214656b5f6174f78e94522169f168030f GIT binary patch literal 6369 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/fallback.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/fallback.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4641e278a577211361db94344e30b5466733eea2 GIT binary patch literal 2107 zcmah~&2HO95T50qWL2_N+jUd)&^;6h2qaPyAcq!)QM9Q8xP=oyMFS8C7Bsn%Y4Jzi zrBYjvPcE9A3iL7hGJODEd+ICX)EWLrPJ$wYcD3A{nVtE*nc-fq*Le_p^L*F__y=x0 z7Oua=p^tD1@y8$rNEmnw7`+=18<3dbnbo@qu?2|@o(=4AXhCShZzyJiWN?jQ4ulSj z+}6Kn4_sD!^qsHeD9@BXk@(vCKFg-jjg8Hb)H=%2S|lK~<}vGq{s|Wn$R~8kGssKy zM_M3l7#noyD}XVc;*klzqf84{zIknODQuCS-UdmI+;*{b=*RJiA580u7xNCs=Vx`v z^NeeBSaOu$3A%@_YaXRMKb3qODV=jtlxaBNq>X~eg7`z5}&EO9JhOWP26fnk*p<XCEpwk^JF%hMYDS+^C%AQrDx*n@WC`6hG%{{$(p|)OLG;S3>%P! zwdvuwrerX?eAC&FBb^6XGCL?CA@4WX;_f@N4TOl&C>LU|A7_Cd>jPXgimp@GdOnk? zXg6ZT)?0B%U9{^BU6@+t#ip2R8H#4pH4972c&xB+Ky45ntk@703PQNX`apF^q=yp? zO$xwv*f#64#jXEyd&N!*rHTJ1ICO#&vU6p^g;#P6@aV-8xUyhrQA!}k&keY;;mUy} zGR>?*BGL*=Ok}P;rlskJVd2P&9LvUSscqa_ zL+5podC}xU(W*@s?PkmCk$^&Dk$fq`GTo}F1br8+m1(_)3$Pr7eB0?R zm;u)Ya!^((aZ=HM8qd%UR_NmI6>y`nn^2o+0>{=8a*TVf(zm+I4S{hk70=Zr@BAtziHTzyq z$s~IzMHYur=ZCIUC4*BIm8{aisbpNI%7j~pc+pl;&$3j@bz-Pb@!(yyKf}G-IP@k? z(C#D4pPO6A^e$WMy~i@;l5{)N0#ZMbLKGb#k}RCZwC)OVKKJALq$Na{1wtrF3uVzn zca%k~D9IGvz4pgtiqfvCeCn-~LYh*ti%Hluww>;dqWxpH<$YOo!9m^r1`XVUI@<>) y_@z|T=e*k=5)I0)Xz8YR=R?A}`odQ6kT>f9)-_bL_bX5i=!>K&kUm1%H~#}~$NlmE literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/session.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/messages/storage/__pycache__/session.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80e3dccb31adb68e598ec82afa2074f00291dee8 GIT binary patch literal 2308 zcmah~-EQ1O6h32ny_?M@4N03)gvcNW)F|1NDsHGMMA}5Cq770v64I(-anB?01YGkPzU7Kn$Q9>|?M+AvwK9`4|KIt(bIz_WEw%4O_n-gi1N;S7 zJ`e4$u<7U6#rVe{1sIgJ11W>C0|N&bt+|l8F!o^Jm17Um28?|e_%Lq5pb6~jxB;;b zKjCH{qzC6N3|e$)KWP4qFTj4lik6nfB-u!#z4$QHvTt$~j%45z%TJ}&Xzt1=kENQA z_cA+<=!*JtD?@*ehD6Ye96+r2+`xqxaeMF!z!2wg=)uppituWLh&paU+#dgMI0Y#ztOk$|Xmy(B;N}dmE z<~1Lxd~CI-$oO=wW|tovB{(X@o?jNGufo%E8kNUe)u}nc6y^!VHyG{s^? ztvHdVfvc8im2yN8$7*%nt)W$T0*~BAOWU;aXKUAq$MuMarmul*PWnR}VAiP3ntDq# zk!}Sb!-WUg9lKm=;#nK>&*mr_QQ>fAyL11`V(|t!Fl{I?UKeA2bRX$i{XcTlI^r$d zNj?c0mXxAZ2W8R1Y@Os89{*3Gd_juK4ZK9RumjI$8_pdzyLFu~yKi2lh%Ty9kFe?Y zvBN5b?qjh%2lfM291K+~J(fFLbJ|)?LKWg;`hsm;u=|0dKEQK|o<^HAD12$leJ$^M zG}kQW)HR9KyL1klCK$kOu-S*#AiqxA96m+G9R3y#Nb$Q>sl^J5rIvibk4;u~zf~x<;W|cyVaL>ptAXm2GTwiC}AN z_R%#j-jo|bn+jYOj-?PqTZnNUPgAlxLcExUX|>W6BF-ZrY>e1?q$np8>1Fv-1mF@> zz|=c5K`ErDYPGRx%EON9Gv8Tlc3Pcw$Fpm}0;UKS-^I(HxM5k2Kfau?KYDdMcB|sj vrC%CF5j6PZZCj%}KS`uz(uRnA`Vw(z*_3ZRC|UTDN~w+Ij self.max_cookie_size: + if remove_oldest: + unstored_messages.append(messages.pop(0)) + else: + unstored_messages.insert(0, messages.pop()) + encoded_data = self._encode(messages + [self.not_finished], + encode_empty=unstored_messages) + self._update_cookie(encoded_data, response) + return unstored_messages + + def _hash(self, value): + """ + Create an HMAC/SHA1 hash based on the value and the project setting's + SECRET_KEY, modified to make it unique for the present purpose. + """ + key_salt = 'django.contrib.messages' + return salted_hmac(key_salt, value).hexdigest() + + def _encode(self, messages, encode_empty=False): + """ + Return an encoded version of the messages list which can be stored as + plain text. + + Since the data will be retrieved from the client-side, the encoded data + also contains a hash to ensure that the data was not tampered with. + """ + if messages or encode_empty: + encoder = MessageEncoder(separators=(',', ':')) + value = encoder.encode(messages) + return '%s$%s' % (self._hash(value), value) + + def _decode(self, data): + """ + Safely decode an encoded text stream back into a list of messages. + + If the encoded text stream contained an invalid hash or was in an + invalid format, return None. + """ + if not data: + return None + bits = data.split('$', 1) + if len(bits) == 2: + hash, value = bits + if constant_time_compare(hash, self._hash(value)): + try: + # If we get here (and the JSON decode works), everything is + # good. In any other case, drop back and return None. + return json.loads(value, cls=MessageDecoder) + except json.JSONDecodeError: + pass + # Mark the data as used (so it gets removed) since something was wrong + # with the data. + self.used = True + return None diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/fallback.py b/env/lib/python3.5/site-packages/django/contrib/messages/storage/fallback.py new file mode 100644 index 0000000..39df6f3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/storage/fallback.py @@ -0,0 +1,54 @@ +from django.contrib.messages.storage.base import BaseStorage +from django.contrib.messages.storage.cookie import CookieStorage +from django.contrib.messages.storage.session import SessionStorage + + +class FallbackStorage(BaseStorage): + """ + Try to store all messages in the first backend. Store any unstored + messages in each subsequent backend. + """ + storage_classes = (CookieStorage, SessionStorage) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.storages = [storage_class(*args, **kwargs) + for storage_class in self.storage_classes] + self._used_storages = set() + + def _get(self, *args, **kwargs): + """ + Get a single list of messages from all storage backends. + """ + all_messages = [] + for storage in self.storages: + messages, all_retrieved = storage._get() + # If the backend hasn't been used, no more retrieval is necessary. + if messages is None: + break + if messages: + self._used_storages.add(storage) + all_messages.extend(messages) + # If this storage class contained all the messages, no further + # retrieval is necessary + if all_retrieved: + break + return all_messages, all_retrieved + + def _store(self, messages, response, *args, **kwargs): + """ + Store the messages and return any unstored messages after trying all + backends. + + For each storage backend, any messages not stored are passed on to the + next backend. + """ + for storage in self.storages: + if messages: + messages = storage._store(messages, response, remove_oldest=False) + # Even if there are no more messages, continue iterating to ensure + # storages which contained messages are flushed. + elif storage in self._used_storages: + storage._store([], response) + self._used_storages.remove(storage) + return messages diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/storage/session.py b/env/lib/python3.5/site-packages/django/contrib/messages/storage/session.py new file mode 100644 index 0000000..59d36d1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/storage/session.py @@ -0,0 +1,48 @@ +import json + +from django.conf import settings +from django.contrib.messages.storage.base import BaseStorage +from django.contrib.messages.storage.cookie import ( + MessageDecoder, MessageEncoder, +) + + +class SessionStorage(BaseStorage): + """ + Store messages in the session (that is, django.contrib.sessions). + """ + session_key = '_messages' + + def __init__(self, request, *args, **kwargs): + assert hasattr(request, 'session'), "The session-based temporary "\ + "message storage requires session middleware to be installed, "\ + "and come before the message middleware in the "\ + "MIDDLEWARE%s list." % ("_CLASSES" if settings.MIDDLEWARE is None else "") + super().__init__(request, *args, **kwargs) + + def _get(self, *args, **kwargs): + """ + Retrieve a list of messages from the request's session. This storage + always stores everything it is given, so return True for the + all_retrieved flag. + """ + return self.deserialize_messages(self.request.session.get(self.session_key)), True + + def _store(self, messages, response, *args, **kwargs): + """ + Store a list of messages to the request's session. + """ + if messages: + self.request.session[self.session_key] = self.serialize_messages(messages) + else: + self.request.session.pop(self.session_key, None) + return [] + + def serialize_messages(self, messages): + encoder = MessageEncoder(separators=(',', ':')) + return encoder.encode(messages) + + def deserialize_messages(self, data): + if data and isinstance(data, str): + return json.loads(data, cls=MessageDecoder) + return data diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/utils.py b/env/lib/python3.5/site-packages/django/contrib/messages/utils.py new file mode 100644 index 0000000..9013044 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/utils.py @@ -0,0 +1,12 @@ +from django.conf import settings +from django.contrib.messages import constants + + +def get_level_tags(): + """ + Return the message level tags. + """ + return { + **constants.DEFAULT_TAGS, + **getattr(settings, 'MESSAGE_TAGS', {}), + } diff --git a/env/lib/python3.5/site-packages/django/contrib/messages/views.py b/env/lib/python3.5/site-packages/django/contrib/messages/views.py new file mode 100644 index 0000000..eaa1bee --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/messages/views.py @@ -0,0 +1,18 @@ +from django.contrib import messages + + +class SuccessMessageMixin: + """ + Add a success message on successful form submission. + """ + success_message = '' + + def form_valid(self, form): + response = super().form_valid(form) + success_message = self.get_success_message(form.cleaned_data) + if success_message: + messages.success(self.request, success_message) + return response + + def get_success_message(self, cleaned_data): + return self.success_message % cleaned_data diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__init__.py b/env/lib/python3.5/site-packages/django/contrib/postgres/__init__.py new file mode 100644 index 0000000..8723eea --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/__init__.py @@ -0,0 +1 @@ +default_app_config = 'django.contrib.postgres.apps.PostgresConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81c8a70c084e2e132baeb0ede82a205fef0bf283 GIT binary patch literal 217 zcmWgR<>fL;wu*6PU|@I*#Bjg}WH|tFF&B_XVPJ>?l8g+&noL#NDOrhm>G^ue`FSNp znMryD`NbvaMXAMli3J74dI32 QKczG$)edBAF%UBV0C@yHssI20 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/apps.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/apps.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e417f18aa1964c9f5cd592c082952f33dcf35bb GIT binary patch literal 1714 zcma)6OONA35H35;+fK5x>?}fi;J|?##)0JoLaSkBH9WK$9vMJtfvk?ZC*!33nC{MM zCxX-RGx!7iATGXg+P}bwD%+WfgwSBS%UxAn-Bn*z^Ov<0kH^DR&wq-|jBn)g6;AngL{LfQk?tEFvFeMkquhRAn7 zbV2!$2EYPHN5Dpqj)9G9T@Ta*(g(mEfb+TNgBZYXc<=zE1F!Mm0}w-)PyILOAxxdJ z|5;I-=GkSkL}nQ0StetfX!Y}E3VHHsYKbokgset#nt{&T8n(7 z`1auU_Q&dQ+663!N-APv=RRD6Y%i_Zg34nOQVH)N+{^D|KXV3K?DT zOem>MOn&Yj7bnL!Oo&7R!HTFdmw-k{rAG+A#(5h=3xr3ZGX$)S5qHYbH@UG(ElnNo z_OV#;Y?+4`rPawIEE@IpQL}LV?TdFYAek8gB&Lw)AumQaPH~t&k-Rcs0agew!1JFa z{OZ6j4y-D-)-LFvVq38CV1=HcymAiRsVH zm3wwykloS$u-miwfowjy$L1ti{wuWUM7OY3$`)6u?7Wnj$TbTREWO+mb)y)IM&cJ=(3?NOc=IHoom4RW+O*(n7qYK=+9ZkYERUMykuw zBhx=XKSJT(&t^6)W<^pQEjEb~N7*X+SUg?ZSsm%_*R;xPR~Iv06ecWg$~ImP;s&t+ z^Bxj#A39^lcRIIk;EtV<6YRa)x0*I<`Z27wIG=XQUKC|Kl~GgXpm#RTglF+581FuCk3OayIH@Hh((n& z_RcLIE_l4gu&6Q>v6x5PN}9<}^iD_CBp)dPaAYq04FF(0k}i+$YYY^$)S_z+(Ua literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/functions.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/functions.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf3d047037f184fb30ef8a5c1865f34264b682d3 GIT binary patch literal 676 zcmbtRO;5r=5S@M@AQ-)HGVv-0Xu?fnj6{%-NHth4jmf64tEqO|+HPa?ihstx)T<}| zg7M%?5xsbG(|w)3&c1mw+iEuJy~W}6Cjh+R{#hnQC%Ch71dfjeA%N7t(?IIr=^zd8 z4A4eg2X4R%rWhb}SR!r0h?~HzlC{>X1-t@R?TvR-gtk#M2fh++AjMfALSC3>d9)~M zv)Oo15(`ROFAake+}R$20CIt*&;|NJ7s7-keqse3D;Pz6>PI}5r1iWr8aiy+cLo;| zM#O&GX;+FWW05ZfV?~`Y8S^}(xWU*%?uXxhs!GTtM3X5^qiDprN^-?+$nGnon@E=M zacV1>*h!Fd=6MkEPISi(c<)}>{LYVVqdON4H>2&D0%pFgLS8jiDiIYex)W!xum7qqT6VwTQ znp{N<;+hDQ_Un`w)bh4h4R`sxi!&8rwo)?a6tz{hRG$A!xTqejZsM4(yHwvbTGkiI C^o)W4 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/indexes.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/indexes.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b8a0327f38b7c1888abd9d40e839f8259910628 GIT binary patch literal 3980 zcmd6q?{C{g7{~AYBTdqF*~-?X42CyWm?fG@6O#aKh%rrN5{d?efx^IY<4fk&ak4vy zZBhG%qU{CZ58+?(TVC;s_q^i!oMSs}w{@B(gw?y;J!jwD^W*c}b$M~Iex>`#y}uV3 z`;*N)7TTYosNYZp_~R^MY`|HEGfsVjMFty~tYe~YvcO`2&HCtDY$K?!V2=HYx8|7O zY#&k^(kjD?BsH0^wX_0hjlLzRl}qO!tX&4xeQ}HnpQXRR&66xi57Ngg8Z?j4RsR@!AQLTwZQ~*LffEC>_ctn zXR@b^^&r%`K7r6?g{qwjjc&Ttbn(tmC4DJWwi=(VK))smEu=1>N*LSbEHQM$q(z$O z>_VzLXE$Bmb}eb()wD72A9=Aq5MCtWesVuG@taoExYrBG29^?0?++#y@bW)5)|0_# zeH4z?w#H!;ti{{j$HA4IWIfpS#WhFj~S>2}vcGN@3k(PLS~JT(+WtFy}F z?E^Zs4)2C_b30b(brjN6d8nY}zE*UXvt46qQ&Q4k%lii3vvQ3Y+q2oO&EyYcY1nuh zLkJUmhBhp1vy~n`Dtgz@+H@=J)E=ua?oVpYx0|=y8_uelEPQwSn=hQptIDOG@qv@t z;!z@fx02dwj3`O#T`BxTc)2-6=!?XA7$*04SZAcyl&(x<$2mY5~wk`gz6NEI)RGu zi+q7sxQV)HOqvIcUGB6y8%xyIu|%ftQ|R%wUclvgv)N)45ZQ`vpmh!Nt1#%>UtzaT#G$C#&CrdT&A z(0_+l@#Us#wk6FxxpHVxXE0WYvn8DNFc!{GI=%xE!zBD!IANTKzL2h!*6;e!Slp5l zarPFbkrXuKnlKI%&vVVp*EEz?b{_h&uX3}Ou0M~_izte)X1s|otMSQFktSRDbVY!X zvBghJq2N7}?Qyneusvw1NuHYM!)bR{=gw;x@#yqS*uiLP1+ZhS!h9f*fK(#K z-6R{ZGRCZtkNjqlCh{FDe^ea@(#y25T%87A&PX-@OtcI$H!;^xe@x2c&eOJ46q%NTC2U(%Ly#^?+3Cd4Z%v`wQr~ zj$uWSNy&id(FC0?v^^G}d-(L_0h-Mb-{*{FR~>`NI}~HFKJrW6?Dpi`vjfE;>?Vye zq)4DrV;HCAu-8L=(f)rIJJiNG4#``1acYYU$p&}$q*>VFHBw1LT&3kGaS@g0?WO8} zOeGz^9jg!S(%KfTj{*l`zYRpgDC+rL+-F`7iIkwFOVtq)%c19!_!YjKC2^^^zW*Ok zEHpTP;;i(gQM^lv9zpR;sqU+?cr^ztKg{GBU0Db;b9%5nlgsQvPPg;?>;sD@icrzC zNy^LeeN+Ik2pml&_|taK{E`2Ui_}jEz6;%#k+pTp@X8#(s zf~}Um;w$}cSLf_hJWj$$wR+>Yn}oyIkMzAao%1|Dig2x`vsB+N^_eGWm6^l8xB;Zq ZYuPpWQ@Rjpr=R2}jfT10TwY#Y`4<3w+jjr} literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/lookups.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/lookups.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bc9ea85b53a69be3bce72058d7f788096cd01aa GIT binary patch literal 3554 zcmbVOTTk3Z82!fH^?H}(8rYCat0-zhS80|ss?;<>1WGQwM4L*GK3J(NV;i#IwU-%h zRaWps)js!U^e_3fPx%XZ>iNcdgFqx=nA!0e&&-+cUYne(JoF#GX_tupqp_!e@fw(j!Ctn673jZVKjU89d%3p#ZTfGvT7x9X7ZW}I=ACVudOl@>zoR@0bu15|B{@?ecrDxr|r&ir`5T?-EBp| z{dmv)E_k?~E(d#FyqgSua6~Fw+smE4w3Z{SMb+pWW|pU1br7+v6n7*R@mCSO8|TTk zk$>HU>}}VLy>{rjS;ckRNzjdWTy@=pt{3GqvWERM)3I)Wu`)WiDk;`>Rp|FqR=~!z z#vhzx1+0I#Zed^r)u&$SZQzbxD~6c)wmj+?YpczAQC`J1a*?}h=(36Y@|wJ?GR&eJ z>omdZz^2g@8&FkPLNfBn6es%h!r=Qur`l&22JZG@&sbUekfr2nU(D_^%rff{J4Qa4 zUFp^Dp^UsvR!Z_g&$xT{(xg5I1(xuL6eH)8x{aALzCEs02T`^F-zsL-51#rtJakHL zVR`%E;d}Aqd9!YvQR+xs4*V~KlY}n3W=yGC$6B+ua5NKB7CP1}bj#Q&qHLCHXzELJ zA0Y~s9FRb_2)b5Q%IPY{?(>BeKDq0&HS@#2y!8f}VoJl9mWQUNCj#4;&EW$6m@ROV z7qCt2>L~Wx932Zvbu7b@e+)XXXj5Mo@z_+UM65O%53)il4clX4UEWnxJM^w#4;n4EH|tV1t8WV>TM9$nfc_~KtN zy8er(2HQ?GGLMb#r}V<5_d-LpeI-?N;Qa$UTwvlg!@f z#ya7Q>1`xZHi@s9^H8KhGIol!34osq{Nrz;9i6R_r~iU~6bJ|>?0#{OC+f^nx>WE7 zyA`n`kGZLr=-9%Mvjy!Ll$xBg)e@zHgbmBbtP4jd(g{98!X8iId1^=2F64#rsES{Zfo6MI_^r2Z#rCPd(;Zo lL`JMfUXs}>dEL0mrmA?)nwT+enl-yt)PI&9S+z>7_&-(UkwX9g literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/operations.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/operations.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1f66a71b6806ad57302b5c5947442c6dc5012db GIT binary patch literal 3709 zcmbuBZExE)5XVoJ?AVI)*v{*7((VB>usT4o0b4N?+0wL2F*rl*0fjL@kR{etYD+H3 zbZyXg?U&hC(yIY`wXd*O`yUm$sgo^$CY#jpNF9$q9jR+AE%|q%yT9fOM1RtW%Y(d) zqW(Y?_V@iQJ(+Gzlj-f@VKRsjKiTA=T)V_!1NXsPnRznZSXXczlAb32&@Y?=3V%3XjH}XeDR&*bbz48iuA%vsvle80cLS-ci>xy zFUChVcOLJ4-{0NbebV3U_V)I>n|lv7yZe18_Imx^=4Yzi$bHaHMZ{5;*ItS=&SbtI zUWw>Xi`;*4m}wF43pOuSGSqxA3ZrKth{ht6lHZ5q<+ZB@sciC)C4~`_Fc5Kq$j|+! zGMfa3PhQtqAmlqAClo(=^m}!f4u+m36fw}lWVXj*SX@TH*n+ymKe%O9`Yh;ba&2EG(8ar7la9DwYnT;}Ryt}bzPnXC7#jKsTAG8jf~f}`owDoq!^X0v8`BJ|8I z2C4+o=`*nS58ejJIlIlPhP1j)`xB;7ATDxGu?b0k(cJ}(%C}lv@ibUXi2wz!e0pZfze5D9%z~CKg z6a={aKM2UzQ=OF|P@j$>^YHl$?pk*ZgAZpc#b6T#zp+NafZOF6{Mh3Zt_*`(k^P-d zVB0#&1m@-|Mc^h3-m^wQfZL@BtoCIxlHsHbf`#cQ&~h|6pTPs`E*M;%pRp7K{$ky? zRsn(Ar6H{Sl7>+v(o)Ak{qXqV^D+En9R`Lgr{*lh;S-pAWX*yDx4Z4-!A6mccaF30 zj!hstDjB8WSQQzbi_s>{8+>{^J|1=^91xs2s?Ld&ol`i;Nw4`Bn-7sWfz2UgcA*JG h^CFBFXMN)H`gcXraF4SY#YxsRchzlev}*5v{{Zr#xWE7a literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/search.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/search.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b76e98161af6afce012bf822373375031762c6e0 GIT binary patch literal 9401 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/signals.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/signals.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a58e13830141771beb2ca136d4a0645bc8736d99 GIT binary patch literal 1903 zcmZuxUvJz*5TCWrzW+^{LP_{jSpgJI&`TAB1SpM2+W>)bfm}q2X>@Yzt#fxi+u7YC zx#%Jxg?C>03VaWE;4Ao*r+$S#F|*FyB`ubByfeF=ot^pp=61baS@S=C`gaN7U%2v^ zIR65N`~yXRFM|lcoz5A!Oxq2J7z_+>4Pdm-gvf+J0o+2a7a+1=V1sMtx&=`Y1|@Jy zz&Jp!3>Wy94M7op1GqrH6`0ve5R@nODg+e>s-(I#3aH(vJ;&&v)nM8D_aX^}HyCu| za7&0pplwd@uqzc8og=9d!O>LplQ`zS>L#%ywYAfE^q{l(czd($GxCLxg`1dXLr~9ee=i1sEI9GhtkSzX*Aa-#Ka6K?8S`^Ucn7i`3W~aG82OcVg-6v}pg#bRUi6 z#@YXRYjKkn{ARX46fzN6k)LvZsCZ_3Y0Bduv(zw+c*Dx( zXZi1VQP-2ANIw?vAemKkv>iP+MRM{dh&fz+vAL=S>1x_d?;Z}jQE)fzbv_H$`f4@k zd2yIbKImGB?%`^hNEHe$S7kShy+}6GQ8pKHb%_G)pXw_YP=I-h*{o>UDC_Jdd!31! zX!R#xFi@%B&|r9glj~sk@D(s9ld6q0K$sE|u$=h5RL-T#a{67xPnDBbDX-xtlN$bS z@m?uL?qTIxye5VzX)K{Y6>RAoH;l|^-V-G!+}mP);k3I#g z5AD-cd1?@Gk+sA;G+LLXL((C211qPa$@b#~C@35H6%a8n#(s(!JQ;0*D$blC-&KkF zS+AlgZ)>#*7bcurlcgGr@eu5D*e$Pm{cGx#!fX^SSi6RF3>44cD>?B9X_EI-`3d z<|m!}5b7D3-QL^XZhhs}ryZ5d4O=XdXS;vmiBO6fd99;xt5<61UecQWcnMqC?Q8xz zN7&aQF68^@L%xXu*d10dOl0M|tX{ToHpkv#Z?L*02pV|j^0Q&=t0ak}Ahhe7xpR|C zHStaYn+zquE$8i`860X@x^GYQ=Aq~JF?SLtl4~I-ds#UW!;bIyM?6m?;ZL7@fgc5S{f$(xwe9AW|eyJo%zbsp&@JI+~3pe_*#@Fx35k!I1^xSbG>0 zyO02UwLn?KTiL``IWV_j?m!=%=yBi+zzn14XE3+4-(C4HxKE6*;c^G?qq6z8(hP2NV6YuF)4 zOsUcF+2Jn`74-O4St&vhW)eruRlCohwp3QMilo@Ol2D<=9~X# zuz?^*-(0#*!e_!o=Q0yl!2Oimd&8BpsJm#W`>xf}TjkF?%*6RUI z1^}M`-ra*UtQ4H1d{_%w$C(4)Eck%sZBA$9&NbZMsBB!EJ_*{TB(B6pjD@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/validators.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/__pycache__/validators.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb2b56a9e41ab57030beaa65b873d538ef484988 GIT binary patch literal 3382 zcmb_eTW{1x6h8KPy_a~Cu%$~VRb`=GaDk1)LnTmEfy$*VkOxxrVO7a;>|x`LFUyP< z$O>KxzoC8TFX)fyAMk6R`WO1t?~FIjCV`exoXqjend7tPeCIMV==Hi+!fQXOF3}&f z^jMf*$56k6MEEx-AxaGz8D#L1=tYSYNBBpQ^oC~ecIU9Bxj zI+S*4v_h#vBZrJTQIjH@UP7HsqCqd9u19yG7Da8%ZIftf?kb5kHaZk_^+uOonDheH ztbw~ik)yc|2}_HwgWIEMRdeyJt+}TtTBB`m{ZF_=o>8v-5F~LF6mg#2k}{W`Rrc=( zPw$CrT;Rs!l?tVTvG|STI@X%}b#t>wr<>Dw zdU;$Mxf>=m2QB*@13!HaQ`@y_NnSH)NgwFzK2FLJ4d(|w83ARej>;usD6 zr@8MYTqjcL4WNAuvJb@*Azu@(@83FJ|DaW_022gCI(W+-lT{`h6S>Bujz%>*#k@WU zPmUtW+#`rK!MM(1Nc$rNfb2)xK>?uLxdu=SmY$3*|~{6KBwt`v`E zu@sxg9HdcLxO-4BES)q~D$d3}FX!%do(jF=B1FPnY+gfM@xG_ZE_#9tDrrwk&$7KN zf08YIHI@0}I1Y+Fhs59JyBklbK$mdRnbIlx@MafYtpa}U$u zCS%R$7>+R?+=b#A>EVH3$S&~1(dUZO?)-{L?ap&;>O_0A@myOk?^986b#FY&%@J9F z1u~>b6N_Es++aM+pEM+sCdpqGs6g4qa|l_?I@Dy7)`TQl)`T-=NfV&l_F7x=G)ye5 zFporOPXigGN@FuOFS+u4?0L2v;8g*}PHMnPYm&#A1`t*B0qbZY<7T3gW2O4*R{$FZ zN#gq#AfY}4A%NO5Y;-548)j!|brS6A;~H$Xr-7ltzKux*HfIMAGbz8NGX)SEG%;zf z<^X+g8cQ6Y2#&=Zokz{G8>0?X5oDn#JH8(#fl|I-IjEC{)5kLx-si=xkjLG%eP2BC zea`ACi_E^kfAiDFvxvpK?y-JUwtPRzLmVB3U*)OJ*mF=PT_zthIm}%>)2-?~Y_P22 zw&s|2!!i1%ZT4-aFL^J-s2@i0I)>t)ET7obas3jFrg7M_xJgy#_TT}IBXQ!I5pqQM z;Wz8n(cxG#!unda*QV*Y#S-JdOiIpqabQcpANkk!%eK)~bT%AH_l<1B@!hQ1S4MGjK zP!Y$Djf*fse#+#vXUAvQ)i_v~IEG_N=7bpa^FPCI{2KQbVc?cfg(1n&?iXQ@9!!*< zGdWB(on`FzcNoXQaNLqQ3|ns$2Ha(W;^02;?jvyt27k*&*O6e(me(H*s{0kpm0~EK zhGNQhY$Z7`M>p%kRY^{A$*LrGerdDp#zN7oh!Ztjx=YK}$!(mTnM(9^Uh=_FC6d00 u@byjKI&{tIjFD{YQXJ}%FWX;M7tOB>NGRs78|STcW6&712CcIf2ln5uaRsmd literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__init__.py b/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__init__.py new file mode 100644 index 0000000..4bfbd52 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__init__.py @@ -0,0 +1,2 @@ +from .general import * # NOQA +from .statistics import * # NOQA diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e3e1fc77c5db99bbf25f8aa3920749c544dd67e GIT binary patch literal 210 zcmWgR<>fL;wu*6NU|@I*#Bjg_WH|tFu>_Dv0U}0*90rCED2oxuVqyr^WPZsAl-6Xt z#i-?{$rQz&o|>0hl$aC6Ra}x-l384mnOwY*p@$RC# zSFIJEQo$2Hguk>eJn+O{;E8j_UdN`bNZL(icJ|K4z4zQZ=ek-h7a#T>{kWeK;xDoE zFN28G6ISwGOc|wyb3!PXFqCSQ_YDyn#K2U880zqtj^d`}E zfhKSUFaT5|3(GGd2e?`Bn-FJMtbzU&!W3?-ac$0aoTAL)RJYJLK5qQrH4YD_&d%=H zBJ!5Ve-x;)hH1$5ZScnTD&Y{~7ch5~) z)N#y~*JA%5e-%Era@8leh>w+8`j1zWC=%>(G-ml z=5#X+SZ&#cgC70j!zd7{H8ka*gO8Wm#|!P|g(>6~gApMN8F7&jzZ(X#zvEb~#7h+PL5jpC)){gDXS*q07>9^gJ=+Yo?}T`l@zaFk?Ry>gXgjAGRZuz7j~8MJPnJy zjam5~x(&3MH^y{h;Z1sQj}GwRn{m*=BCxPu6-6JGV$^YrmOeK%B>SuzP6ElOCPiQy z1v)imy188&kd!g?EReCMmvglOSwK_Hu#9PSVb01jr$EP}?lADYr099Wkv|DJE_vS1 zlWsVlvD17^>^K;XLw&!-as=SwSs=Cl@-D5>Cb4r2S*1YZ!^joT;HVHK7?m?C)@G)M zuf;=9_Rti!z4o4Ukh}EC%{PxuyhiIu3n+aE0V0p?BX%FNTNp7LX%o1SYjuc9##^W+ z+qyZbZXe%7GxyzlC(SlB+s$_S=}o=n&QIP+H^Tb`fTOF7(aFM8uA!}5qO?%dRxVM? z$-g!SGdz|o_n&*Ql#+Divs4RjMZsK2%ak(Iw^;NlO0&uXd{9YPXLMO-ok@%POCXh- z)frooINf6BlT_Xw(p}11>s;ghy&@U`_91vbzW@dx2ENN$CMR_HPavqNYbTb#1{X=}Ikvk=T!CHRd~#y<$MC#(HMUs%})R`Csv0 DjTibV literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/statistics.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/aggregates/__pycache__/statistics.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2ef627dbad21d150437fbc2a3240f3468f46bbb GIT binary patch literal 3318 zcmbtW-EP}96h4$C|3!AwtaZ{KbRMt)6Sg`-u#0WzhGt$;6xf`=&Wc1RKqwaDDU~gi zl)WU#)mn59u_xFo>2_Cpgz72j2 z{5lM5a4mS^-=NNGT%ZoZgjWS{i-<1M0)(0%iW)5;dJ}MELJK)sMs$Uk2(@ywg6IcC zPG~VltBBsB{SaEp(IrH0(-sLW=ctWngLX}5B}Z$BuF^pWt>$PQ(KR|7p-VY>1JOHl zTte*}T}JdSS%A=5j^erQLC?AWH<{fr(&}~?dC7JlLO->ijuJ5tQuiE|RyGF%DF$95 z(sDbRcyc$2Q?ngOnU=d^AU7w2{R{0Ntq|6Z#-k*ykxHw{zKD~wNZsy6Hli0su}Dh< z_4fC3I;CFx{R19+88w?x_ z5A0@dQMd8|I%eKj6bLw_=al6#F5Kx`QyzMjuobYWZ&92ZV5>TuGqB}dNYJtjUNQKM zL4pdvu|e-}6mp+qXcpicBh4@E{>ZF(cWdD0w?Rnj~Z%~(d0z!!ci zwWDzoj}v~RJyJXhLNuaNNUP7ha4fc@jAUx5aV*dWoCl*I;oPxOQ;F~>Wv3}SkvDOl zas>sskn?`%DaHAp@XyYAGK|;bAbxl_4nqIo=$L=)Z@fs>{bO%5i1J528YMC~T#qA_ zp#RmnmxqB`SLm8RB|%@c;!}AWNov>>CNco4Gn<_?u6VDN?{ROtuLt2cdXizaQSYFF zW+c<0-L&b@Ze%nQ4aPc-A#dT3bOkpOg%iQWNsOurqLEXS4SHq091D5sE_q=X{mPG{ zV5D42im?)IMU96;PX=egEgwaaD{mqkCW#c?hvFWI`zXj>%0L0^taXR9ah`z-Cv- z^JGw;;($4FWS-`luEUgTg)EgUN%OX^<`O~L?Hj0|pCy)P1|xlfa{!L9FqcNt1Y&st zxz+a0v&}B=ZT__DRx*8eXE%%Yg8T^A)d8bp)3J1f$W=nuP^3lW4dYNu(_=mm$W7!A zWugFfo1NXv>)u5mzhzm?G&AZIztVZh+3zyz`}vfrk6Y<(J?ZkzXHWLuc5HTJ9n3SK zgNmj$uSHJfc1C`%2sust_&>-gFCNpo&rr+-6owDo&B%*&TG#K_sAHX`a$v~{&Ty;R z9POQ-J9~ZYDFo?B>$b5esu);He1I2az>vxSVB*6`It$b{=zpA#F=0y|s1xc*vK#&n$0TrOrVqddr}!zZN8oToMIK{_oZ z-Lxzeu`u+pd+~d}5Te53*0s%^cJ{Wq?XBItMO;bqzrgnYgLsK{P|`c-ZY)Ag6TiF` zHGNV}1E%-m&hFMC>@@eQYq8Vi=$7@t@mpsRZkqY%THN)^+zaI{&3t?>8hqwL!Mj39r`Sok*Vs={H%Fdh{gLQ*8%I|Z@&PIqCf`# literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/array.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/array.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20b2bfd08961f308e5e1f195f36a3adf6d097b78 GIT binary patch literal 12246 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 Uf=T80@6@bSJ~clxTbeKb51R6EsQ>@~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/citext.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/citext.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40f48455d5c05c651c2e99d7e8ac47e821494b99 GIT binary patch literal 1195 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 AUjP6A literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/jsonb.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/jsonb.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c22827e1c3bd7dabbb7ffe43c62844b43386b22 GIT binary patch literal 7481 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 YqkqoI=@oZzcD-=)-waajiGR-j0Je(MaR2}S literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/mixins.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/mixins.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d682df95b13d3e56c6848b3089f0081daa24739 GIT binary patch literal 1181 zcmZ`&&2G~`5T3OiCry+7N+U@2+`0}H%0sg?94|RBjL+_x7@Mn+! zOd0eTu#?Dw$cFD|w&Bu(9;yy>z1m;g3?4IXIFjK+hon{?A=0Oxp^!j8h)bb$=-GsX z7zo*O;3vQUy)}qj_<@!hS-M`sY#kHs+gK*iYdH|}B!3rQ#Oc-Q;b)P=5syma(bf84 zoZdHutjG>Pa|6dQ4jrTT3NQw^1W=+_7rZ7*q~_MO<&r^*bQ{JF)q-MbFm{ROR#^=) z)lqTCS#rN*_K-n$h~)98U9Wz+m~88cCD)^Do%O$xGuJ-SBpk<2xVbeP5pyVX`Bwt zQV@iR&^icABM4G4mAGnG@d1&Xv#-TkFdC^2;Yz_v$0KQ@GSTHU-2%iah@#&zc>#xZ7oT5nM zS<1nks)oXIRSPH641#GE%@ewmRuFuei=@0F)uydPs7O@irQ4~96db4wgjsNCG1qEs lDzcq=c5k`7EkDeZEPA5w+ydPm#WW5}5=ZnrHPv;^{s*w@BHI7} literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/ranges.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/ranges.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..047e40e991cdcaf63b8315f2b339589ebb0a9409 GIT binary patch literal 9245 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 E1*wSw-~a#s literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f792f0a51c825a16aa014da71d565c678c9564a6 GIT binary patch literal 475 zcmZ8cJx{|h5IrY>R#ht&1PuIv3~i)tAcTsLVC&K?LbB4>tz6tB#10auTlq8mC9nJo zCZ1EZsyO+*JKOi}<6hpF;inl-PBZRH_=z8>PjtSn(S%ezl2M zWyP}GySyy?JV{j=yR4;27D{SilEx}+M%9Pwa;^$xIrm!{PsBd2{%tYZCrz;;6n-Ag zU61p1DH`qLKId;urguMe7iHQxkEr9{n6D4Co%*c3W9QZ%<@yzCFL2$vU5ooxg%|n* DX1!__ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/array.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/array.py new file mode 100644 index 0000000..ab667ac --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/array.py @@ -0,0 +1,303 @@ +import json + +from django.contrib.postgres import lookups +from django.contrib.postgres.forms import SimpleArrayField +from django.contrib.postgres.validators import ArrayMaxLengthValidator +from django.core import checks, exceptions +from django.db.models import Field, IntegerField, Transform +from django.db.models.lookups import Exact, In +from django.utils.inspect import func_supports_parameter +from django.utils.translation import gettext_lazy as _ + +from ..utils import prefix_validation_error +from .mixins import CheckFieldDefaultMixin +from .utils import AttributeSetter + +__all__ = ['ArrayField'] + + +class ArrayField(CheckFieldDefaultMixin, Field): + empty_strings_allowed = False + default_error_messages = { + 'item_invalid': _('Item %(nth)s in the array did not validate:'), + 'nested_array_mismatch': _('Nested arrays must have the same length.'), + } + _default_hint = ('list', '[]') + + def __init__(self, base_field, size=None, **kwargs): + self.base_field = base_field + self.size = size + if self.size: + self.default_validators = self.default_validators[:] + self.default_validators.append(ArrayMaxLengthValidator(self.size)) + # For performance, only add a from_db_value() method if the base field + # implements it. + if hasattr(self.base_field, 'from_db_value'): + self.from_db_value = self._from_db_value + super().__init__(**kwargs) + + @property + def model(self): + try: + return self.__dict__['model'] + except KeyError: + raise AttributeError("'%s' object has no attribute 'model'" % self.__class__.__name__) + + @model.setter + def model(self, model): + self.__dict__['model'] = model + self.base_field.model = model + + def check(self, **kwargs): + errors = super().check(**kwargs) + if self.base_field.remote_field: + errors.append( + checks.Error( + 'Base field for array cannot be a related field.', + obj=self, + id='postgres.E002' + ) + ) + else: + # Remove the field name checks as they are not needed here. + base_errors = self.base_field.check() + if base_errors: + messages = '\n '.join('%s (%s)' % (error.msg, error.id) for error in base_errors) + errors.append( + checks.Error( + 'Base field for array has errors:\n %s' % messages, + obj=self, + id='postgres.E001' + ) + ) + return errors + + def set_attributes_from_name(self, name): + super().set_attributes_from_name(name) + self.base_field.set_attributes_from_name(name) + + @property + def description(self): + return 'Array of %s' % self.base_field.description + + def db_type(self, connection): + size = self.size or '' + return '%s[%s]' % (self.base_field.db_type(connection), size) + + def get_db_prep_value(self, value, connection, prepared=False): + if isinstance(value, (list, tuple)): + return [self.base_field.get_db_prep_value(i, connection, prepared=False) for i in value] + return value + + def deconstruct(self): + name, path, args, kwargs = super().deconstruct() + if path == 'django.contrib.postgres.fields.array.ArrayField': + path = 'django.contrib.postgres.fields.ArrayField' + kwargs.update({ + 'base_field': self.base_field.clone(), + 'size': self.size, + }) + return name, path, args, kwargs + + def to_python(self, value): + if isinstance(value, str): + # Assume we're deserializing + vals = json.loads(value) + value = [self.base_field.to_python(val) for val in vals] + return value + + def _from_db_value(self, value, expression, connection): + if value is None: + return value + return [ + self.base_field.from_db_value(item, expression, connection, {}) + if func_supports_parameter(self.base_field.from_db_value, 'context') # RemovedInDjango30Warning + else self.base_field.from_db_value(item, expression, connection) + for item in value + ] + + def value_to_string(self, obj): + values = [] + vals = self.value_from_object(obj) + base_field = self.base_field + + for val in vals: + if val is None: + values.append(None) + else: + obj = AttributeSetter(base_field.attname, val) + values.append(base_field.value_to_string(obj)) + return json.dumps(values) + + def get_transform(self, name): + transform = super().get_transform(name) + if transform: + return transform + if '_' not in name: + try: + index = int(name) + except ValueError: + pass + else: + index += 1 # postgres uses 1-indexing + return IndexTransformFactory(index, self.base_field) + try: + start, end = name.split('_') + start = int(start) + 1 + end = int(end) # don't add one here because postgres slices are weird + except ValueError: + pass + else: + return SliceTransformFactory(start, end) + + def validate(self, value, model_instance): + super().validate(value, model_instance) + for index, part in enumerate(value): + try: + self.base_field.validate(part, model_instance) + except exceptions.ValidationError as error: + raise prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index + 1}, + ) + if isinstance(self.base_field, ArrayField): + if len({len(i) for i in value}) > 1: + raise exceptions.ValidationError( + self.error_messages['nested_array_mismatch'], + code='nested_array_mismatch', + ) + + def run_validators(self, value): + super().run_validators(value) + for index, part in enumerate(value): + try: + self.base_field.run_validators(part) + except exceptions.ValidationError as error: + raise prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index + 1}, + ) + + def formfield(self, **kwargs): + return super().formfield(**{ + 'form_class': SimpleArrayField, + 'base_field': self.base_field.formfield(), + 'max_length': self.size, + **kwargs, + }) + + +@ArrayField.register_lookup +class ArrayContains(lookups.DataContains): + def as_sql(self, qn, connection): + sql, params = super().as_sql(qn, connection) + sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection)) + return sql, params + + +@ArrayField.register_lookup +class ArrayContainedBy(lookups.ContainedBy): + def as_sql(self, qn, connection): + sql, params = super().as_sql(qn, connection) + sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection)) + return sql, params + + +@ArrayField.register_lookup +class ArrayExact(Exact): + def as_sql(self, qn, connection): + sql, params = super().as_sql(qn, connection) + sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection)) + return sql, params + + +@ArrayField.register_lookup +class ArrayOverlap(lookups.Overlap): + def as_sql(self, qn, connection): + sql, params = super().as_sql(qn, connection) + sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection)) + return sql, params + + +@ArrayField.register_lookup +class ArrayLenTransform(Transform): + lookup_name = 'len' + output_field = IntegerField() + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + # Distinguish NULL and empty arrays + return ( + 'CASE WHEN %(lhs)s IS NULL THEN NULL ELSE ' + 'coalesce(array_length(%(lhs)s, 1), 0) END' + ) % {'lhs': lhs}, params + + +@ArrayField.register_lookup +class ArrayInLookup(In): + def get_prep_lookup(self): + values = super().get_prep_lookup() + if hasattr(self.rhs, '_prepare'): + # Subqueries don't need further preparation. + return values + # In.process_rhs() expects values to be hashable, so convert lists + # to tuples. + prepared_values = [] + for value in values: + if hasattr(value, 'resolve_expression'): + prepared_values.append(value) + else: + prepared_values.append(tuple(value)) + return prepared_values + + +class IndexTransform(Transform): + + def __init__(self, index, base_field, *args, **kwargs): + super().__init__(*args, **kwargs) + self.index = index + self.base_field = base_field + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + return '%s[%s]' % (lhs, self.index), params + + @property + def output_field(self): + return self.base_field + + +class IndexTransformFactory: + + def __init__(self, index, base_field): + self.index = index + self.base_field = base_field + + def __call__(self, *args, **kwargs): + return IndexTransform(self.index, self.base_field, *args, **kwargs) + + +class SliceTransform(Transform): + + def __init__(self, start, end, *args, **kwargs): + super().__init__(*args, **kwargs) + self.start = start + self.end = end + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + return '%s[%s:%s]' % (lhs, self.start, self.end), params + + +class SliceTransformFactory: + + def __init__(self, start, end): + self.start = start + self.end = end + + def __call__(self, *args, **kwargs): + return SliceTransform(self.start, self.end, *args, **kwargs) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/citext.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/citext.py new file mode 100644 index 0000000..46f6d3d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/citext.py @@ -0,0 +1,24 @@ +from django.db.models import CharField, EmailField, TextField + +__all__ = ['CICharField', 'CIEmailField', 'CIText', 'CITextField'] + + +class CIText: + + def get_internal_type(self): + return 'CI' + super().get_internal_type() + + def db_type(self, connection): + return 'citext' + + +class CICharField(CIText, CharField): + pass + + +class CIEmailField(CIText, EmailField): + pass + + +class CITextField(CIText, TextField): + pass diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/hstore.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/hstore.py new file mode 100644 index 0000000..39f074b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/hstore.py @@ -0,0 +1,112 @@ +import json + +from django.contrib.postgres import forms, lookups +from django.contrib.postgres.fields.array import ArrayField +from django.core import exceptions +from django.db.models import Field, TextField, Transform +from django.utils.translation import gettext_lazy as _ + +from .mixins import CheckFieldDefaultMixin + +__all__ = ['HStoreField'] + + +class HStoreField(CheckFieldDefaultMixin, Field): + empty_strings_allowed = False + description = _('Map of strings to strings/nulls') + default_error_messages = { + 'not_a_string': _('The value of "%(key)s" is not a string or null.'), + } + _default_hint = ('dict', '{}') + + def db_type(self, connection): + return 'hstore' + + def get_transform(self, name): + transform = super().get_transform(name) + if transform: + return transform + return KeyTransformFactory(name) + + def validate(self, value, model_instance): + super().validate(value, model_instance) + for key, val in value.items(): + if not isinstance(val, str) and val is not None: + raise exceptions.ValidationError( + self.error_messages['not_a_string'], + code='not_a_string', + params={'key': key}, + ) + + def to_python(self, value): + if isinstance(value, str): + value = json.loads(value) + return value + + def value_to_string(self, obj): + return json.dumps(self.value_from_object(obj)) + + def formfield(self, **kwargs): + return super().formfield(**{ + 'form_class': forms.HStoreField, + **kwargs, + }) + + def get_prep_value(self, value): + value = super().get_prep_value(value) + + if isinstance(value, dict): + prep_value = {} + for key, val in value.items(): + key = str(key) + if val is not None: + val = str(val) + prep_value[key] = val + value = prep_value + + if isinstance(value, list): + value = [str(item) for item in value] + + return value + + +HStoreField.register_lookup(lookups.DataContains) +HStoreField.register_lookup(lookups.ContainedBy) +HStoreField.register_lookup(lookups.HasKey) +HStoreField.register_lookup(lookups.HasKeys) +HStoreField.register_lookup(lookups.HasAnyKeys) + + +class KeyTransform(Transform): + output_field = TextField() + + def __init__(self, key_name, *args, **kwargs): + super().__init__(*args, **kwargs) + self.key_name = key_name + + def as_sql(self, compiler, connection): + lhs, params = compiler.compile(self.lhs) + return "(%s -> '%s')" % (lhs, self.key_name), params + + +class KeyTransformFactory: + + def __init__(self, key_name): + self.key_name = key_name + + def __call__(self, *args, **kwargs): + return KeyTransform(self.key_name, *args, **kwargs) + + +@HStoreField.register_lookup +class KeysTransform(Transform): + lookup_name = 'keys' + function = 'akeys' + output_field = ArrayField(TextField()) + + +@HStoreField.register_lookup +class ValuesTransform(Transform): + lookup_name = 'values' + function = 'avals' + output_field = ArrayField(TextField()) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/jsonb.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/jsonb.py new file mode 100644 index 0000000..966e8f1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/jsonb.py @@ -0,0 +1,188 @@ +import json + +from psycopg2.extras import Json + +from django.contrib.postgres import forms, lookups +from django.core import exceptions +from django.db.models import ( + Field, TextField, Transform, lookups as builtin_lookups, +) +from django.utils.translation import gettext_lazy as _ + +from .mixins import CheckFieldDefaultMixin + +__all__ = ['JSONField'] + + +class JsonAdapter(Json): + """ + Customized psycopg2.extras.Json to allow for a custom encoder. + """ + def __init__(self, adapted, dumps=None, encoder=None): + self.encoder = encoder + super().__init__(adapted, dumps=dumps) + + def dumps(self, obj): + options = {'cls': self.encoder} if self.encoder else {} + return json.dumps(obj, **options) + + +class JSONField(CheckFieldDefaultMixin, Field): + empty_strings_allowed = False + description = _('A JSON object') + default_error_messages = { + 'invalid': _("Value must be valid JSON."), + } + _default_hint = ('dict', '{}') + + def __init__(self, verbose_name=None, name=None, encoder=None, **kwargs): + if encoder and not callable(encoder): + raise ValueError("The encoder parameter must be a callable object.") + self.encoder = encoder + super().__init__(verbose_name, name, **kwargs) + + def db_type(self, connection): + return 'jsonb' + + def deconstruct(self): + name, path, args, kwargs = super().deconstruct() + if self.encoder is not None: + kwargs['encoder'] = self.encoder + return name, path, args, kwargs + + def get_transform(self, name): + transform = super().get_transform(name) + if transform: + return transform + return KeyTransformFactory(name) + + def get_prep_value(self, value): + if value is not None: + return JsonAdapter(value, encoder=self.encoder) + return value + + def validate(self, value, model_instance): + super().validate(value, model_instance) + options = {'cls': self.encoder} if self.encoder else {} + try: + json.dumps(value, **options) + except TypeError: + raise exceptions.ValidationError( + self.error_messages['invalid'], + code='invalid', + params={'value': value}, + ) + + def value_to_string(self, obj): + return self.value_from_object(obj) + + def formfield(self, **kwargs): + return super().formfield(**{ + 'form_class': forms.JSONField, + **kwargs, + }) + + +JSONField.register_lookup(lookups.DataContains) +JSONField.register_lookup(lookups.ContainedBy) +JSONField.register_lookup(lookups.HasKey) +JSONField.register_lookup(lookups.HasKeys) +JSONField.register_lookup(lookups.HasAnyKeys) +JSONField.register_lookup(lookups.JSONExact) + + +class KeyTransform(Transform): + operator = '->' + nested_operator = '#>' + + def __init__(self, key_name, *args, **kwargs): + super().__init__(*args, **kwargs) + self.key_name = key_name + + def as_sql(self, compiler, connection): + key_transforms = [self.key_name] + previous = self.lhs + while isinstance(previous, KeyTransform): + key_transforms.insert(0, previous.key_name) + previous = previous.lhs + lhs, params = compiler.compile(previous) + if len(key_transforms) > 1: + return "(%s %s %%s)" % (lhs, self.nested_operator), [key_transforms] + params + try: + int(self.key_name) + except ValueError: + lookup = "'%s'" % self.key_name + else: + lookup = "%s" % self.key_name + return "(%s %s %s)" % (lhs, self.operator, lookup), params + + +class KeyTextTransform(KeyTransform): + operator = '->>' + nested_operator = '#>>' + output_field = TextField() + + +class KeyTransformTextLookupMixin: + """ + Mixin for combining with a lookup expecting a text lhs from a JSONField + key lookup. Make use of the ->> operator instead of casting key values to + text and performing the lookup on the resulting representation. + """ + def __init__(self, key_transform, *args, **kwargs): + assert isinstance(key_transform, KeyTransform) + key_text_transform = KeyTextTransform( + key_transform.key_name, *key_transform.source_expressions, **key_transform.extra + ) + super().__init__(key_text_transform, *args, **kwargs) + + +class KeyTransformIExact(KeyTransformTextLookupMixin, builtin_lookups.IExact): + pass + + +class KeyTransformIContains(KeyTransformTextLookupMixin, builtin_lookups.IContains): + pass + + +class KeyTransformStartsWith(KeyTransformTextLookupMixin, builtin_lookups.StartsWith): + pass + + +class KeyTransformIStartsWith(KeyTransformTextLookupMixin, builtin_lookups.IStartsWith): + pass + + +class KeyTransformEndsWith(KeyTransformTextLookupMixin, builtin_lookups.EndsWith): + pass + + +class KeyTransformIEndsWith(KeyTransformTextLookupMixin, builtin_lookups.IEndsWith): + pass + + +class KeyTransformRegex(KeyTransformTextLookupMixin, builtin_lookups.Regex): + pass + + +class KeyTransformIRegex(KeyTransformTextLookupMixin, builtin_lookups.IRegex): + pass + + +KeyTransform.register_lookup(KeyTransformIExact) +KeyTransform.register_lookup(KeyTransformIContains) +KeyTransform.register_lookup(KeyTransformStartsWith) +KeyTransform.register_lookup(KeyTransformIStartsWith) +KeyTransform.register_lookup(KeyTransformEndsWith) +KeyTransform.register_lookup(KeyTransformIEndsWith) +KeyTransform.register_lookup(KeyTransformRegex) +KeyTransform.register_lookup(KeyTransformIRegex) + + +class KeyTransformFactory: + + def __init__(self, key_name): + self.key_name = key_name + + def __call__(self, *args, **kwargs): + return KeyTransform(self.key_name, *args, **kwargs) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/mixins.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/mixins.py new file mode 100644 index 0000000..254b80c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/mixins.py @@ -0,0 +1,29 @@ +from django.core import checks + + +class CheckFieldDefaultMixin: + _default_hint = ('', '') + + def _check_default(self): + if self.has_default() and self.default is not None and not callable(self.default): + return [ + checks.Warning( + "%s default should be a callable instead of an instance so " + "that it's not shared between all field instances." % ( + self.__class__.__name__, + ), + hint=( + 'Use a callable instead, e.g., use `%s` instead of ' + '`%s`.' % self._default_hint + ), + obj=self, + id='postgres.E003', + ) + ] + else: + return [] + + def check(self, **kwargs): + errors = super().check(**kwargs) + errors.extend(self._check_default()) + return errors diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/ranges.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/ranges.py new file mode 100644 index 0000000..0bb914d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/ranges.py @@ -0,0 +1,252 @@ +import datetime +import json + +from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange, Range + +from django.contrib.postgres import forms, lookups +from django.db import models + +from .utils import AttributeSetter + +__all__ = [ + 'RangeField', 'IntegerRangeField', 'BigIntegerRangeField', + 'FloatRangeField', 'DateTimeRangeField', 'DateRangeField', +] + + +class RangeField(models.Field): + empty_strings_allowed = False + + def __init__(self, *args, **kwargs): + # Initializing base_field here ensures that its model matches the model for self. + if hasattr(self, 'base_field'): + self.base_field = self.base_field() + super().__init__(*args, **kwargs) + + @property + def model(self): + try: + return self.__dict__['model'] + except KeyError: + raise AttributeError("'%s' object has no attribute 'model'" % self.__class__.__name__) + + @model.setter + def model(self, model): + self.__dict__['model'] = model + self.base_field.model = model + + def get_prep_value(self, value): + if value is None: + return None + elif isinstance(value, Range): + return value + elif isinstance(value, (list, tuple)): + return self.range_type(value[0], value[1]) + return value + + def to_python(self, value): + if isinstance(value, str): + # Assume we're deserializing + vals = json.loads(value) + for end in ('lower', 'upper'): + if end in vals: + vals[end] = self.base_field.to_python(vals[end]) + value = self.range_type(**vals) + elif isinstance(value, (list, tuple)): + value = self.range_type(value[0], value[1]) + return value + + def set_attributes_from_name(self, name): + super().set_attributes_from_name(name) + self.base_field.set_attributes_from_name(name) + + def value_to_string(self, obj): + value = self.value_from_object(obj) + if value is None: + return None + if value.isempty: + return json.dumps({"empty": True}) + base_field = self.base_field + result = {"bounds": value._bounds} + for end in ('lower', 'upper'): + val = getattr(value, end) + if val is None: + result[end] = None + else: + obj = AttributeSetter(base_field.attname, val) + result[end] = base_field.value_to_string(obj) + return json.dumps(result) + + def formfield(self, **kwargs): + kwargs.setdefault('form_class', self.form_field) + return super().formfield(**kwargs) + + +class IntegerRangeField(RangeField): + base_field = models.IntegerField + range_type = NumericRange + form_field = forms.IntegerRangeField + + def db_type(self, connection): + return 'int4range' + + +class BigIntegerRangeField(RangeField): + base_field = models.BigIntegerField + range_type = NumericRange + form_field = forms.IntegerRangeField + + def db_type(self, connection): + return 'int8range' + + +class FloatRangeField(RangeField): + base_field = models.FloatField + range_type = NumericRange + form_field = forms.FloatRangeField + + def db_type(self, connection): + return 'numrange' + + +class DateTimeRangeField(RangeField): + base_field = models.DateTimeField + range_type = DateTimeTZRange + form_field = forms.DateTimeRangeField + + def db_type(self, connection): + return 'tstzrange' + + +class DateRangeField(RangeField): + base_field = models.DateField + range_type = DateRange + form_field = forms.DateRangeField + + def db_type(self, connection): + return 'daterange' + + +RangeField.register_lookup(lookups.DataContains) +RangeField.register_lookup(lookups.ContainedBy) +RangeField.register_lookup(lookups.Overlap) + + +class DateTimeRangeContains(models.Lookup): + """ + Lookup for Date/DateTimeRange containment to cast the rhs to the correct + type. + """ + lookup_name = 'contains' + + def process_rhs(self, compiler, connection): + # Transform rhs value for db lookup. + if isinstance(self.rhs, datetime.date): + output_field = models.DateTimeField() if isinstance(self.rhs, datetime.datetime) else models.DateField() + value = models.Value(self.rhs, output_field=output_field) + self.rhs = value.resolve_expression(compiler.query) + return super().process_rhs(compiler, connection) + + def as_sql(self, compiler, connection): + lhs, lhs_params = self.process_lhs(compiler, connection) + rhs, rhs_params = self.process_rhs(compiler, connection) + params = lhs_params + rhs_params + # Cast the rhs if needed. + cast_sql = '' + if isinstance(self.rhs, models.Expression) and self.rhs._output_field_or_none: + cast_internal_type = self.lhs.output_field.base_field.get_internal_type() + cast_sql = '::{}'.format(connection.data_types.get(cast_internal_type)) + return '%s @> %s%s' % (lhs, rhs, cast_sql), params + + +DateRangeField.register_lookup(DateTimeRangeContains) +DateTimeRangeField.register_lookup(DateTimeRangeContains) + + +class RangeContainedBy(models.Lookup): + lookup_name = 'contained_by' + type_mapping = { + 'integer': 'int4range', + 'bigint': 'int8range', + 'double precision': 'numrange', + 'date': 'daterange', + 'timestamp with time zone': 'tstzrange', + } + + def as_sql(self, qn, connection): + field = self.lhs.output_field + if isinstance(field, models.FloatField): + sql = '%s::numeric <@ %s::{}'.format(self.type_mapping[field.db_type(connection)]) + else: + sql = '%s <@ %s::{}'.format(self.type_mapping[field.db_type(connection)]) + lhs, lhs_params = self.process_lhs(qn, connection) + rhs, rhs_params = self.process_rhs(qn, connection) + params = lhs_params + rhs_params + return sql % (lhs, rhs), params + + def get_prep_lookup(self): + return RangeField().get_prep_value(self.rhs) + + +models.DateField.register_lookup(RangeContainedBy) +models.DateTimeField.register_lookup(RangeContainedBy) +models.IntegerField.register_lookup(RangeContainedBy) +models.BigIntegerField.register_lookup(RangeContainedBy) +models.FloatField.register_lookup(RangeContainedBy) + + +@RangeField.register_lookup +class FullyLessThan(lookups.PostgresSimpleLookup): + lookup_name = 'fully_lt' + operator = '<<' + + +@RangeField.register_lookup +class FullGreaterThan(lookups.PostgresSimpleLookup): + lookup_name = 'fully_gt' + operator = '>>' + + +@RangeField.register_lookup +class NotLessThan(lookups.PostgresSimpleLookup): + lookup_name = 'not_lt' + operator = '&>' + + +@RangeField.register_lookup +class NotGreaterThan(lookups.PostgresSimpleLookup): + lookup_name = 'not_gt' + operator = '&<' + + +@RangeField.register_lookup +class AdjacentToLookup(lookups.PostgresSimpleLookup): + lookup_name = 'adjacent_to' + operator = '-|-' + + +@RangeField.register_lookup +class RangeStartsWith(models.Transform): + lookup_name = 'startswith' + function = 'lower' + + @property + def output_field(self): + return self.lhs.output_field.base_field + + +@RangeField.register_lookup +class RangeEndsWith(models.Transform): + lookup_name = 'endswith' + function = 'upper' + + @property + def output_field(self): + return self.lhs.output_field.base_field + + +@RangeField.register_lookup +class IsEmpty(models.Transform): + lookup_name = 'isempty' + function = 'isempty' + output_field = models.BooleanField() diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/fields/utils.py b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/utils.py new file mode 100644 index 0000000..82da93e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/fields/utils.py @@ -0,0 +1,3 @@ +class AttributeSetter: + def __init__(self, name, value): + setattr(self, name, value) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__init__.py b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__init__.py new file mode 100644 index 0000000..9158f1e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__init__.py @@ -0,0 +1,4 @@ +from .array import * # NOQA +from .hstore import * # NOQA +from .jsonb import * # NOQA +from .ranges import * # NOQA diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b123ae016a3ca499b5f13a7110f9ffaa050b8b43 GIT binary patch literal 238 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 E07F==I{*Lx literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/ranges.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/__pycache__/ranges.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91d775d853eec93f7180763546e7fe832afe1048 GIT binary patch literal 3552 zcmcInNpBoQ6n?$TzS$GUNg%+m2xw5oN^T$v5FtSbVF?@&XhmwZr^`dzy-cclaBP_i zK|w;|A8_TsU+OC-{sIz$?^X4Tmk^W#>FKI|_3G8~_BZRjUi-%6-Fts^h<>M2PaW_F zXzFit5nhWDqSPYaqSPkerqm(dA&cj1N?b~7*V zH(_jZfn5c5!22?`wZIO6UE!k`+g@NV0K3YkGqyvbrT1N^Q4IH#?e$17OBo=a68Gv;uK=IxX3A7e|b-{sH5l1p%dn1 z@zg3neFZ=eYd1n~v%ZDHntce2qhXif7`k`qN1|QeYpk0`pa-CJ2;uqAr`9CH4W``o zIlbD_p%eL+wy?%1OJ2FX{bAUY=6vuIEA z3Or^v!FWaSWi<^UM34YkhI%=iYD&;=V!1<;b&#vvv<0QJ4?FH{d zH};E-XbrkP!#z<(&CV7*NZI(F8S=;8Zvl!OcRH2z| z%tb`|O_KW+HHMfoqz10&wmoYL!X4t^vK^~9gWY8lQMNUEL2)<}Wp5_MER-V923yvW z`~YIE&1aCd=gP~xwx;L&ww?=EOMY7uXjncE8q-~6=p}S7ps5vfWDTsLJ+Lm=UAt?o z*hg2-$?VMWOTn=dvu$g^{R#kFD}++G9-yWCAT5?fizI9sR=R{?!4B=ajE6VC6^xAG z2UlR%_&l_%?=3o9*Ao!9UH}z*=hEG5OfD>YzfJNNvMlS&4vyKusdo4}tI=1-E^YJG zJaNQF}2R4Dl(uWQ|bO7uL|Y0=kB z9FZeT%a?hlj!~Y*pA&uAoa8A4s?^({RIClM>Xr+OeGT89)v_JfZ%@O0=P~*T2P4Oy|pHeE}w+xgKzRg zjIw#UBcvK{d2RUylfB8E$K6}pu@EI&qTj8OmQFpA!+~_UW2K!icghF&)c4U8D<6zm zE$jbfi=D%;H9TSK=^1M4l>5}|@M*W6B|F_EJI|l60~3#<5u8SB6sSs`Mp3;*<#38M zHlZhLickLZS+dq!vbO$jtUV1^x<)(25vP|YbHoRJ{vRB%%@Q2$2pwf>-Ix zkD}-YIDxK_kluB&-kPvj`Qhyt=B8dnhX9Rt*CaTkCKG>kj75Ou>RRU|Tdspx=hrIF z_#IsURJB7bEDEXoh8ZHio5-Oj~POK&4NY!#Q- zL9Am2<4G=sNlI%KM%O&!O3<=_<^JVrYF@;N8e{KFB|3Y_ChyMiv1|mohztCI{sVvv zHy6fAIkKC`tK*dRZtVxm#VP46m0317O_F(!D_q5rzG`!gg`d;12JV&X>vi+{2Ld41 AegFUf literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/array.py b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/array.py new file mode 100644 index 0000000..554a39d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/array.py @@ -0,0 +1,214 @@ +import copy +from itertools import chain + +from django import forms +from django.contrib.postgres.validators import ( + ArrayMaxLengthValidator, ArrayMinLengthValidator, +) +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from ..utils import prefix_validation_error + + +class SimpleArrayField(forms.CharField): + default_error_messages = { + 'item_invalid': _('Item %(nth)s in the array did not validate:'), + } + + def __init__(self, base_field, *, delimiter=',', max_length=None, min_length=None, **kwargs): + self.base_field = base_field + self.delimiter = delimiter + super().__init__(**kwargs) + if min_length is not None: + self.min_length = min_length + self.validators.append(ArrayMinLengthValidator(int(min_length))) + if max_length is not None: + self.max_length = max_length + self.validators.append(ArrayMaxLengthValidator(int(max_length))) + + def clean(self, value): + value = super().clean(value) + return [self.base_field.clean(val) for val in value] + + def prepare_value(self, value): + if isinstance(value, list): + return self.delimiter.join(str(self.base_field.prepare_value(v)) for v in value) + return value + + def to_python(self, value): + if isinstance(value, list): + items = value + elif value: + items = value.split(self.delimiter) + else: + items = [] + errors = [] + values = [] + for index, item in enumerate(items): + try: + values.append(self.base_field.to_python(item)) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index + 1}, + )) + if errors: + raise ValidationError(errors) + return values + + def validate(self, value): + super().validate(value) + errors = [] + for index, item in enumerate(value): + try: + self.base_field.validate(item) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index + 1}, + )) + if errors: + raise ValidationError(errors) + + def run_validators(self, value): + super().run_validators(value) + errors = [] + for index, item in enumerate(value): + try: + self.base_field.run_validators(item) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index + 1}, + )) + if errors: + raise ValidationError(errors) + + def has_changed(self, initial, data): + try: + value = self.to_python(data) + except ValidationError: + pass + else: + if initial in self.empty_values and value in self.empty_values: + return False + return super().has_changed(initial, data) + + +class SplitArrayWidget(forms.Widget): + template_name = 'postgres/widgets/split_array.html' + + def __init__(self, widget, size, **kwargs): + self.widget = widget() if isinstance(widget, type) else widget + self.size = size + super().__init__(**kwargs) + + @property + def is_hidden(self): + return self.widget.is_hidden + + def value_from_datadict(self, data, files, name): + return [self.widget.value_from_datadict(data, files, '%s_%s' % (name, index)) + for index in range(self.size)] + + def value_omitted_from_data(self, data, files, name): + return all( + self.widget.value_omitted_from_data(data, files, '%s_%s' % (name, index)) + for index in range(self.size) + ) + + def id_for_label(self, id_): + # See the comment for RadioSelect.id_for_label() + if id_: + id_ += '_0' + return id_ + + def get_context(self, name, value, attrs=None): + attrs = {} if attrs is None else attrs + context = super().get_context(name, value, attrs) + if self.is_localized: + self.widget.is_localized = self.is_localized + value = value or [] + context['widget']['subwidgets'] = [] + final_attrs = self.build_attrs(attrs) + id_ = final_attrs.get('id') + for i in range(max(len(value), self.size)): + try: + widget_value = value[i] + except IndexError: + widget_value = None + if id_: + final_attrs = {**final_attrs, 'id': '%s_%s' % (id_, i)} + context['widget']['subwidgets'].append( + self.widget.get_context(name + '_%s' % i, widget_value, final_attrs)['widget'] + ) + return context + + @property + def media(self): + return self.widget.media + + def __deepcopy__(self, memo): + obj = super().__deepcopy__(memo) + obj.widget = copy.deepcopy(self.widget) + return obj + + @property + def needs_multipart_form(self): + return self.widget.needs_multipart_form + + +class SplitArrayField(forms.Field): + default_error_messages = { + 'item_invalid': _('Item %(nth)s in the array did not validate:'), + } + + def __init__(self, base_field, size, *, remove_trailing_nulls=False, **kwargs): + self.base_field = base_field + self.size = size + self.remove_trailing_nulls = remove_trailing_nulls + widget = SplitArrayWidget(widget=base_field.widget, size=size) + kwargs.setdefault('widget', widget) + super().__init__(**kwargs) + + def clean(self, value): + cleaned_data = [] + errors = [] + if not any(value) and self.required: + raise ValidationError(self.error_messages['required']) + max_size = max(self.size, len(value)) + for index in range(max_size): + item = value[index] + try: + cleaned_data.append(self.base_field.clean(item)) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index + 1}, + )) + cleaned_data.append(None) + else: + errors.append(None) + if self.remove_trailing_nulls: + null_index = None + for i, value in reversed(list(enumerate(cleaned_data))): + if value in self.base_field.empty_values: + null_index = i + else: + break + if null_index is not None: + cleaned_data = cleaned_data[:null_index] + errors = errors[:null_index] + errors = list(filter(None, errors)) + if errors: + raise ValidationError(list(chain.from_iterable(errors))) + return cleaned_data diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/hstore.py b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/hstore.py new file mode 100644 index 0000000..f5af8f1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/hstore.py @@ -0,0 +1,58 @@ +import json + +from django import forms +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +__all__ = ['HStoreField'] + + +class HStoreField(forms.CharField): + """ + A field for HStore data which accepts dictionary JSON input. + """ + widget = forms.Textarea + default_error_messages = { + 'invalid_json': _('Could not load JSON data.'), + 'invalid_format': _('Input must be a JSON dictionary.'), + } + + def prepare_value(self, value): + if isinstance(value, dict): + return json.dumps(value) + return value + + def to_python(self, value): + if not value: + return {} + if not isinstance(value, dict): + try: + value = json.loads(value) + except json.JSONDecodeError: + raise ValidationError( + self.error_messages['invalid_json'], + code='invalid_json', + ) + + if not isinstance(value, dict): + raise ValidationError( + self.error_messages['invalid_format'], + code='invalid_format', + ) + + # Cast everything to strings for ease. + for key, val in value.items(): + if val is not None: + val = str(val) + value[key] = val + return value + + def has_changed(self, initial, data): + """ + Return True if data differs from initial. + """ + # For purposes of seeing whether something has changed, None is + # the same as an empty dict, if the data or initial value we get + # is None, replace it w/ {}. + initial_value = self.to_python(initial) + return super().has_changed(initial_value, data) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/jsonb.py b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/jsonb.py new file mode 100644 index 0000000..bb681e0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/jsonb.py @@ -0,0 +1,62 @@ +import json + +from django import forms +from django.utils.translation import gettext_lazy as _ + +__all__ = ['JSONField'] + + +class InvalidJSONInput(str): + pass + + +class JSONString(str): + pass + + +class JSONField(forms.CharField): + default_error_messages = { + 'invalid': _("'%(value)s' value must be valid JSON."), + } + widget = forms.Textarea + + def to_python(self, value): + if self.disabled: + return value + if value in self.empty_values: + return None + elif isinstance(value, (list, dict, int, float, JSONString)): + return value + try: + converted = json.loads(value) + except json.JSONDecodeError: + raise forms.ValidationError( + self.error_messages['invalid'], + code='invalid', + params={'value': value}, + ) + if isinstance(converted, str): + return JSONString(converted) + else: + return converted + + def bound_data(self, data, initial): + if self.disabled: + return initial + try: + return json.loads(data) + except json.JSONDecodeError: + return InvalidJSONInput(data) + + def prepare_value(self, value): + if isinstance(value, InvalidJSONInput): + return value + return json.dumps(value) + + def has_changed(self, initial, data): + if super().has_changed(initial, data): + return True + # For purposes of seeing whether something has changed, True isn't the + # same as 1 and the order of keys doesn't matter. + data = self.to_python(data) + return json.dumps(initial, sort_keys=True) != json.dumps(data, sort_keys=True) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/forms/ranges.py b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/ranges.py new file mode 100644 index 0000000..5f2b243 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/forms/ranges.py @@ -0,0 +1,95 @@ +from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange + +from django import forms +from django.core import exceptions +from django.forms.widgets import MultiWidget +from django.utils.translation import gettext_lazy as _ + +__all__ = [ + 'BaseRangeField', 'IntegerRangeField', 'FloatRangeField', + 'DateTimeRangeField', 'DateRangeField', 'RangeWidget', +] + + +class BaseRangeField(forms.MultiValueField): + default_error_messages = { + 'invalid': _('Enter two valid values.'), + 'bound_ordering': _('The start of the range must not exceed the end of the range.'), + } + + def __init__(self, **kwargs): + if 'widget' not in kwargs: + kwargs['widget'] = RangeWidget(self.base_field.widget) + if 'fields' not in kwargs: + kwargs['fields'] = [self.base_field(required=False), self.base_field(required=False)] + kwargs.setdefault('required', False) + kwargs.setdefault('require_all_fields', False) + super().__init__(**kwargs) + + def prepare_value(self, value): + lower_base, upper_base = self.fields + if isinstance(value, self.range_type): + return [ + lower_base.prepare_value(value.lower), + upper_base.prepare_value(value.upper), + ] + if value is None: + return [ + lower_base.prepare_value(None), + upper_base.prepare_value(None), + ] + return value + + def compress(self, values): + if not values: + return None + lower, upper = values + if lower is not None and upper is not None and lower > upper: + raise exceptions.ValidationError( + self.error_messages['bound_ordering'], + code='bound_ordering', + ) + try: + range_value = self.range_type(lower, upper) + except TypeError: + raise exceptions.ValidationError( + self.error_messages['invalid'], + code='invalid', + ) + else: + return range_value + + +class IntegerRangeField(BaseRangeField): + default_error_messages = {'invalid': _('Enter two whole numbers.')} + base_field = forms.IntegerField + range_type = NumericRange + + +class FloatRangeField(BaseRangeField): + default_error_messages = {'invalid': _('Enter two numbers.')} + base_field = forms.FloatField + range_type = NumericRange + + +class DateTimeRangeField(BaseRangeField): + default_error_messages = {'invalid': _('Enter two valid date/times.')} + base_field = forms.DateTimeField + range_type = DateTimeTZRange + + +class DateRangeField(BaseRangeField): + default_error_messages = {'invalid': _('Enter two valid dates.')} + base_field = forms.DateField + range_type = DateRange + + +class RangeWidget(MultiWidget): + def __init__(self, base_widget, attrs=None): + widgets = (base_widget, base_widget) + super().__init__(widgets, attrs) + + def decompress(self, value): + if value: + return (value.lower, value.upper) + return (None, None) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/functions.py b/env/lib/python3.5/site-packages/django/contrib/postgres/functions.py new file mode 100644 index 0000000..819ce05 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/functions.py @@ -0,0 +1,11 @@ +from django.db.models import DateTimeField, Func, UUIDField + + +class RandomUUID(Func): + template = 'GEN_RANDOM_UUID()' + output_field = UUIDField() + + +class TransactionNow(Func): + template = 'CURRENT_TIMESTAMP' + output_field = DateTimeField() diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/indexes.py b/env/lib/python3.5/site-packages/django/contrib/postgres/indexes.py new file mode 100644 index 0000000..677c63b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/indexes.py @@ -0,0 +1,100 @@ +from django.db.models import Index +from django.utils.functional import cached_property + +__all__ = ['BrinIndex', 'GinIndex', 'GistIndex'] + + +class PostgresIndex(Index): + + @cached_property + def max_name_length(self): + # Allow an index name longer than 30 characters when the suffix is + # longer than the usual 3 character limit. The 30 character limit for + # cross-database compatibility isn't applicable to PostgreSQL-specific + # indexes. + return Index.max_name_length - len(Index.suffix) + len(self.suffix) + + def create_sql(self, model, schema_editor, using=''): + statement = super().create_sql(model, schema_editor, using=' USING %s' % self.suffix) + with_params = self.get_with_params() + if with_params: + statement.parts['extra'] = 'WITH (%s) %s' % ( + ', '.join(with_params), + statement.parts['extra'], + ) + return statement + + def get_with_params(self): + return [] + + +class BrinIndex(PostgresIndex): + suffix = 'brin' + + def __init__(self, *, pages_per_range=None, **kwargs): + if pages_per_range is not None and pages_per_range <= 0: + raise ValueError('pages_per_range must be None or a positive integer') + self.pages_per_range = pages_per_range + super().__init__(**kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.pages_per_range is not None: + kwargs['pages_per_range'] = self.pages_per_range + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.pages_per_range is not None: + with_params.append('pages_per_range = %d' % self.pages_per_range) + return with_params + + +class GinIndex(PostgresIndex): + suffix = 'gin' + + def __init__(self, *, fastupdate=None, gin_pending_list_limit=None, **kwargs): + self.fastupdate = fastupdate + self.gin_pending_list_limit = gin_pending_list_limit + super().__init__(**kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.fastupdate is not None: + kwargs['fastupdate'] = self.fastupdate + if self.gin_pending_list_limit is not None: + kwargs['gin_pending_list_limit'] = self.gin_pending_list_limit + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.gin_pending_list_limit is not None: + with_params.append('gin_pending_list_limit = %d' % self.gin_pending_list_limit) + if self.fastupdate is not None: + with_params.append('fastupdate = %s' % ('on' if self.fastupdate else 'off')) + return with_params + + +class GistIndex(PostgresIndex): + suffix = 'gist' + + def __init__(self, *, buffering=None, fillfactor=None, **kwargs): + self.buffering = buffering + self.fillfactor = fillfactor + super().__init__(**kwargs) + + def deconstruct(self): + path, args, kwargs = super().deconstruct() + if self.buffering is not None: + kwargs['buffering'] = self.buffering + if self.fillfactor is not None: + kwargs['fillfactor'] = self.fillfactor + return path, args, kwargs + + def get_with_params(self): + with_params = [] + if self.buffering is not None: + with_params.append('buffering = %s' % ('on' if self.buffering else 'off')) + if self.fillfactor is not None: + with_params.append('fillfactor = %d' % self.fillfactor) + return with_params diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html b/env/lib/python3.5/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html new file mode 100644 index 0000000..32fda82 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/jinja2/postgres/widgets/split_array.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..710e5f4e5bd699d9a2e3d1b848981f6008fdb1bf GIT binary patch literal 4416 zcmeHJ+iw(A7(Xfst~V~?C0_FRP}&A&FQp>gvLGUmVu3;{uV%V?x;rpCv(B9D(wLag z82k;e)P2d6G z2(TOYHSiYO78BxU;BSu$aTxPIJr&v4xmJic#=XFOz+vEi;1{*|b?bzHngV8q4PpgM z3>#R44XTC>TLj1jObQ$Ofg4l^b%$sH6~cHxov=NE{|0%Nd&lNvDwzbKaa0ak%yR)~ZpCGcS!kX%^G8+cW#EEVUGrDy0*NN~IE4 z%+MN;C*!zT5|K%BVApmhOfS(IJJ@w_@4WG;crvyJ2S_?lYN&)mr4Z0W$;OH5q-??T ze5o>T_w6&b&(pE20qGfgovfP+BfP!eQgtoUNT67cUG_}d*ynmhKTS?49Qv7UofLI5 zP9~G2U6drOW-=*sQ&G1K-8Swv!L2(pTWQm#sJ|nV;vHM(*HWp5#f}avwqx(l>awzO1L?A{fz=`T|IJMPPQ4 zm?`#Q`>dYPpOBsc&&gmMgwLZrL*3UV+&MWeDIBXPO*NHd=P;ay*k0U!4oUQ2&Me6YcK@?9trEg&2 zCSu>vg#pZGLSLT?6N{cjNS#X|`7GG*ki%02@S?85{^4LabaikV zwJ6*I3CI@CIVJ!#hY})25${FiX-@DKW;<^JXV}uc$d!6rmsG6(o@9>XeX@I!gMFW5 z|1X&@!eukO;WqrobNpV&zLPA!>+<#T=8qAqKbMn z$<;KhIl*{v3S}m&6rZ99jN&DM3dS`9R8^XPKMNG7S$;)?oUseb5Pg{o%PCy?6W}}D z@GxGEyr#xA2s_7HNZ$k-eq8V~B{&CWs8aQpIM_g6P=GM9iJv6%HrEbm6_p9^5q*td X(di`{U{yoys(T4)M-Q(hBEB_ObP literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 0000000..24dcc17 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,140 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "PostgreSQL extensions" +msgstr "ملحقات PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "العنصر %(nth)s في المجموعة لم يتم التحقق منه: " + +msgid "Nested arrays must have the same length." +msgstr "يجب أن تكون المجموعات المتداخلة بنفس الطول." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "كائن JSON" + +msgid "Value must be valid JSON." +msgstr "يجب أن تكون قيمة JSON صالحة." + +msgid "Could not load JSON data." +msgstr "لا يمكن عرض بيانات JSON." + +msgid "Input must be a JSON dictionary." +msgstr "المُدخل يجب أن يكون بصيغة بصيغة قاموس JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "القيمة '%(value)s' يجب أن تكون قيمة JSON صالحة." + +msgid "Enter two valid values." +msgstr "إدخال قيمتين صالحتين." + +msgid "The start of the range must not exceed the end of the range." +msgstr "بداية المدى يجب ألا تتجاوز نهاية المدى." + +msgid "Enter two whole numbers." +msgstr "أدخل رقمين كاملين." + +msgid "Enter two numbers." +msgstr "أدخل رقمين." + +msgid "Enter two valid date/times." +msgstr "أدخل تاريخين/وقتين صحيحين." + +msgid "Enter two valid dates." +msgstr "أدخل تاريخين صحيحين." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[1] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[2] "" +"القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[3] "" +"القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[4] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." +msgstr[5] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[1] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[2] "" +"القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[3] "" +"القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[4] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." +msgstr[5] "" +"القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "بعض المفاتيح مفقودة: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "بعض المفاتيح المزوّدة غير معرّفه: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "تأكد من أن هذا المدى أقل من أو يساوي %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "تأكد من أن هذا المدى أكثر من أو يساوي %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ec4c9bb5608f22cc4a9a109321ac0809463a7e7 GIT binary patch literal 3132 zcmc(g%WoS+9LEP}p>=tdN2vhuYei|IX8q_xP22`Z(-ZuszrpTG~UJx?-r1l$Wg2j;+o;3Rknyas*(-U9c7zkzRnyPsn0HSiGV zbdQ6tgYzJP5NSJiiOR3SI^Y6yPZMId~Sl4d%dKL1))n zPc!xnY(EXU{U4uUY#;asNZ`IbjC}--fzx0NI=g-V-vRG|&i~)RL*RkEXW!+>`X_; z7C+KZ#C1gwZpvX$Q^E?>q)H^X6_JzD6hBxwZfwb5A20f-aC5(A2UCEjC zkaQfBL}Z-$!B*-kd=NP+1Mz@&_t{QN-L_w^hDvOnF{^8_9mbTWar9-`%24yDnPsz9 z1n^wj>Zl>9;fWv~MZ8Hq!ta8d7zfje?4m?!%AvMgYJ-nVHLUle<&%V>G5ivCU4Hs< zP(e$gK8W}B82i~r>oos`(g)}a!nAtyj#~I9c0NSs9IsKhM8-x^S5QRZ;5MgYr3||y zj1_*G4wELa%2!-{3o<+qq=c^6YL?B1#-gkjKD|hyVTCrxu3-xyM3zO<5W+7gkjCJg zB7Ae3qkVx`FYBOj&lkqM{3)++nhJ&D$%$k6dX| z44wDzfv&{7BD_VxgCb3}L{#DuMoSv0T3ajTa`k#WYn@8DB$BUksZ#@}zKR@g?iaH8%rsh3XqeTk!9R-<$kh~j^bD1&JTk&gezthQ8{d?3XDx}yo6+UaPikVk zB<;}DBJoycUd0ht-i0stAMNSy5C)ovdm3&O!KB#w&{J)YpXcG)NXb*mQ}B+08$Ohgyt|slTXib2QxP3&}MHj_R8yFOvxd#&e|MlF zZpB);Dkjmytk{;uE%QEZac#TnIHbGI&h^?YNxZYhBWxfm%SJBy5>sk8^HUKdMLIjs zsYu*F9`=>1vgImT$, 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-09-09 13:45+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL uzantıları" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Array-dəki %(nth)s element təsdiqlənə bilmir:" + +msgid "Nested arrays must have the same length." +msgstr "İç-içə array-lərin uzunluğu eyni olmalıdır." + +msgid "Map of strings to strings/nulls" +msgstr "String-lərin string/null-lara xəritələnmə cədvəli" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" dəyəri string və ya null deyil." + +msgid "A JSON object" +msgstr "JSON obyekt" + +msgid "Value must be valid JSON." +msgstr "Dəyər düzgün JSON olmalıdır." + +msgid "Could not load JSON data." +msgstr "JSON məlumat yüklənə bilmir." + +msgid "Input must be a JSON dictionary." +msgstr "Giriş JSON lüğət olmalıdır." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' dəyəri düzgün JSON olmalıdır." + +msgid "Enter two valid values." +msgstr "İki düzgün dəyər daxil edin." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Aralığın başlanğıcı bitişindən böyük ola bilməz." + +msgid "Enter two whole numbers." +msgstr "İki tam rəqəm daxil edin." + +msgid "Enter two numbers." +msgstr "İki rəqəm daxil edin." + +msgid "Enter two valid date/times." +msgstr "İki düzgün tarix/vaxt daxil edin." + +msgid "Enter two valid dates." +msgstr "İki düzgün tarix daxil edin." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Siyahıda %(show_value)d element var, ən çox %(limit_value)d ola bilər." +msgstr[1] "" +"Siyahıda %(show_value)d element var, ən çox %(limit_value)d ola bilər." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Siyahıda %(show_value)d element var, ən az %(limit_value)d ola bilər." +msgstr[1] "" +"Siyahıda %(show_value)d element var, ən az %(limit_value)d ola bilər." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Bəzi açarlar əksikdir: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Bəzi bilinməyən açarlar təchiz edilib: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Bu aralığın %(limit_value)s və ya daha az olduğuna əmin olun." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Bu aralığın %(limit_value)s və ya daha böyük olduğuna əmin olun." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..beffc171e3d6cafbc565d8f4ae862cd3d8c51893 GIT binary patch literal 4490 zcmd^B+iw(A7(Xfq)EnYG-abg6-N4>T)pqF?r9!N7DNr#!>9l*gJ9KttotdSS5Yv{> z5=uc5t?|JcqapZUvLLmgbm3o^llbC`5Blzd@elC#o!RbgpI#7Sm;bIyF%^WEl$ zbt^s+xSqiM4DRo6Kacy&U3lPHeYX%Bfop&d0OP=?fN9`f;9I~qfER%4fWH8r2ClqE zh{u8Jfh@Zf_$06!NI(;~1$Y{G5jYFH0DN~vsDIT;A)2sm1U?4r1`@Cz7y*t0+kuyW zap2EDw(GfjK?fUJf%~w2dv$2nSHMoJ=YhjOu||mZ0VBZmylxQUHNXa7D{uhV0sIok zcK!t10bF~Z5Iw+yK!r292>c#+42Q$^^gJX)FYr9@S>Uh0t-y6_L;bseCf28c`}zCA z{=-5*jJ{xc^}=xosL&Tk1l$z&rvcrNuLqN2kO|B>h⪻G%d0_o~V+jz>VP zz>(|NaGXTr#-<~NRg@90k@O4Yi=I!tl2>MiUO%{RZ%n+Rk(}PcvdDe1OmUXhn$K1zD)1$5PBP#c_&OC`=(_0 zGj`rV<{qO!PCt3RYuZ_4k+bj`w~LnLiM`VEWhRV=7e+B>9N`3)d&JwoWy!2Y#c8fZb~`2x zaYv{ot#0``ulR`z{}aZVOlYCoenVA*`kq^(H?2!Q?x@` zhFkPZG@quN?-x?>_~77R%x8&azdXuJ@zAFQuqqPby)qtY*weLVXU+R$EYZ-3ij+32 z8Y-YlePlqqV4*~}QD4q*J?W?4?AaAz&r$lS7=~pdHq5n2?TSeEf zqPrY7@1@8t=%tr#*+$`Oy2;*{Or+CE+O&!IHL*UOOwx8r5XiCaNH;HhYEQTDtL8|w zC!6W`@sOn>*%ARuvci&1C-{@5>qx&)V{eO8_aPT*7Ie0!Az?c;L%`O^wuVLXB$y4# zK}n6PNnkmcq2NYP3NEWDy)031NlmCRb%xXk_HU?R5KjkJg0h+j<|_%u^M~;D(vQQR z1T(>$8Wq8(EUKhN)i4v{<29^C)H#B}Qt%D7PXx1SN{fcL67E^>LM&*)ffjrLeUs2u zX1ZX8*|!i(9SyFNnub9$1hcP!ZC, 2015 +# znotdead , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Пашырэнні PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Элемент масіву нумар %(nth)s не прайшоў праверкі:" + +msgid "Nested arrays must have the same length." +msgstr "Укладзенныя масівы павінны мець аднолькавую даўжыню." + +msgid "Map of strings to strings/nulls" +msgstr "Адпаведнасць радкоў у радкі/нулі" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Значэнне \"%(key)s\" не з'яўляецца радком ці нулём." + +msgid "A JSON object" +msgstr "JSON аб’ект" + +msgid "Value must be valid JSON." +msgstr "Значэнне павінна быць сапраўдным JSON." + +msgid "Could not load JSON data." +msgstr "Не атрымалася загрузіць дадзеныя JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Значэнне павінна быць JSON слоўнікам. " + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' значэнне павінна быць сапраўдным JSON." + +msgid "Enter two valid values." +msgstr "Увядзіце два сапраўдных значэнні." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Пачатак дыяпазону не павінен перавышаць канец дыяпазону." + +msgid "Enter two whole numbers." +msgstr "Увядзіце два цэлых лікі." + +msgid "Enter two numbers." +msgstr "Увядзіце два лікі." + +msgid "Enter two valid date/times." +msgstr "Увядзіце дзве/два сапраўдных даты/часу." + +msgid "Enter two valid dates." +msgstr "Увядзіце дзве сапраўдных даты." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Спіс мае %(show_value)d элемент, ён павінен мець не болей чым " +"%(limit_value)d." +msgstr[1] "" +"Спіс мае %(show_value)d элемента, ён павінен мець не болей чым " +"%(limit_value)d." +msgstr[2] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не болей чым " +"%(limit_value)d." +msgstr[3] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не болей чым " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Спіс мае %(show_value)d элемент, ён павінен мець не менш чым %(limit_value)d." +msgstr[1] "" +"Спіс мае %(show_value)d элемента, ён павінен мець не менш чым " +"%(limit_value)d." +msgstr[2] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не менш чым " +"%(limit_value)d." +msgstr[3] "" +"Спіс мае %(show_value)d элементаў, ён павінен мець не менш чым " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Не хапае нейкіх ключоў: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Дадзены нейкія невядомыя ключы: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Упэўніцеся, что ўсе элементы гэтага інтэрвалу менш ці раўны %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Упэўніцеся, что ўсе элементы гэтага інтэрвалу больш ці раўны %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3d0413d315e778e4320a6a4d3af57ae60f08130e GIT binary patch literal 3439 zcmc&#U2GLa6dn~suZoI)7&MMC4Q=S&pN0r5R0S*vSfD~B#`w4GPVZgVJA2)k+uJ5S zK#hPr*hr%Bg$Fe;KABQmd+i@DK58->AN0w0V|@0-2fs6W`*TYRHAJ0c_nVnLbG~!V zoOAZqEgL>&7!Tul0?#a-C-J;~8(tU&*aA#|_W}O|J`UV?J7dRyPXS*7O5hgYG;ka6 zN8qEt-++$+*&U2+1#AVj0}H^ffNui71a8{ESS#>r;3L4FfgJb;uno9*BV+r3yMe@C z1%3)!MuEGqZr#M#{lK?@1z-g@1pFNME^ymjj6DPV6!<)F7T5v&3+MuKcQdvFcpA7L z_zCcL;4i>U;Q2no*sECoa1VS2w%nVZ?*hJt^$_q4;7`C#U;)9xF>>1u&@i}S$L0pY zG&{)d2k^iZJLoQGfSNsIXN)0?45}H-u;Wg=Dc*D^5855ZU>alFTUrObuqxWrc5WxU zTveL)30eg{KXUT;u`Jtfkw<-}MZabTqiX1L8EGCyUMj+UPkUL`B~>*RT$enJSD<+8 z$)ezx^hf1ND6|NNc`+8A7BNXl9>rX|Q}sfwBi_;)2IWA%)i7wC>O!H^x^!92TEu0w z+$Um1>KC?BU*Utu>7Xpu__oTnHMMEKR*FKg#Bo@QG8~h-)TVeKVW{9<9DBpuM|3HM zmK)42XWaop-yccs1ybRZDn+$MG<+UFQ#;-qyA=P19CYvjQCo;-a}53L&2_4OL+Khi z%Tbyga>ZTWik&ymc}yrR{50MwP3)34Nckza^2&mTLKbx?%X%WEk(MW4?&e}h3#o!g zDt0o0$Qd!LIKnGyy@64Q;r#VkXlC#OE zxoXDE7&jC2nrt*$YPTH1SIwlEPDYryf=^}^JKrwKPMNXfEWS^edfJvr1(eTWon__= zsGTGMuuk&i9K9}(mb#gvEqns6nMrA}JC&S=H8Ws?G2eh~20ODb1lB@g2AXkf zj5M1$4yLgc1&kKB3UPbNY~7!N4stAcpXf=iHEAXJESZ*EGSmN%{4&mvbrTK0F~O4f z>j(jyg@J3xkUiugj!+0Gny|Q@GvhYQv*hy)&rc&xbRoE~CJpPRT$v%JzV^}NJecf- zEV{~gldE)8ENNGy-HHoiQ6WX<-P9LbW5aW?0=!X38{@Qs)&*=tvV{9|Jd{O8gUtU zM2&^=yN(R9on|3f>L}jp`;@)XMtUS4*g~NehFqC}B6Juklx2TY$}cpSi_lLMLOi2r zYUnN~8Y;GFRQrdBl#Lj-Wq1wgYFosz|EKvV8Aa!yY_f_b(pI|Al1S6sl2QZ!woKVe zpyq4Kx`}DI>ML;Lf^7k~E9!#O-eAyTtD+^vbd`9d){Migi`EuMPLt2cC<-rm4`sZf RG{LZHtu&P-0%bcp`x_1&-x~k` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..e2a44e6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Todor Lubenov , 2015 +# Venelin Stoykov , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL разширения" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Стойност %(nth)s в масива не валидират:" + +msgid "Nested arrays must have the same length." +msgstr "Вложените масиви, трябва да имат същата дължина." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "JSON обект" + +msgid "Value must be valid JSON." +msgstr "Стойността трябва да е валиден JSON" + +msgid "Could not load JSON data." +msgstr "Не можа да зареди JSON данни ." + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' стойност трябва да е JSON." + +msgid "Enter two valid values." +msgstr "Въведете две валидни стойности." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Началото на обхвата не трябва да превишава края му." + +msgid "Enter two whole numbers." +msgstr "Въведете две цели числа" + +msgid "Enter two numbers." +msgstr "Въведете две числа." + +msgid "Enter two valid date/times." +msgstr "Въведете две валидни дати/времена." + +msgid "Enter two valid dates." +msgstr "Въведете две коректни дати." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Списъкът съдържа %(show_value)d елемент, а трябва да има не повече от " +"%(limit_value)d." +msgstr[1] "" +"Списъкът съдържа %(show_value)d елемента, а трябва да има не повече от " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Списъкът съдържа %(show_value)d елемент, а трябва да има поне " +"%(limit_value)d." +msgstr[1] "" +"Списъкът съдържа %(show_value)d елемента, а трябва да има поне " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Някои ключове липсват: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Бяха предоставени някои неизвестни ключове: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Уверете се, че този обхват е изцяло по-малък от или равен на %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Уверете се че интервала е изцяло по-голям от или равен на %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4cbc9a00e17ac677290de9fa5932ed4b3b9e234f GIT binary patch literal 3167 zcmcJROOI4V6vs;if%c8>XyAaso(|l8OeQ)s3^s8!u z;{FZyVcgdr!voj;#~C{Y9sr*KE8y$k0=Nc#0)7PE01twHf^UF(pJ412@CX=m&x5al z>mY#=JOO?IehdBt-T*(_ldr#TFJm+KE`l$E>mY$GumpY%o(8`ME8rhsu$ z=fUIn{&gQ?&w+n|Z-IOFGu8l018#xAu3a$vej7XlvIDsthrttNXLEieIZgF&wFbiU46aNu$V(?=KF!5|v17x2V3 z8APM6!{AG}VRH0Qh)>unOc`Cz;teLU7jeS{@j{5$^SI&i7@H6$Ry;Pd#Z@Lsu1N8P zx|#E|DZ-ab>BEcX*UD@$lFa56(e!M|WGW?XJSoF-5lXq|WwxwcW(D~U_jpK0mg}}4 zyfjU>r-T=3huT(fFKm#~WGsnm8CT>D9h*_IEB&VfgC0_y63#u8uDE93kj}cB!n&Y- zIF#=ddk_^byW$?d{ljoHb!xodF-nZrSkb-Ak9^8=Kc=$jrP18(l-Y_GUF=-@PRWtf z*oh!+E#ILO?hj6m#=*2Yv4%u!nnrsrwZkmeG5vwNQj*Yg0#Cwd2+%+dI;bW3Lx)d0 zIW0d}r+XAi@1e76^7PSnB*TBP^FBIPd5=tsoVQZ9kws?sTG5$Oj;#sjMViOM@5tI1_GJB zs!d-{2==VmlBq~1Bsao}o?9R64a?`16^k__iP&xmSQ>s2I-L?KvoJYkY8XEnS1-Av zp)A8xKG<}q#jx!%yBs>gC~0H<4I06^HK7G0D`|2WHH2N(DZPRsH-!tLXRJ?FU0bHf z`&rv18>UW$_46CaQmA;yCLhE!o~_p2O{%q|c9LrE)aOnfuhyzn2qqWAmJB+l`u)4CkJl=P$TrDi27KMgA zJ3Z8=N9-#-h2lI#%?`It_=QUw=aTucTv)3mY_hDICXLB3zbXC5%sMrBVO?dGtK^)q zT~{aFi=S>`_7vr>3p1LIEKsdjT4MVg9dp(9gAlH2_OoppRpAd;F| zyeXCR_-~bqqDT=|lqX&$gd0VvWfO@jR9>i1*&7@YDKY@VPGr=Qnk$$!Y#=adcr*kf Yg3HlWGd, 2015,2017 +# duub qnnp, 2015 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensions de PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "L'element %(nth)s de la matriu no valida:" + +msgid "Nested arrays must have the same length." +msgstr "Les matrius niades han de tenir la mateixa longitud." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de cadenes a cadenes/nuls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "El valor de \"%(key)s no és ni una cadena ni un nul." + +msgid "A JSON object" +msgstr "Un objecte JSON" + +msgid "Value must be valid JSON." +msgstr "El valor ha de ser JSON vàlid." + +msgid "Could not load JSON data." +msgstr "No es poden carregar les dades JSON" + +msgid "Input must be a JSON dictionary." +msgstr "L'entrada ha de ser un diccionari JSON" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "El valor '%(value)s' ha de ser JSON vàlid." + +msgid "Enter two valid values." +msgstr "Introdueixi dos valors vàlids." + +msgid "The start of the range must not exceed the end of the range." +msgstr "L'inici del rang no pot excedir el seu final." + +msgid "Enter two whole numbers." +msgstr "Introduïu dos números enters positius." + +msgid "Enter two numbers." +msgstr "Introduïu dos números." + +msgid "Enter two valid date/times." +msgstr "Introduïu dues data/hora vàlides." + +msgid "Enter two valid dates." +msgstr "Introduïu dos dates vàlides." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La llista conté %(show_value)d element, no n'hauria de tenir més de " +"%(limit_value)d." +msgstr[1] "" +"La llista conté %(show_value)d elements, no n'hauria de tenir més de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La llista conté %(show_value)d element, no n'hauria de contenir menys de " +"%(limit_value)d." +msgstr[1] "" +"La llista conté %(show_value)d elements, no n'hauria de contenir menys de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Algunes claus no hi són: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "S'han facilitat claus desconegudes: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Asseguri's que aquest rang és completament menor o igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asseguri's que aquest rang és completament major o igual a %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eaff5b682b56872b00dbe74506079526c373a242 GIT binary patch literal 3686 zcmdUxO>7%Q6vqc>OKZN%ccJiF(Kc4Q{zy|A+@{cmR;1*MCJhn?sMKY&^A zPte+Ra1UdD!1mMNDBch3W$amS4txW2L2K_9;AQX^(CR<1k1+?#fd{}(!GmA}wElbx z4uL;{C&1spI_BAzVoZadKf%~Z^#A>2;#V5MvhlnM9tK0uj=urg`Paa=!PL`?y#<~J zp(buHeb5jN2GwzU4tKc8Fhv||+i7iw3vqiM_h)dyq(OsP22thr@P!MTDMPc7OmoCrEOlR2nn52r!qGZ^(ihP%(GUO|sh>*(- z&#;S9N1-57<_0%UQ^@6#AUu>*Q1yioeuI`m!Ho#5lq40B_$=Z+8AV5id@u0KwZ1|3 zsm>Q#-K|Bn3gIt8)201nkrWM$vhovbgX}Bjf2I;b@_oL;K z2Sq1vC-mC&>B~U{EsFYjytl^K&D>k3ei%ycqBBs*?vdN}!h_hkgU%^lCACP}gq~c& zCQ|E$WlSM4^n%&=mG!F#%LN1wdhRrH%u&w7lnj~@E2&u8Un$0PQ zR767)!Y?TBw8lII_+~rPeSt_;q^iqJg4IyfJXg4zB<0^GUR8?r4DZS*m&V^`6JM*eQso9x%XWS+{WS#fzE~epJe$>gGa`LAs zpD&EOb38Yk%R$h&B5I!1xkc`@lRriI(L!$Icn&Q!$+dCj;lB2{QDK1={7$R;4W}ty z5*0cdSiGmXbc^bGrqn!#5ppTwOTw8KJSfn3Q+t)7vn8EPr=}*RE^c_9&*W0$$VMSyQKJgi3|2o|^^u-us8r^m7G~_~{3T~}L(a~% zC_?9=EGakM4x>fS42&#LNvCH0DCE9#NrizfkgUe9dTitjC68l6lE%g;Pe+duQUwoq z%cbdE%29#v@!S{sW zeH?6CdixRRTa7|(9gWTFu5caQQM%PXA$L-=ZD2`YXK$FWpiNZW92xB+7@c-y`$Ehr zU-i~1978h*RdTY_NQQk|i z$g3KT`Ji)4B2rTH*0!w+iuV0!Z#+!xqVoUMUfCh;wNATaSLC6D{ehM56!rg1IgWc( z>$H$F)ca1D?rO8tyN!x8coRq&Z;;m0S0^Xgf>e-|NJOMUd?<=#j1M|({Ad}JFcp#8 zx#d@o_E%KXmX}z*O*qAAR|F1-MzPc0bjV+5;P1G}U6|Ow z$~G}8vTI#_li;jEVQLxCU9rAwFP_NK-tFF+=ojqux)^Vjio&sj7_1M<4C=jJpC{P# aiy-0oAXuVATzX`~l3`PuD)e2Cgns}{;J4BM literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 0000000..025fab4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,129 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Tomáš Ehrlich , 2015 +# Vláďa Macek , 2015-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-15 18:04+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "PostgreSQL extensions" +msgstr "Rozšíření pro PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Položka č. %(nth)s v seznamu je neplatná:" + +msgid "Nested arrays must have the same length." +msgstr "Vnořená pole musejí mít stejnou délku." + +msgid "Map of strings to strings/nulls" +msgstr "Mapování řetězců na řetězce či hodnoty NULL" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Hodnota s klíčem \"%(key)s\" není řetězec ani NULL." + +msgid "A JSON object" +msgstr "Objekt typu JSON" + +msgid "Value must be valid JSON." +msgstr "Musí být v platném formátu JSON." + +msgid "Could not load JSON data." +msgstr "Data typu JSON nelze načíst." + +msgid "Input must be a JSON dictionary." +msgstr "Vstup musí být slovník formátu JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Hodnota '%(value)s' musí být v platném formátu JSON." + +msgid "Enter two valid values." +msgstr "Zadejte dvě platné hodnoty." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Počáteční hodnota rozsahu nemůže být vyšší než koncová hodnota." + +msgid "Enter two whole numbers." +msgstr "Zadejte dvě celá čísla." + +msgid "Enter two numbers." +msgstr "Zadejte dvě čísla." + +msgid "Enter two valid date/times." +msgstr "Zadejte dvě platné hodnoty data nebo času." + +msgid "Enter two valid dates." +msgstr "Zadejte dvě platná data." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Seznam obsahuje %(show_value)d položku, ale neměl by obsahovat více než " +"%(limit_value)d." +msgstr[1] "" +"Seznam obsahuje %(show_value)d položky, ale neměl by obsahovat více než " +"%(limit_value)d." +msgstr[2] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat více než " +"%(limit_value)d." +msgstr[3] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat více než " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Seznam obsahuje %(show_value)d položku, ale neměl by obsahovat méně než " +"%(limit_value)d." +msgstr[1] "" +"Seznam obsahuje %(show_value)d položky, ale neměl by obsahovat méně než " +"%(limit_value)d." +msgstr[2] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat méně než " +"%(limit_value)d." +msgstr[3] "" +"Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat méně než " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Některé klíče chybí: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Byly zadány neznámé klíče: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Nejvyšší hodnota rozsahu musí být menší nebo rovna %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Nejnižší hodnota rozsahu musí být větší nebo rovna %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ad310e82d73776739798abe73ea2754cb84aa16b GIT binary patch literal 3167 zcmcIm%WoS+7$2Zd^Db`+bXw6iRg z0&zm(F91axIiX%SMO-+;l^aJcT)6U^-L+$v27*vW+WqbBeDlrs{LTJ)WZzc|;}u+Q z;QATYFlaoC7WcZv(FZw}3~0e*ljH_dmhd%fREnpnDeh zDsUCZff9HI_&M-f;P=2S;GKQN{s;CmHih?7z?Xn4Kn^5e75FLeBJew49r!yi*!AWC z#=eB@=Yi9B|LGuO&jSAhz6CsZ2sQ&x0dE060fzZsfMNbO;OoGBhl_X|0|vh?0^bI% z0Kd_0dk+++~VZ3-X59xyo{FW?@0fhnW$44z;jdl45xkmm#`V$b11$n)HUyt30L zr}{!=RCT9${=n1BdETP%CS(5L+RAc`UCxo4)?M20?25@$%(d}c8BvJvSa?xm3)*Ft zxbFy$n{?a?oe;;vhDm#hJgH5dSQ4IWkkZ^(P9JANac}s^DJ4_s@014ZQJo^^_M|J{ zb6~j6(iT}4)DJ%uzQPBpdzsQMa}W8Pn>z7*&@qa3_E^-t%#UI!ia5q{!%L%u-K?=i zPboatzEgEvYIs6iSSvPpjPQpb=f=UbCc7??nhm49klJC9>zF|qt(Z$Fn#P^uYsgP2 z2Nk?cgJHZUV;tB1U8j2#N_WwjnxcC21GVsf?ED9vOQOe3n>%l%PEbT<_*mDOQjRT? z^As29a77Y3q95v;xDzRHMLO}F8e28aqpa6Hy3XmIC+(13$JPu)y0qyy!cRPv&S9S> zd{Jl8lggHgFIoR8MwzEi>*+vE#YcKL0SXh)h~wC7Ss?)@YcQq@2@m#{!5 znMf#FCy_S!ywK8h_*BRHUb9{w3Uu2d)ymT1(!!4CjoM7* z3c8UrEZXeBHIMAqdkXD&fp2t#b>!!6u3wF2cjUreZL-mV-Y{`q4zn%kM^+-9qOz(o zD^zsV*wi(-?&Ys;?(79#JkCvNeteEMsuwEb1RnLbw`?pC2G<3nhBxBLrix`!=5N90 z4^bfUuCK9cnbx4^ZWlKltL-gEg+M{)Yuop2!rLee@Oez$2QhFaN`iw>+MpTdx3@Gl z0PT24W5ZB?q!i{A_DxZhlbi##{7-sQShhE{i#qnGj?l+mppM7hizrYyrVJ=PCcEqO zE>mS}C)agIl{*ENAB#GbfgWf21w|=J1>q>kz95#ZsbmvEnOZE!!=_SKfyD90o)D7u>b%7 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.po new file mode 100644 index 0000000..ae494de --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2015-2018 +# valberg , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 20:41+0000\n" +"Last-Translator: Erik Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL udvidelser" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s i array'et blev ikke valideret:" + +msgid "Nested arrays must have the same length." +msgstr "Indlejrede arrays skal have den samme længde." + +msgid "Map of strings to strings/nulls" +msgstr "Afbildning fra strenge til strenge/nulls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Værdien af \"%(key)s\" er ikke en streng eller null." + +msgid "A JSON object" +msgstr "Et JSON-objekt." + +msgid "Value must be valid JSON." +msgstr "Værdien skal være gyldig JSON." + +msgid "Could not load JSON data." +msgstr "Kunne ikke indlæse JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "Input skal være et JSON-dictionary." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s'-værdien skal være gyldig JSON." + +msgid "Enter two valid values." +msgstr "Indtast to gyldige værdier." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten af intervallet kan ikke overstige slutningen af intervallet." + +msgid "Enter two whole numbers." +msgstr "Indtast to heltal." + +msgid "Enter two numbers." +msgstr "Indtast to tal." + +msgid "Enter two valid date/times." +msgstr "Indtast to gyldige dato/tider." + +msgid "Enter two valid dates." +msgstr "Indtast to gyldige datoer." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listen indeholder %(show_value)d element, en bør ikke indeholde mere end " +"%(limit_value)d." +msgstr[1] "" +"Listen indeholder %(show_value)d elementer, den bør ikke indeholde mere end " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listen indeholder %(show_value)d element, den bør ikke indeholde mindre end " +"%(limit_value)d." +msgstr[1] "" +"Listen indeholder %(show_value)d elementer, den bør ikke indeholde mindre " +"end %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Nøgler mangler: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Ukendte nøgler angivet: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Sørg for at dette interval er fuldstændigt mindre end eller lig med " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Sørg for at dette interval er fuldstændigt større end eller lig med " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..101c22887cf064b6c04a2ac7f1bd65b50fed74c9 GIT binary patch literal 3282 zcmchZ%a0UA9LEa;gz=5EBE@(_J-oRqyQX ziIWH8$;6WeE`)eAF(DrIU^0mZuabE4fM+lM1%9i$_l3Z2Vz86$&rEgIuYT|9KlbnX zM&NoK_uIJd;eHqQS3B^)wRfiwhroT{b6^#G6C44j!7Jc-@D8{i{2P1=-2IdguYm)g zlRXT+0nUO1hTu`~OYnQ}E_esLwkzL%&u$?G@&7RRDmViY$Y2@#0z3`=09L`jK&RJ% zJwkj7-A{rQ{QvD~AzlD??iJ!4a6dQ(*1T4LW;&1rLCKg71Sno)zLF@B}ylrl8a7M-Xaf7gS%n z;0}SM+4T~hFjHV^=4&_Td;^uU>t#Hhtx#p{dLF-^qId;2T#>~DArdd*hRd_qxVVZV zhXxm9lycb|q3j36sj)QA?qBHBrx$0YD`GSw>G|v2v|>!BkxxoninPq9kT0#Qh;e1o zgvkcd;t?83q-rzaM^ne$h%HA;)J|AhPTVX-IwAf%l@VD@hX$iC4(+u

    2wb*qCj} z%J%GOQfWNTiE-jrhjLqC16OSr^CR9pWH?iG(|9k?5wGttp}MJE^Qp}J=!Z=kY9*7U zikPq*!*XSVvY}AH5+<1>a*2Gn-#Ix`4yrZ8WQfo-wX!l)28&Ffdxf`r3L)qio`g{s zpJEXx3{@(0kzp}MV^CW~mLT0S<>`@Qo!hg~8F*2uQmvoDaO+wX166w{SRh34O z5z}le`*}D_9>hQ{xcp`^GG>ZcwQW!lv)Wjs^~KL7i5D#^gXkJ@QDaJnmkh!EOmS!o z_G!R2H&`wvq^hHIPi>gkP4q(Ov%g{HoZHdL#5#T5_IY7twd!(&7n=-C-5XZ^rb!jy z7H5g-#t&w@m(4*}m2RmljCQ5y%&v&bt|6@DY?gjSADB(F>j2(_?_EX-!O8~t*HPoT zbb-4%vEGzvhrV|vZ5wY+H>fl_Gv|%Dg2!C%tjl5=s?~?R+6k|IlIr!w@ehvHhH5oT z^e*s1=wxo1H|*7qQ*F30bmC|YS7}lj>&?M@6G^L+2Azv^5~7ogc6AhKg+xEy%7;Fd zt3wq|Kg3GaPGy_DIhJvQKH((BvcbUGZlhZ5^?DWS#D*povNy}=1J!FN-}2!yI#}hRwk;87LJK9AdmPeL8KC?Ki`!5NDsFhU zYB9l*G_GC>l4TC9ml?3dit`duVU0Tswvzrhc~UL&zjcJy+Y*Os78j^q_C!gT-}^lwLQ`KA-1ka~=e2?oUiPeK<| zeHQ2*E96K*GIB@D#*^63BudPOm)#k(#Vh*0H4cpn^YN``orK(K}TG3Tk z7OXmq+*O3~*fda`zBD;$gzKm16eu}%fyu&+GpD~|3>Ntz7v;q?*}v^Rssh9g@mN24 zyzvBeflnIj%gPlv;+YpMz5raYY&cMgx2c-vj?5}QPv&0gGAXZ-tgbe!arHZ@T4;pm zO(v6EbOVF$zobnr{81x**~Lx^cnyF literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..d82cab0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,117 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2015-2018 +# Jens Neuhaus , 2016 +# Markus Holtermann , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-08-14 08:25+0000\n" +"Last-Translator: Florian Apolloner \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-Erweiterungen" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s im Array konnte nicht validiert werden:" + +msgid "Nested arrays must have the same length." +msgstr "Verschachtelte Arrays müssen die gleiche Länge haben." + +msgid "Map of strings to strings/nulls" +msgstr "Zuordnung von Zeichenketten zu Zeichenketten/NULLs" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Der Wert für „%(key)s“ ist keine Zeichenkette oder NULL." + +msgid "A JSON object" +msgstr "Ein JSON-Objekt" + +msgid "Value must be valid JSON." +msgstr "Wert muss gültiges JSON sein." + +msgid "Could not load JSON data." +msgstr "Konnte JSON-Daten nicht laden." + +msgid "Input must be a JSON dictionary." +msgstr "Eingabe muss ein JSON-Dictionary sein." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "„%(value)s“ Wert muss gültiges JSON sein." + +msgid "Enter two valid values." +msgstr "Bitte zwei gültige Werte eingeben." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Der Anfang des Wertbereichs darf nicht das Ende überschreiten." + +msgid "Enter two whole numbers." +msgstr "Bitte zwei ganze Zahlen eingeben." + +msgid "Enter two numbers." +msgstr "Bitte zwei Zahlen eingeben." + +msgid "Enter two valid date/times." +msgstr "Bitte zwei gültige Datum/Uhrzeit-Werte eingeben." + +msgid "Enter two valid dates." +msgstr "Bitte zwei gültige Kalenderdaten eingeben." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Liste enthält %(show_value)d Element, es sollte aber nicht mehr als " +"%(limit_value)d enthalten." +msgstr[1] "" +"Liste enthält %(show_value)d Elemente, es sollte aber nicht mehr als " +"%(limit_value)d enthalten." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Liste enthält %(show_value)d Element, es sollte aber nicht weniger als " +"%(limit_value)d enthalten." +msgstr[1] "" +"Liste enthält %(show_value)d Elemente, es sollte aber nicht weniger als " +"%(limit_value)d enthalten." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Einige Werte fehlen: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Einige unbekannte Werte wurden eingegeben: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Der Wertebereich muss kleiner oder gleich zu %(limit_value)s sein." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Der Wertebereich muss größer oder gleich zu %(limit_value)s sein." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f655cf1461e01b87aec5b5224449bef812941bf7 GIT binary patch literal 3853 zcmcgu%WvF77$2a8c6pb#0Pzt>n^o(5q%BRi4HQC(Li3^tE$XG3wI{n?KW6ca<8D+g zQPoO_E2ll>Qjic5s1gzvF3lb|a6xe84?yAoe*wR-cQ+3bSP3{egN&U74goFTN5I3tn?U1_ zuYs=te*&HY{t5gFa`HLGz5xCTA;u4%z)9zTKLU;2xyLfShkzx#PXLYH8aM|07B~d_ z9SAn*1=af(+>z>UK0Jv9Gub0p#@FUDzJUqp^%U-pV?m|<1-1;TvZt{g!ZI;Ih}aWY zaCxeui7PuYJhIIFSmf0aN*^eQm8PmNZ>~e{FU-vr*xMMxcX{W zp#jkHs+deZ^*l(!$BYp|T*>`LfAxL5c^0d=b`ky};(B(n#xt52i_6(;`%eu3`%k zB%Wv~g8Kypu2PUwfo*0f#%1oJXv#=iGpgn~);n=cS&Onlx%s(8Yr+&fXsvfm7Sm{{JZ6}*RK3Wsq{4JVWfrQ8GxQ-n~i)r6HAiBN3%sMIqA1tTT&_=k(< zt+5R{BWy`T)?{c)C(Vqps;m3j!nLZJoA=|0`__3G1*$?}GksO#C(cmzI6e{%mrJGb z@iM(dB?3wII*Qlw#_Msqe!aJK0$ZclI-Wn1WAEL);~)(03 zdvFvbvTBRSqlP4q=+0V;xc84KK)i~wM8cy+FkuE_7c@lY#-RL~Z~$*~+L9coLB4Cl zIwNS?M$a9hVTK)2s8O`JGDs;UTs6>N15(%0xOCb(sbY)HD#UJ66||;kvv66evkH&7 z9%XTZIj-`0gC;Rb_#t>CJaT!}cheB2jz(C#&RPs}I;-i(S-<6m9MNjxQxGFs+Xj#D zMS#3NM#lC4TwfPF($dSA5nIno! z(55`zSwrD~oQI-Y*S)e%8v@QNXw5uOUQAABHEwtk{g{IFwrS`WisM)3j!<*Zb3Mp`Z!6 vig));=Z3wpgLWg(h@_p)o&J~_%8pOw0Am`<76, 2016-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-26 10:31+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Rozšyrjenja PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Zapisk %(nth)sw pólnej wariabli njejo se wobkšuśił:" + +msgid "Nested arrays must have the same length." +msgstr "Zakašćikowane pólne wariable muse tu samsku dłujkosć měś." + +msgid "Map of strings to strings/nulls" +msgstr "Konwertěrowanje znamuškowych rjeśazkow do znamuškowych rjeśazkow/nulow" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Gódnota \" %(key)s\" njejo znamuškowy rjeśazk abo null." + +msgid "A JSON object" +msgstr "JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Gódnota musy płaśiwy JSON byś." + +msgid "Could not load JSON data." +msgstr "JSON-daty njejsu se zacytowaś dali." + +msgid "Input must be a JSON dictionary." +msgstr "Zapódaśe musy JSON-słownik byś." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Gódnota '%(value)s' musy płaśiwy JSON byś." + +msgid "Enter two valid values." +msgstr "Zapódajśo dwě płaśiwej gódnośe." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Zachopjeńk wobcerka njesmějo kóńc wobcerka pśekšocyś." + +msgid "Enter two whole numbers." +msgstr "Zapódajśo dwě cełej licbje." + +msgid "Enter two numbers." +msgstr "Zapódajśo dwě licbje." + +msgid "Enter two valid date/times." +msgstr "Zapódajśo dwě płaśiwej datowej/casowej pódaśi." + +msgid "Enter two valid dates." +msgstr "Zapódajśo dwě płaśiwej datowej pódaśi." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina wopśimujo %(show_value)d element, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." +msgstr[1] "" +"Lisćina wopśimujo %(show_value)d elementa, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." +msgstr[2] "" +"Lisćina wopśimujo %(show_value)d elementy, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." +msgstr[3] "" +"Lisćina wopśimujo %(show_value)d elementow, wóna njeby dejała wěcej ako " +"%(limit_value)d wopśimowaś." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina wopśimujo %(show_value)d element, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." +msgstr[1] "" +"Lisćina wopśimujo %(show_value)d elementa, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." +msgstr[2] "" +"Lisćina wopśimujo %(show_value)d elementy, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." +msgstr[3] "" +"Lisćina wopśimujo %(show_value)d elementow, wóna njeby dejała mjenjej ako " +"%(limit_value)d wopśimowaś." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Někotare kluce feluju: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Někotare njeznate kluce su se pódali: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Zawěsććo, až toś ten wobcerk jo mjeńšy ako %(limit_value)s abo se rowna." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Zawěsććo, až toś ten wobcerk jo wětšy ako %(limit_value)s abo se rowna." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dc9368bf1539b991486fdfceca977b7ceabad963 GIT binary patch literal 3917 zcmds3%X1V(7;hC2)+eZ_rIZa-KvFpSh**RTq0k6aGzkGBmKSld)7c#|JF`yrW{Iaf z03Q{!v;>b{EXqRyMu?C=-2Y&vNPc1z;Hc{|MU3&jQ;b+7d;@q1xC!_>@Hybx z2N>H7+zKS!t-xo1y+97MfxCbo1HS=&54;3CxhAr|ZY^U?nC}2S1v~=eKmlw9o&)X! zehW+ie*=zR)kg;vR&FdLE0Ne{42EGrh0RI4zK4(KDe-XGJ^V`4{ z;Fd%*?*(>Y{weS%@E2ePc9IV<_ABP^KFrulz=KHA+rVMq4&YC~-M~MA9l+G1jJ*St zK(g~AunoBJF~*=yUvPc#LOK{s=xZbH2$R8-&NV%x+#m#fJ%KyaFu1mOK|Mn#>`DBQ z3cV-TBKA1`NV(n{xW?Gd?M*|bQx?r~C)WdBEK9}v10$X31?AkqB=3zB$Y-q@R+kor7yx z)@5UBa-OS9+m%=(3tlD8mc?x-dJ%Vyr?fw@98~ZDQCZ0M(i~gKd+U_{h0+yt7QKi) z?j2nCCw|^VXSZ46-T;@%x7|EQk(23E7}ejZDPS3B7O@l&7$CraPz8= zWWAnLp!M;iU0j@2!j;%v$&Pyv85F~kBmIIGZ7E?Vi`eL4b1YDH2VJk?)(Mt;Z^*WU zRVUd;7M1BM@|Vm5bW!|=oSIc>6^m$pH=snVB zbWp)V)_9Fr%v;i#RwMngk=esDne6VpyV5P`Gz5)fV#p?)OXT(%EiF8g&SqM6rEw*? zOsR}MgfAUad487n*ttR8Z4UY7AR^jVj7LfLK)z_&P7GAe%Kdc zkT(^SDrHltN~Mxiq|qJ_r%65)#k2rUyf`JCRCA)cv-@Bz`b;vN=s-mZ7hVmQ5S{`9 zQY8l^+QxGQ)0aZEzu9-lXsyYStpVX12i=@!X-c&A+iKCtEEi6q*D3p^V;u7QqReu) zq^GjIrHx0!_9mBaZReThwgd~lE<6j7YP`L{hmp{9Ft7E^Y4KaQ&&M(>_$;^DLFLC~ZB9m})G*{Jq*)pjo+*70BxF3*s=$W3@Q z@^ciMb_3y55y%)kY#@1_Bx_qW6OJM2lmUtwcpW*qg4tLq`~;6MXskzDT#cT_%Nw|X zScq~{cePl>CQSr$!A-q)RqP}DpN6AL1OFOP+WJ#@FV1Qf*W!q%i*IG^i`wULO_nOs z{()vu6=aA$u*98h7?Xxn^`ea_dGhSbj-QS@d3S1 z_sMv}uYe9z=+_rc5uhQeJw9E;M~dL9sP)cM?*pAc(t0jZc`ql3W*TY-9Hk{_bl}n~ z4bbtCt7=qOX4Gr=SohA+@XJ#&oL&L<2#{-%C80#btWQ71uHqsB^giiKMHWZm&2 z_yR?I1HFd!MK7At6`&VUV?*lW>R4F^iU@^|Bwf}~gl88T{YrHa{D2fi#WoM`bm+KE r!AV5CM2Rj1yo{|Rld0gXFD{7L%@kHn*a literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.po new file mode 100644 index 0000000..0e9c6e1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Giannis Meletakis , 2015 +# Nick Mavrakis , 2017-2018 +# Nick Mavrakis , 2016 +# Pãnoș , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-09-22 10:12+0000\n" +"Last-Translator: Nick Mavrakis \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Επεκτάσεις της PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "To στοιχείο %(nth)s στον πίνακα δεν είναι έγκυρο:" + +msgid "Nested arrays must have the same length." +msgstr "Οι ένθετοι πίνακες πρέπει να έχουν το ίδιο μήκος." + +msgid "Map of strings to strings/nulls" +msgstr "Αντιστοίχιση strings σε strings/nulls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Η τιμή του \"%(key)s\" δεν είναι string ή null." + +msgid "A JSON object" +msgstr "Ένα αντικείμενο JSON" + +msgid "Value must be valid JSON." +msgstr "Η τιμή πρέπει να είναι έγκυρο JSON." + +msgid "Could not load JSON data." +msgstr "Αδύνατη η φόρτωση των δεδομένων JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Το input πρέπει να είναι ένα έγκυρο JSON dictionary." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Η τιμή '%(value)s' πρέπει να είναι έγκυρο JSON." + +msgid "Enter two valid values." +msgstr "Εισάγετε δύο έγκυρες τιμές." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Η αρχή του range δεν πρέπει να ξεπερνά το τέλος του range." + +msgid "Enter two whole numbers." +msgstr "Εισάγετε δυο ολόκληρους αριθμούς." + +msgid "Enter two numbers." +msgstr "Εισάγετε δυο αριθμούς." + +msgid "Enter two valid date/times." +msgstr "Εισάγετε δύο έγκυρες ημερομηνίες/ώρες." + +msgid "Enter two valid dates." +msgstr "Εισάγετε δυο έγκυρες ημερομηνίες." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Η λίστα περιέχει %(show_value)d στοιχείο και δεν πρέπει να περιέχει πάνω από " +"%(limit_value)d." +msgstr[1] "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Η λίστα περιέχει %(show_value)d στοιχεία και δεν πρέπει να περιέχει λιγότερα " +"από %(limit_value)d." +msgstr[1] "" +"Η λίστα περιέχει %(show_value)d στοιχεία και δεν πρέπει να περιέχει λιγότερα " +"από %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Έλειπαν μερικά κλειδιά: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Δόθηκαν μέρικά άγνωστα κλειδιά: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Βεβαιωθείτε ότι το range είναι αυστηρά μικρότερο ή ίσο από %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Βεβαιωθείτε ότι το range είναι αυστηρά μεγαλύτερο ή ίσο από %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..af9b2fd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,128 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2015-01-18 20:56+0100\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: contrib/postgres/apps.py:13 +msgid "PostgreSQL extensions" +msgstr "" + +#: contrib/postgres/fields/array.py:22 contrib/postgres/forms/array.py:16 +#: contrib/postgres/forms/array.py:170 +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +#: contrib/postgres/fields/array.py:23 +msgid "Nested arrays must have the same length." +msgstr "" + +#: contrib/postgres/fields/hstore.py:16 +msgid "Map of strings to strings/nulls" +msgstr "" + +#: contrib/postgres/fields/hstore.py:18 +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +#: contrib/postgres/fields/jsonb.py:32 +msgid "A JSON object" +msgstr "" + +#: contrib/postgres/fields/jsonb.py:34 +msgid "Value must be valid JSON." +msgstr "" + +#: contrib/postgres/forms/hstore.py:16 +msgid "Could not load JSON data." +msgstr "" + +#: contrib/postgres/forms/hstore.py:17 +msgid "Input must be a JSON dictionary." +msgstr "" + +#: contrib/postgres/forms/jsonb.py:19 +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +#: contrib/postgres/forms/ranges.py:16 +msgid "Enter two valid values." +msgstr "" + +#: contrib/postgres/forms/ranges.py:17 +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +#: contrib/postgres/forms/ranges.py:64 +msgid "Enter two whole numbers." +msgstr "" + +#: contrib/postgres/forms/ranges.py:70 +msgid "Enter two numbers." +msgstr "" + +#: contrib/postgres/forms/ranges.py:76 +msgid "Enter two valid date/times." +msgstr "" + +#: contrib/postgres/forms/ranges.py:82 +msgid "Enter two valid dates." +msgstr "" + +#: contrib/postgres/validators.py:12 +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#: contrib/postgres/validators.py:19 +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#: contrib/postgres/validators.py:29 +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#: contrib/postgres/validators.py:30 +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#: contrib/postgres/validators.py:70 +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#: contrib/postgres/validators.py:76 +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e4477634aff134941d1e5cd06ee3e98777792a0a GIT binary patch literal 3149 zcmchZTaOe)6vs;ife~*AUZTMQgS!*xxol8(2iD8NlC12)0t-B9&2&vq&2(3dUDY$J zU%+5|^^x#mh%qt72jdrjZ{VAWFZ!wv#t-2CRQJrzY!=$O?ygg(&N+3?>G|o< zp3fP^3%Fjv^#iU~aeej(elYew%Ge3;0Qe+W1z!Re!Asyx@FI8*JOus@z6|btjIrmz zV<73C2VVr&K@KYL6!BgNf`pTnL39I3o58E`;2l4V@F4IWapB zaVE=lhWi_yWY+Pfq$d^f_pe>PRAKLVa?|X}mSg8k7KdCL$73UM5grOBDr{NXES21K zgu{=rJQX^U95*eK^keB{yvd_f3MW&N(%ht6ew2xrJHt=R#wtPN3~U*UtSI+e(W%zJ=*fFu(+G9ocGdGT@$m1BQmQzNHbhE-% zoJ`=kcAc{2O2ZS$MVg9D9wPh{WN#cyYjC!za5gQYolx3hmF<{e5w4IcXgY;oj<<9` zg&cJ7wj7QEJ{{z+^7lIJf1>IunzpkKUFH|HRI}(77i1+_brMsnQX$$c%2QI*Vh= zE=lWTn4gEuPq8Bgl;DzEkw_j(9l1`0tsCo**VnGBa(T;1ZE?JoT{95r$xX`7eIP=*td8?>VnsUv%7`@FJzu~L%ATP+DoX-4XBN~pqU zvCmX`f86h0w#TU~X{jijrdlMoE9?e!gmKdP{3{y4dTOWz1S?^112qIM8$9fy$W7_0 z?3>gDYc^70u#`nM*f0%VTEDyzoTG||Y;fME@m#I`R#2-4^#xvkvvGRiWUXGSK`^)~ z2a0q~$t?tPbv`%OIDPtL4WqOwtP3{azKw-5X@f6`zC&F|ejefJNR84t+brIlbR?+S z^47cIXtvT$--Z?)Wg?Qnh7?JIFWbI^Bobh@<6OT{tqzC7%6M@F?W>ymIYL}0s7g~U zm)2I+mbW5OuhdHCP^D7C(#<|9*C8va{TO9?hPOH*wbCtK-?$LWZ^@CNZJ7qkx@AJ2 zCi6|@#)dYyG^O=8OGO-9Flk~NT=)H>U7S0^^V`K)&5teedihLgs6} z$4TAYclDk#Y)!;A>$RjsUOc!X())K5k4GI#xGXVUU13WD-h*qYiPb5jEJ?V`3A8RW zQ>2QaZLnECR$RoG5D&iQG7^wOm!IxFXq>xMmxy?m8ke<-G9G5g?WBoxr9NN0@tG{T zn!Z-1+A)}gM>|jNJVOp{TZKdJO25ylK<%l>@QHBy2oF#gA~o15rLSDx>!tRw6HSSj z>Ee5<5OmvM&=e!35lfAJgJ^DR^|YTx_(gZL7s)9fbhACm)I0xweT8{&tcb?HX5nsC zUNkyNGdc}!Riw@R+fth@W#PmlHTvRE*@}*oLr9%JlTm1WV3ED(_xQgOp-e-AteNQe zz0@S){&%L!F3OnBbT<<5?Z2&@Rw;)mdX=#L%siFvSVTu&aa1W z2|5FL17o(TZ5$1op@sR1Z7Xe%, 2015-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Baptiste Darthenay \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL kromaĵoj" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Ero %(nth)s en la tabelo ne validiĝis:" + +msgid "Nested arrays must have the same length." +msgstr "Ingitaj tabeloj devas havi la saman grandon." + +msgid "Map of strings to strings/nulls" +msgstr "Kongruo de signoĉenoj al signoĉenoj/nulvaloroj" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "La valoro de \"%(key)s\" ne estas signoĉeno nek nulvaloro." + +msgid "A JSON object" +msgstr "JSON objekto" + +msgid "Value must be valid JSON." +msgstr "Valoro devas esti valida JSON." + +msgid "Could not load JSON data." +msgstr "Malsukcesis ŝarĝi la JSON datumojn." + +msgid "Input must be a JSON dictionary." +msgstr "La enigo devas esti JSON vortaro." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' devas esti valida JSON." + +msgid "Enter two valid values." +msgstr "Enigu du validajn valorojn." + +msgid "The start of the range must not exceed the end of the range." +msgstr "La komenco de la intervalo ne devas superi la finon de la intervalo." + +msgid "Enter two whole numbers." +msgstr "Enigu du entjeroj." + +msgid "Enter two numbers." +msgstr "Enigu du nombroj." + +msgid "Enter two valid date/times." +msgstr "Enigu du validajn dato/horojn." + +msgid "Enter two valid dates." +msgstr "Enigu du validajn datojn." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La listo enhavas %(show_value)d eron, kaj ne devas enhavi pli ol " +"%(limit_value)d." +msgstr[1] "" +"La listo enhavas %(show_value)d erojn, kaj ne devas enhavi pli ol " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La listo enhavas %(show_value)d erojn, kaj devas enhavi pli ol " +"%(limit_value)d." +msgstr[1] "" +"La listo enhavas %(show_value)d erojn, kaj devas enhavi pli ol " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Kelkaj ŝlosiloj mankas: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Kelkaj nekonataj ŝlosiloj estis provizitaj: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Bv kontroli, ke la tuta intervalo estas malpli alta aŭ egala al " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Bv kontroli, ke la tuta intervalo estas pli alta aŭ egala al %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a01a0e499a11634fde7af72ba3a5f880b6426da GIT binary patch literal 3177 zcmcImOOI4V6fPA6+9&uVq8>=dOb2d12BJg57zdn5MrVeR8PJ{9^sVkLsIF?N>P|DP z*qNvcH~s)N#KgGJkeINYm3udCjK9EzD;F;O&b_ziK^P%1R8se=sy=nLy(6mSvv3GgG}9pEA0U%)qjd!G{GRp3z| z^PU904qO5fPy=Yh9?%zp!T4EP(6?eGtffQJtV@g}eZ zQ&W_;)2UeO4da(P8KAT$|!4M#)ix* ziai5U4LLyRA!yJUdgCDQ(1DJ)b&gnijIzt8{OCOvr?c(WM@zAM7V-WLr2N6!D?xgZDRIuxSUwu>loqh;M@#ssmb zLR4wtk5G8AC)YT@6$RN>WR&g3UQH~y5E0kQAJ3Dz5tR*aZxG84B-hk>AediKUx$Eq zTF{LTt0h5ZuUR*=+Xx5Vt?5*y+bCD~#VCDbdHMMwv+`u+AW=8k3X<|K%BDMrYJxB4 zk;>=C^4F{37^fv)m8H_0i>!7{T;Yna8MJx)m4#r*J1zmqT$)@#4nfNnrB{*Uu5w8Y zoR7&u=;|~%pLIjB;#yQ$y10^D;EV@t@vzn%jTc>kU0^XN{U}{#y_dspC zne3`$Mah1PmIu=6(4+BQjDuFaJ{%5fk$LHkx=}-ssu$Xfz?9ePD%7i$g}H^9Exnty zM&$x>QCY~dK0tm(_`W_cNY1m=?nxh1oVvU+n@n!e@mn3`lNsA~X&wxdt2%Cq*&-Dx zOD6NuB(u)#iEbp!_| zMjnF>OHv&Kgk!D1hUHC8y|d_`UQR!RAs9W3#hgXLu|Sa0ZrtlbelXsC z3ZZ&3)O*g$K!pk914(xL7`;ogn{Amh&TR_?O9S3_d-N<)4xNObpO?J$GR5_6PC&tL zBd(>_rQzW=WfYr>+g?%pQ)Rf)sIEbe8ac+5<=?lMw?X}vd12Ses{0$jh~r7V&d>Xe z9|~#^dt#fyt$b~JpXJi}sGQLX9vAD~IB(p3Tr%&*8BKw`hg?XNMdZMQ#fqDP3t}Et zEd7Lq)v4qVWP77~=ax2-YkeP9b+)Tx1{2SWx&nd;ytn#=n3X2tkB~Ioj9+UTG#I4) zR*z8Bk!@`>sy{MxCmnbN^m*5Y6x%N$zEI2%BsVz{Oqr?h-5^tVp1VbgkO&!dw3P<( ejp_(~-Rcmy0C`bdAzEpLV#kfbZNIcz!TA@caKz03 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..e72e8ce --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,122 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2015,2017 +# Ernesto Avilés Vázquez , 2015 +# Igor Támara , 2015 +# Pablo, 2015 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 20:42+0000\n" +"Last-Translator: Antoni Aloy \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones de PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "El elemento %(nth)s del arreglo no se pudo validar:" + +msgid "Nested arrays must have the same length." +msgstr "Los arreglos anidados deben tener la misma longitud." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de cadenas a cadenas/nulos" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "El valor de \"%(key)s\" no es ni una cadena ni un nulo" + +msgid "A JSON object" +msgstr "Un objeto JSON" + +msgid "Value must be valid JSON." +msgstr "El valor debe ser un JSON válido." + +msgid "Could not load JSON data." +msgstr "No se pududieron cargar los datos JSON." + +msgid "Input must be a JSON dictionary." +msgstr "La entrada debe ser un diccionario JSON" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "El valor \"%(value)s\" debe ser un JSON válido." + +msgid "Enter two valid values." +msgstr "Introduzca dos valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "El comienzo del rango no puede exceder su final." + +msgid "Enter two whole numbers." +msgstr "Ingrese dos números enteros." + +msgid "Enter two numbers." +msgstr "Ingrese dos números." + +msgid "Enter two valid date/times." +msgstr "Ingrese dos fechas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Ingrese dos fechas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener más de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener más de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener menos de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener menos de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Faltan algunas claves: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Se facilitaron algunas claves desconocidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este rango es menor o igual que %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asegúrese de que este rango es efectivamente mayor o igual que " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..481e839fdbc26efa281c110ae946f7d81da0c477 GIT binary patch literal 3178 zcmcIm&2Jnv6gSY8b}1Cfw@SrprO+(x>_=!x*pNdgsg#m0l5IIw&WGq!aOA*&Gn_ea;mU=dXJ$7^+mxb$CC|@mKR>_kx4$0U_Z7o< z8S^#FUoc*ck8-@M&Nj_$qJ)xCHzN_yO=1@F?(4;4$F-Cm4GPcmf!B zPXS*6t^f%rfv16=0lx+Q0K5gfvafjmz<$QY@%s(ni@;?d0R^xM{1o^u@Oxk#_y;h^ zb^HKhUqbdtU=6>2dXlkcfPVo`0V@X!xhG2e1Q_J{88`;~9T@aKa;SK(Ug8SyIQFjt z&jP;y-UR*#{01m1#l6E%F?J5W&j5q|>%cdG17Hhy6F3e04H)D*cDT5A5m=g>LG;mp zIT%Ru@f^NTlYun1b=VBHfynuI9^WIF5M?xi?hui^fC&@iGQmacSxlHb_f7CCJ2f`G z$yFw*?iA$*VvqPnHA)_ z+~Xr1S*{a7SaeL93RmJtR9NoO>u<`I~)1 zI!o7ub%FhGtI!oXh`N`l*yHRz+qtN__WNC<#P%EWx|jKpO?hF*Sa!TLn%hB*&3lnT zbM3oTM^Zx*LEKtCpcv*4M$UzUXf3uN;hK)oo=fd;$#qS?v{pA-?E zM1N@S-8PPE|IE|FEsC!q$4zBb^o;e< zqDy2Py_Y2}YMT~SR+ih*`H=9SjouGYOcRafRMa>ZH7BXrY@L1QbYr5?0AaK$Hf7+s zi*7P{t4YnbTW2RvH!vy--1(>t^_}A0*cPqwR9Zue#&VPboa-dxiHO>Qr!89RaV=e! z#%FCJw3nJ!X}s%wuT`)2`~8{^oaBbMQA35Q7rG2Vm8|N*U7202S1XJ2i*wtGH*1Z` zc_bs)M(sflnt3?C-c!iVY3g*jb;8eFYF~(^w&}ui8^T6&x?|!z8m88zA4%P!{H@B0 z%Aihk!PwNbNcZxeZf0Vdisj6>rV}&NtWH3q>8@vIRJiY~8T}#CYdA0wg3y9)||Y zVSz_hz#^3L0R%E6;R}Tj+g)~0FlYZAJE0%UZeDw9;_TxNrx+sZtvji(2JhT;up!_V zSMMTNTxk-%7uDY9xw)ZpY14Zd4BtmGqQwL`M$X7I3VWx6Fy~elK0p!XWtH#9t=k|F zinhMn*%-nOx`Id)sySC`>o&RpCxwQ<^GYv;7I$}qoW&V%LmY%|01~9Qfpg&6K)tiw zh7$Ww4ABqng3eWqo{O^U_gCn{Cq6Q}7vCyD_L5o%B0>-fgs8-q@3oT*MU7Pt*X SAZTeEg>FoZRqJd1-=G~ zT|(>!_Jc>jHuydGDflh8cefCe;7#xq@DGr{zri~A+#VrLg2%uxe+hnvSiS%oxIelV zHee4t6n+Pnz^}p6;6GsS+kR4rgW!i?Snm}utoQQ~zX9LD{Ra3mcnACm{NX7froqd# zYW^?51Gv8lhUdS5EpXSn>Bsg%wxpI>Z zuW;9kSzGFqjP<0gtV}4CUN*#>ab>~e`_kj292L@JOt|RUe4yF0UZ<>J>A472hHOE6 zt(2O)rHM(ca^)|N0(wYynw@(nUvbW%B~#|BT)5zV{HR(h*1%1#a^B&$`#g@JZhJoL zTg{tu%zMtUFys4mN6H{jCRr46ol;~sSnL8vF6jI-{#!F=!-g13A9AzUV1y4tC zCOi%KAKAeN^>{eW=k^??jR*U5kHYB=K66`Dhq-63|4*F%;d7Cl=d{YVs|vd>*Ft?V zIhiwQHkt1?#FBL$Wx4$E0`Yav#wlx@Shg^^%Il7hUZz|*r%cvC?BQX3WKf!`#tzLE z!$D!!RLbcV%at&rmxU+Wi_=$)5qm8Z0blPjA`OADNw*m_#HG-n_wCE2!iJ7a=F{X7 zN*YmjD7}K7v$YF6u!T>~xlEHJDE8yXO{$p^9QrdsWzNvoZ-k5l{I z&h+uat#+#g!{h?5so-;)-SK3qO;b~y>FL8QjM{>9K3TzXoR;1e9XczGLBlUFQlRN1 zqQUL^I^H&v>Dl-2j>$@yak9cP@6hrhbjk zM5I|QZwx*1)MR&g_I$HmJ2!uBZZj9{Myoc9eqw_d*9Yh^kNs^9G#cy#b^Ee#>}M{n zoJo#t+J)(QTqJX*Yty*l$5xfU8+3=_T(u=#7E&i?Y>~STnL)gDGgBw1x}2Fb^!5z3 z>nCbrPKP#!)*ZYnw+AU@sH{WdmZp-|wT&B)T-y*Ap^K1ONMev*v1nmNgEB2s#f3H0 zl|?2CsILpUi}OgO9cLT23WjmYbPY8V>OX3*#U*hMwW8Kg_{a$5avcF#QrHR|t+#6j zRPEFQ9Kz9qT+AEvRR{=CnvGjI;)mm{PZ3mKx@O-N(ovNHd0&$qevFC5>PFeS=hg9? zXe)?)m>YY+nnMo47pD^DP^nO5&NMy`<80fJG#4GQAW1`;WfWb-hVK>UvBx9f^{}zU z#*dXXj0*~h!d`{fwtnJ*>^-b!$n>Lfy_4sS8;>gH9X%sUqkX`IQK<}d6Y_~KXUwFQ zL5Fi>&6-U45-FS;D>jM%Dc;m_aYky7{}@tdr9p9ZHN+pix~bnxJ=s-SL7CB3+wI`X v;Tvnah+^wYs2}JMir}-b(|Xii*qcGgm_8_ZiY<2~^^}o17F^Z*J2(8leI0q0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po new file mode 100644 index 0000000..ff8ddd9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_CO/LC_MESSAGES/django.po @@ -0,0 +1,122 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2015 +# Ernesto Avilés Vázquez , 2015 +# Igor Támara , 2015 +# Pablo, 2015 +# Veronicabh , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones de PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "El elemento %(nth)s del arreglo no se pudo validar:" + +msgid "Nested arrays must have the same length." +msgstr "Los arreglos anidados deben tener la misma longitud." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "Un objeto JSON" + +msgid "Value must be valid JSON." +msgstr "El valor debe ser un JSON válido." + +msgid "Could not load JSON data." +msgstr "No se pududieron cargar los datos JSON." + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "El valor \"%(value)s\" debe ser un JSON válido." + +msgid "Enter two valid values." +msgstr "Ingrese dos valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "El comienzo del rango no puede exceder su final." + +msgid "Enter two whole numbers." +msgstr "Ingrese dos números enteros." + +msgid "Enter two numbers." +msgstr "Ingrese dos números." + +msgid "Enter two valid date/times." +msgstr "Ingrese dos fechas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Ingrese dos fechas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener más de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener más de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d elemento, no debería contener menos de " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementos, no debería contener menos de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Faltan algunas claves: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Se facilitaron algunas claves desconocidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Asegúrese de que este rango es menor o igual que %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asegúrese de que este rango es efectivamente mayor o igual que " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e5222a33bd4178aaa959c806123e153250a1bba4 GIT binary patch literal 882 zcmZva&u$Yj5XKEHAQr));*SuB4!2a5lietSX44>`q*AMfh9<3gLr&J&Y_+i?+eykh zaOD9w@D9MW2i}1Lya5t#z_*)}5(!H`eV*}nW_CS4R+c|7tZU#Q=ztsGJ;>H)a1(q1 zE8rWr3%-MU;5WDfu3uv8K6DlO2~@!?*gr2bb{qN&`T)ALG^?`;&GKwQA3@ttTww^y zdx5Yk0B&|QGv;ggeDi{K+xxFccTZ%`v4(Qekeg~!<6&1CTl~j05or=pB%J(@8;9e} z-_q8_Mz-JVkvw%$*+eVLjOD)XI)AE6$iLyAs>inVtjN7^{v zv~d#gm*d#-jtfAs_TB>`v~L*a*|{@7vieC z98kF&Rx0a0mbWLY;~gWEO@-4Yq+Ov@Vrfq%kxXe5-N1aF=4LTbefYg8CGHwsIo>2z9jS?Z)OPm4W0EX_XdT+(@-lC*D|$E7u|xzlW1 z{E49Gds`ZhqR`>H5kA%7ua-usNK}n_17WOm^~26K-?)g&%Jrq;4b{_8qT-M?x{3SS za!7eCua%CCNcpxlLmQGB<)*EdYc$)|3yL1sDOjs{>`>(s;&eVOY)9dVt)xg>QfFU> z(rCNj>`U}!X>#@vBO?~i@cJ6J=ZCo1IG+, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "Un objeto JSON" + +msgid "Value must be valid JSON." +msgstr "El valor debe ser JSON válido" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +msgid "Enter two valid values." +msgstr "Ingrese dos valores válidos" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "Ingrese dos números" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "Ingrese dos fechas válidas" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c82d8e7911e6460cc7d05dcf8dbdfa6298a6ff47 GIT binary patch literal 3081 zcmd6p$!{D*6o)GimJEB?f&lRnu;L-Bx3zB^-2bt_ zcnb45%Ogy(=01iJiC6InUN{Soqr(QR>NoPhci1W2T68*Y#?mZLCAyE?l`peBH6O z2%i-T1|oePS%Q0+Vr8w;-4<;3FRP_Mru*6q^)|sIH3JoLxJ`1=pXg-j$gJeY7nPG2 zqfY|9-eFkk4Pzbd5UL5kInPA@{z!g$)gJL>=eJ5IPGOg?HJwFKO)U9}-%QFpzsf>y zr^c6fFdGI-s1e+(0Ngc+l zP+v=o#LAAtCbI1FsmHPElR--wuPKgHKa22Fh6W$gV7#vUBMos@KU2HP6&-PJ>IP8V zw|i2!pe(8tca(jLiXCJ%vEx;FcZ2~3WyyGr2a;AH&k-)nU3{MID1U1a7+Sd7?UM1% zv0LV#Hn+ti_rD#lYvi=*V<#g_NFlhZX!x;2%TTBaO8jSIGkz^GkMB@lr3f0-ML>H=q)rZ8Jx9cJ>SvCLQYTc2Y}4xn(4y zE@~Pf%}Xo~XjyZ<%*v|FC>pOP392kVcw5ikw85+JDOL7<K A>;M1& literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000..d184415 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martin Pajuste , 2015 +# Martin Pajuste , 2017 +# Marti Raudsepp , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 20:42+0000\n" +"Last-Translator: Martin Pajuste \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL laiendused" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Selement %(nth)s massiivis pole korrektne:" + +msgid "Nested arrays must have the same length." +msgstr "Mitmemõõtmelised massiivid peavad olema sama pikad." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Võtme \"%(key)s\" väärtus ei ole string ega tühi." + +msgid "A JSON object" +msgstr "JSON objekt" + +msgid "Value must be valid JSON." +msgstr "Väärtus peab olema korrektne JSON." + +msgid "Could not load JSON data." +msgstr "Ei saanud laadida JSON andmeid." + +msgid "Input must be a JSON dictionary." +msgstr "Sisend peab olema JSON sõnastik." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' väärtus peab olema korrektne JSON." + +msgid "Enter two valid values." +msgstr "Sisesta kaks korrektset väärtust." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Vahemiku algus ei või olla suurem kui vahemiku lõpp." + +msgid "Enter two whole numbers." +msgstr "Sisesta kaks täisarvu." + +msgid "Enter two numbers." +msgstr "Sisesta kaks arvu." + +msgid "Enter two valid date/times." +msgstr "Sisesta kaks korrektset kuupäeva ja kellaaega." + +msgid "Enter two valid dates." +msgstr "Sisesta kaks korrektset kuupäeva." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla rohkem kui " +"%(limit_value)d." +msgstr[1] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla rohkem kui " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla vähem kui " +"%(limit_value)d." +msgstr[1] "" +"Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla vähem kui " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Puuduvad võtmeväärtused: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Tundmatud võtmeväärtused: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Veendu, et see vahemik on täielikult väiksem või võrdne kui %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Veendu, et see vahemik on täielikult suurem või võrdne kui %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2437a00f6667e5e9bb4bf40265ba0d46f5371b0b GIT binary patch literal 3133 zcmcJQOK%)S5XT!xLb4$|!dnof5@cd4nc1}y6tjtWBsgHOV-qhy$|dUclxI6T)4iGQ z@!HE74hV7Mz!!)(Ax@F_1e}pLao`)kfddx~@b8(~jn{HQP?V8oemyGndb@uDz1_cp-tNCZZ}*`C<@*G90`KQR zuQvjJ1iuDvgCEpN`~Cq#ywgD;o&%Rb0wZt|{2Y86{2pw8e}G58qfZC{vx^I+k1m8m zK%}^y!4qx@h!!^cNgo@ST3pZK>3xL>qw7hGU}9klLQwdIBN9*JM#xJaL2+VYaziFL zPuUYx3@FX5qc;0D714*Q%a=p(Zb35b8@%SkMUy8HY2zp{vJ|06IvI+2ZS#!Db)>^X zS<0l2nJ`#0X)j^N$ri;KOUId)(quB?o4HKL8Jd_(RI1$d%AosHm$0?>rK{MpZ%F59 zn=|Xx52s3B;RDy5O8G9|c9||r9h>iWOu~2eSkS%PjbbXxI7VvCDWhe!6^aGNDLmJ% zGi6C>c)}#JOm0zx@cSSa#=*3vSX4NgHKUzW+G3IIn0^(lh!hl^!jmxT&!>`u3R>s> zFy7-aj>7-eX&;8tyXZ_!nLT<(Ec5^p-z7N={)s)0zCw=5z2OsTRK`!wO3pPZ@$ za^2OYueS;IGP9u~j6e_h$OiBEET);p^lZ?0BbYu*)6>l}Z=P(-G#U^LuJDHPI>+Q@ zgPAkbINLmZ`eXxFZBbemwBWu?q%&EQ<~4T>EhLGrniSqEI?sOY9aYYS=sj;?osM%E zbI@X$HtB-2H{s-D$GKj!Uhnt&q4P@BI&b;~_0p{&l4^CG^ZHb6X<=#pP5`FEM(rYs zk~Iw5>cK;YB&hciROvZd>&VQqoBO17DVV(@=l5FYEST48CMvRGwyoUA$|iAMTS@Xv zCc!0>rM5}BSG?M}nR8SQ=O#5Bo1^KebG5NP-bUv(l6ZiwOnC9}@qHX)7m8x!JGsmK zgqR!<;Gaip?ggOVeND`Lc>94kCcqP z5s|^qB!i2RB2Ms+_`kZ`rt02J*8*DhKv7%KfOT7T75eFDs`4D~vTm{nZtVJPm+2ya z+vh9oWUL9rDiV!{k?N>{;}|C3k5>e-%{Xub9zRXr#RJ5C*xfl{CKb~Lgnt}!&~ z2oWEOV9i)_kMdJ~QKDQv=<<%JM^)709I-;ww;6(Pk96-)Ioc|M(g)W*QnzE9ds|+n zOU#{zX!kD4SBs7xuv6Wt`xPBO@W-0Uo-EG}Y1~#aL*8?jl6>I5BA4a1_)?TR9_#-d zj%1Iu?27j#&K`L&$h)*I6Ndsofo*H*g#ZtDAmdyQB{{7sahqVvmzzY2z#^+)0TRVm wZIqKtWiesOnk`j1hH{%k`r>iL1!QGG7kL;3IXn, 2017-2018 +# Urtzi Odriozola , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-08-24 07:33+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL hedapenak" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Array-ko %(nth)s elementua ez da balekoa:" + +msgid "Nested arrays must have the same length." +msgstr "Array habiaratuek luzera bera izan behar dute." + +msgid "Map of strings to strings/nulls" +msgstr "String-etik string/null-era mapa" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\"-ren balioa ez da string bat, edo null." + +msgid "A JSON object" +msgstr "JSON objetu bat" + +msgid "Value must be valid JSON." +msgstr "Balioa ez da baleko JSON bat." + +msgid "Could not load JSON data." +msgstr "Ezin izan dira JSON datuak kargatu." + +msgid "Input must be a JSON dictionary." +msgstr "Sarrera JSON hiztegi bat izan behar da." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' balioa ez da baleko JSON bat." + +msgid "Enter two valid values." +msgstr "Idatzi bi baleko balio." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Tartearen hasierak ezin du amaierako tartearen balioa gainditu." + +msgid "Enter two whole numbers." +msgstr "Idatzi bi zenbaki oso." + +msgid "Enter two numbers." +msgstr "Idatzi bi zenbaki." + +msgid "Enter two valid date/times." +msgstr "Idatzi bi baleko data/ordu." + +msgid "Enter two valid dates." +msgstr "Idatzi bi baleko data." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Zerrendak elementu %(show_value)d du, ez lituzke %(limit_value)dbaino " +"gehiago izan behar." +msgstr[1] "" +"Zerrendak %(show_value)d elementu ditu, ez lituzke %(limit_value)d baino " +"gehiago izan behar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Zerrendak elementu %(show_value)d du, ez lituzke %(limit_value)d baino " +"gutxiago izan behar." +msgstr[1] "" +"Zerrendak %(show_value)d elementu ditu, ez lituzke %(limit_value)d baino " +"gutxiago izan behar." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Gako batzuk falta dira: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Gako ezezagun batzuk eman dira: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Ziurtatu guztiz tarte hau %(limit_value)s baino txikiagoa edo berdina dela." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Ziurtatu guztiz tarte hau %(limit_value)s baino handiagoa edo berdina dela." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2189a01e12c9c85cdca2096b5f70775112b85027 GIT binary patch literal 3614 zcmd5;Piz!b7=J1ttRjm4qr@i(&<1Az6p^w}A|S*fr4=fk2zl+i?hee(Ec4!W=?w|H zZA`CTP4vLhDy*%D;o?p2CdSOPi3bnfOpJ+lf8U#(?zV!hQ4=TG`Mr7b{r!F4_hx_G zy6!`U>v{ZM#_xOlUcqnrA>43ne3-Evz)ir-zzpz3U?1=_@IBz$z#G7=z~6u`0oOmm z*mJ;Ffn>WE_yTYU$bk-UH}C`CP2gSN4d8`!vHuP08SBFHPT;e^K_CZ8U^lQ1JOun4 zm;wF*q`0`CC3jj=oj7V&%@cp3ODa2v396Jz^;=YV^F(=EIQ z+==I(fk%LwQ;cPSgTU{ASAo9+&pgK10pMGYGjx)=~+d_*pJMO7UAh|9Ijhmx*AiRR)Sd99mvMaT8CwL){Ld$@pJnjcvUakn2YoG7v za-EW+FSG($qd8Y9wI*A}XVvFkr8FV~Mdp*OI9KE#GukQ12fVw_wh49FezoYkvhAba zD_8Uqry}Ojc1E@1dm@-fvwkg0$lTM#Zp9rBnMf{zKumBO^b^S@IE0pGryP`K)c3S- zJOw3H^s6nlZ0^9&9^5&0sXi?^nBZfwn()1xV>`XNP4!P zmshm(6soJ(Ssx;oj&U-FWp6#V3o8*O&C1S;Mo&#!tNg5|&;cWh~QNDh-nEdovP zlKXhD%&bz6$Sb1~k#izK9w3Q)gt^541I)3XW|ZtrV0s?B{uEXmHp%MgtF7>rLun z-jmJsTG@S8Za>fE@~<7(o$bkHA!wbE;||$eCilA4vzPbm&F6Bvv$#^Hgwob9(pRp~ zevsz_C&icu_<&HwqOcu)D8O{sPQlT_h2i~g6iUKz(>Q<*L)j}-L_u1^Qk3$1h;qOo z)K%2FoX=#c)oNOkX=hAcA&pF&Tmo)OJu@aU-Kl~8f#Yo&a_Ma97)Dci2ydc{JT+P& zQ+5%}K|Wd(fs(rK-Qg2fZ(ELhjmf||?v47k>5bkIM=yn$=VKx@UVS||LVr1IP= zn@82xbCAc&zAld+=DF^JDHheDYhg2NgmWBCW=f7jCA=9n7N^5zeD*}O@Lo8Jy*cwD zyc0IlY;k&FhKF|`^|6s+VI!(7%-~*+rRElz;XD~$oaWrPXhxGfnk37yT^`k;{zW*O zhI05-R9l>m>al@a*!VKK&KG8kOp_LqJepa!vGmI zRyeAy;tEkxCW%M*pIWFRzrXLX8BK8z*aV%?6ylh}BFT$|=ItzPBahn|MA;y=c?apM zYOO)Iqt0uv97k)aSwj{696+bJDUdW3Hc{0uX`8q?umux$Ks5CL{VgyOasMF6yCA0Z z8H;K>{Ddk9*3l&GhD%x`&!X#bv!Lmy)ezQ-uUTATbO#(Jfq>_lDH&eQuV@Mz)uql! z%pp>wk^Ub!LY5#G?GmS!Mj?oWHqYTL8Z40fDa~e*$chg(=uFIjmYDrj$!zPygYz%C zu48T~j9JQr%7PT}MDu-QJHBaqes#X37AK1QI0*=kbqW|fpZnxuxpD4}Iw z-=vMMXfjy49^Qh*21cy)304dObKz}-gLa`V!$F0{z@iboPor2T(n!DK^Lk&MI3qfU zZcrwqg>J@~W~QJK-ljBvx=MzZTWe=YS~O4h;;`q*PLdYv%=74LlNOz`%MK-yB9D|~ ja-_Gv+-(~P*_0k%$#IJ-GX`xlOUh=3JEk-7nPz_g{kHjC literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 0000000..b8858a6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,117 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2015 +# MJafar Mashhadi , 2018 +# Mohammad Hossein Mojtahedi , 2016 +# Pouya Abbassi, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-06-23 23:11+0000\n" +"Last-Translator: MJafar Mashhadi \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "ملحقات Postgres" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "عضو %(nth)sم آرایه معتبر نیست:" + +msgid "Nested arrays must have the same length." +msgstr "آرایه های تو در تو باید هم سایز باشند" + +msgid "Map of strings to strings/nulls" +msgstr "نگاشتی از رشته به رشته/هیچمقدار" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "مقدار \"%(key)s\" باید رشته یا هیچمقدار باشد." + +msgid "A JSON object" +msgstr "یک شیء JSON" + +msgid "Value must be valid JSON." +msgstr "مقدار باید JSON معتبر باشد." + +msgid "Could not load JSON data." +msgstr "امکان بارگزاری داده های JSON نیست." + +msgid "Input must be a JSON dictionary." +msgstr "مقدار ورودی باید یک دیکشنری JSON باشد." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "مقدار %(value)s باید JSON معتبر باشد." + +msgid "Enter two valid values." +msgstr "دو مقدار معتبر وارد کنید" + +msgid "The start of the range must not exceed the end of the range." +msgstr "مقدار شروع بازه باید از پایان کوچکتر باشد" + +msgid "Enter two whole numbers." +msgstr "دو عدد کامل وارد کنید" + +msgid "Enter two numbers." +msgstr "دو عدد وارد کنید" + +msgid "Enter two valid date/times." +msgstr "دو تاریخ/ساعت معتبر وارد کنید" + +msgid "Enter two valid dates." +msgstr "دو تاریخ معتبر وارد کنید" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"لیست شامل %(show_value)d مورد است. ولی باید حداکثر شامل %(limit_value)d مورد " +"باشد." +msgstr[1] "" +"لیست شامل %(show_value)d مورد است. ولی باید حداکثر شامل %(limit_value)d مورد " +"باشد." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"لیست شامل %(show_value)d است، نباید کمتر از %(limit_value)d را شامل شود." +msgstr[1] "" +"لیست شامل %(show_value)d است، نباید کمتر از %(limit_value)d را شامل شود." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "برخی کلیدها یافت نشدند: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "برخی کلیدهای ارائه شده ناشناخته‌اند: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "اطمیمنان حاصل کنید که این رنج، کوچکتر یا برابر با %(limit_value)s است." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "اطمینان حاصل کنید که رنج، بزرگتر یا برابر با %(limit_value)s است." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..83bb350c91730ed1179fca0b757502e5809de12a GIT binary patch literal 3212 zcmcJRO>Y}T7{>=_X=~m}c^3$t7D{89^-C1d)FFpZQYmfIhQ<^j4rSt<*pr=|F*`GM zeMCY+LL9j84Xmm+goHriz{Q+6BaWOoaX|e5{Abrm?5a&GRjjoB?aaX+EATz=2e1nM0|vcb zf1I%|p!)(CVf@P>#-0HG27_L=!B4=WhYN0l&tm)=SOfnA-vSREDfFEMgWMG`%wGrJ z0lx%)1-}P>1a*nAGvJ#zY##g+40eAD9tUrMW$^d$``h3m#^om&dm9uW)Xp!czI(wP zx&C1y=m|3!mgc?&*z>rda_*xLpJ#AGmEG%UJV8bF9B!DNUkDL9iW@G^bqsN0r%ulF zxbmWGPf`9rske?cMHtDLE^J)6Tw%*O$!u5+QG8u`_Jy+xmot#lJmG1gjp$8PFgtZSOD?hVu zNc(hCWHyN3nJR3B4WjB~D(>;_F4MWHQ}g|fQDX0mRo(S&*QdPjV=P-v8qKpog{?Y~ z!gB38WlK`S5-X*g|)@4$+kws?bv8ugNmR%Os ziMWV|Euz@ry^!F7EKda~q1&!gVe7^^ zZDF!JUf^}2O}IAXV-ZiRY=#pZ&s@+q9A8vcUaTQW#Eq7Krs0jy@zkOU3!C#y z4f7}R)64cmD9f;wkBtts7|gD)YoR0TCT*U7<3_Nana~2F)i}C_8iJJ#inmeZrgT+w zP3EFC+m>B`Je+O#3y}Bi<<f+RC1x^-8UD4#g)l6c}_- zkPgAFb``2|ky;&|S>cvGYMzf4_SS{7wnP@K=$47|=r3$ax2tA@wq$8t`HZXRyvb7A zAl=P}c4=;ripQlHO~;q0US2G*-F_YMtY^r1B?K9zIPypJ@PHOkv>Azp9NKr}q;Oso z&!JCq5|VmGI!}rhjk`G-rlX;z5O{$mG$GX_=v2~rAEVK7wCq90jfNO!lF)}JJc+a` zDe-7u)9nSF@gXF4rO^9GUe+2$^TbM0KJl=2V#dfsz|ih!D0{hWqhU50j)qluNdnW zx{>#24)0UGdaCOOU1m|M4pFyK>d`PrK%k1GfbkvpFqnR~0EOO`+Y-Jk`<%cZ;)voC zvybq7WakNRPv!3`c|W!9C;B3qEqt1aEJ@_H(IzjfiD4&vtx*7O(AkFLX(lw!GTV@L zG)xjCo|Q_$?XHM327I!x@clr3q6j^zWbgYCDbBZr);>WqVHZ%P=q|*29Dj|l-XqZ7 zPktCY8dA!gGvWQtIF4q8pDTrO%GS?0sJxmWYXFyiB7V047NuSVW> b#!0&8ja^T`;KC8ui`3H7N9|A>v6ki~LU z>qXp0aQ}k)b=+S(f(NdBj|Rap;C|rKzzXnX;3V)O@MGYIz}vvXz~6zd0{1=^1TO&J z0J7`};7h=HAORKdIPi1e9pLxC+rVpkGX0P54T4d8zXg0AcnL^A2`mCX1D*li16F{) z0oktC9uI=AVEZZHd3@i0BD4FzzD(W`;3pWrkmEN%w(k$%o4|wnAp>|4$Z@!wqXpLR z{UvZ5_!Dp)_$QEK_G1A)^8Aw--UqVXd!EYtd4{V8=**Zf)oXZa3kcY@0{0Q zmC?ek zmV+5DV|cE8yXZ)1cp^zyD^@8)_&La_aWJhO%qpa&VYC-YJ8W`o)6Jt5l7gTUcoIfA zKlwU{pr-6@#Cv;;!}7n&bPq%54l-ktu}2Sa;s4nA4>IROhfI^4w@SA_BD3*Y(Mc4! z;G%S1hFLmXmc+JLW`0X@B9;_M-SX{nFmId(trtF;CAs3IcF3*^77Ui$kgJXmeo3)% z4tnbFjR%YQf<)iYrmMFs>{zp`LK$vZxyTy5u%7K@^;u!1waOfkD-8)tc}D7R+oE#7 zn^U6l_|a5*(H-TgES*nUuC!?CRG7cCSeoL3$J)}n%wig=)+S2T@lx#+)oS&VZy&FYRjXK7 zx-6F!%N$-eLA9~^`1tWEuEMNvzO)GUT_n7*b()Gq5=xpE*4&~qjr8lCv6VSR7Nv;mG;O7Bv}v^MeWzZjbi3WMXL+hASIX#9mCU0Ji1OW)rmYkUb2D=n zHhr&^tA#1lqtvizwFBoo@?YshDA3c?XbbD4pS-d-U7FZj$GV!*mM-Xq2~$E$EGa** zvQAA~n2!=GqSCanv8$8rq@Qkb>@;PslcSo>QmuHp5X=fru1qYgf4jamXy@x|>pxIv z&=2}|J=lj3MM(83n#YRF+7PyhrAU^8E9k>$?LHk2X5x+kQ!&Gv*ohXp2ih#eY2EMP zB|jA$cl%qVWs^9%3Cc7eLUB`tWb8)ufQ?@D?^qe*gAY+ODuN@j)fvxzf zktU6wG*q?&g%GCv{2E@X(9yI`*iKg5^Zgz*O=7hg+6c0T{oWG(jJPe0Z0Q*YT}NV^ zQ-mb|$IVAj6aPj-i&L)UA;MJF{$N@WR-*ZBvOj^;JcK7mE8_2bUmC@2f_B$3{{pog BE=B+V literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000..4a18e27 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,119 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2015-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 12:55+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensions PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "L'élément n°%(nth)s du tableau n'est pas valide :" + +msgid "Nested arrays must have the same length." +msgstr "Les tableaux imbriqués doivent être de même longueur." + +msgid "Map of strings to strings/nulls" +msgstr "Correspondances clé/valeur (chaînes ou valeurs nulles)" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "La valeur de « %(key)s » n'est pas une chaîne, ni une valeur nulle." + +msgid "A JSON object" +msgstr "Un objet JSON" + +msgid "Value must be valid JSON." +msgstr "La valeur doit être de la syntaxe JSON valable." + +msgid "Could not load JSON data." +msgstr "Impossible de charger les données JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Le contenu saisi doit être un dictionnaire JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "La valeur « %(value)s » doit être de la syntaxe JSON valable." + +msgid "Enter two valid values." +msgstr "Saisissez deux valeurs valides." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Le début de l'intervalle ne peut pas dépasser la fin de l'intervalle." + +msgid "Enter two whole numbers." +msgstr "Saisissez deux nombres entiers." + +msgid "Enter two numbers." +msgstr "Saisissez deux nombres." + +msgid "Enter two valid date/times." +msgstr "Saisissez deux dates/heures valides." + +msgid "Enter two valid dates." +msgstr "Saisissez deux dates valides." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La liste contient %(show_value)d élément, mais elle ne devrait pas en " +"contenir plus de %(limit_value)d." +msgstr[1] "" +"La liste contient %(show_value)d éléments, mais elle ne devrait pas en " +"contenir plus de %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La liste contient %(show_value)d élément, mais elle doit en contenir au " +"moins %(limit_value)d." +msgstr[1] "" +"La liste contient %(show_value)d éléments, mais elle doit en contenir au " +"moins %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Certaines clés sont manquantes : %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Certaines clés inconnues ont été fournies : %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Assurez-vous que cet intervalle est entièrement inférieur ou égal à " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Assurez-vous que cet intervalle est entièrement supérieur ou égal à " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24b48dcee68df1d40f3f81be8ad1a635f0b9bf10 GIT binary patch literal 3828 zcmds4&5smC6ffmNSQQn&qs9jbuoLL{0%aLk5SGQP?y@Vp;>Cp2cGpf9^i+*q)jMn? zhLefL#FHi_ns6cec&xuWEkT zx%o4J@hqMf@%)76WjvoefFF!)4+^mdxE=T?um*e{I0`%qdk49fZqbI121eY0|}^r72t=!W5BP0 zHQ=v6*6XFMLM%h~!@yVZ{rf|O-py^`h40sZ?*iK;-U70|yS58a2aW>w0S$0B@bePC z12*veGq4HVF(kyNkaH6FKJbT!i~Un@(s8VR0A#(t2eN)Y0#5)p?GR!dI0kG1KLYal zEg;zB1F8=O+#$d^A5Y*HW{OAfu&;Tr449CQC-M6j9;h@JU@M@qcnS|(k;eof5|877 z%k$VkH5k2Tcu^*qs4@H#ojzL?Cvzk_e^G^AjM*%S$XHK_l?4e! z(#xtCH!e#R`B-}VXh*3uZAEwqZKsA->(RIl&vwLXrjf6vqX8%*!Ovtx_wG3#>Se)Qac=alS{T_EREZQ4j8 z+kdT@EJ>U=tDIL+5e`=bF_w#*--?{4FKhiqb++W8Snv~85b1>f}(%ZB}uV-c~PLvI?WZIc*t6)ya z4i=A&S z`p_6EP#I{k)P*@75wCR=1JDRN9JQ0#K-{k&ql<E3={#~oPp=d}<{ zGA2ks2Jbo0b|_l$-G&=Bq)W0~{6?($dZF(_zNxMR82 2 && n < 20) ? 2 : 3;\n" + +msgid "PostgreSQL extensions" +msgstr "Leudachain PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Cha deach le dearbhadh an nì %(nth)s san arraigh:" + +msgid "Nested arrays must have the same length." +msgstr "Feumaidh an aon fhaid a bhith aig a h-uile arraigh neadaichte." + +msgid "Map of strings to strings/nulls" +msgstr "Mapaichean de shreangan gu sreangan/luachan null" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Chan eil an luach air “%(key)s” ’na shreang no null." + +msgid "A JSON object" +msgstr "Oibjeact JSON" + +msgid "Value must be valid JSON." +msgstr "Feumaidh an luach a bhith ’na JSON dligheach." + +msgid "Could not load JSON data." +msgstr "Cha deach leinn dàta JSON a luchdadh." + +msgid "Input must be a JSON dictionary." +msgstr "Feumaidh an t-ion-chur a bhith 'na fhaclair JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Feumaidh “%(value)s” a bhith ’na JSON dligheach." + +msgid "Enter two valid values." +msgstr "Cuir a-steach dà luach dligheach." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Chan fhaod toiseach na rainse a bith nas motha na deireadh na rainse." + +msgid "Enter two whole numbers." +msgstr "Cuir a-steach dà àireamh shlàn." + +msgid "Enter two numbers." +msgstr "Cuir a-steach dà àireamh." + +msgid "Enter two valid date/times." +msgstr "Cuir a-steach dà cheann-là ’s àm dligheach." + +msgid "Enter two valid dates." +msgstr "Cuir a-steach dà cheann-là dligheach." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " +"a bhith oirre." +msgstr[1] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " +"a bhith oirre." +msgstr[2] "" +"Tha %(show_value)d nithean air an liosta ach cha bu chòir corr is " +"%(limit_value)d a bhith oirre." +msgstr[3] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " +"a bhith oirre." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." +msgstr[1] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." +msgstr[2] "" +"Tha %(show_value)d nithean air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." +msgstr[3] "" +"Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " +"%(limit_value)d a bhith oirre." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Bha cuid a dh’iuchraichean a dhìth: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Chaidh iuchraichean nach aithne dhuinn a shònrachadh: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Dèan cinnteach gu bheil an rainse seo nas lugha na no co-ionnan ri " +"%(limit_value)s air fad." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Dèan cinnteach gu bheil an rainse seo nas motha na no co-ionnan ri " +"%(limit_value)s air fad." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3de56817dceb122387293444bb2ec5f9288475b2 GIT binary patch literal 722 zcmY+C&2Q5%7{&t(Aw@z+lR!d3=;gL)az3gF)|4V(>rfG;)#!G28#l|8*pcnD<;D^2 ze4M#*<+dB@pMk{R!sC=Nu=Mle*sovv&EsF28=pM1>);+Z05?DZTze00f)8L5d;xdB zH*gpH03WY--cRT)P+j%B+t7DVm+v$5KJ+^jVcs=>VRIg&X&bJ8MlatCUz3`giK+E^ z(h5y>p-9%{L}(NIGd1T$o>I!K!1M_(YC&afEKLNhmt3a68)@Zov3|-mbUQT&KSF^k(2KTLMpJ5d}(2xLcM zp1Yj?#kE;0rdBK2-Q9`M{8!vqHr8C4f?K5%nsK9QtLX8p(Nfh~Jk3g;7r|7OPq0B| zHO~Ya3tlGl0+mj4E@|u3+A0ad#bOaymoJ}*rP~s&E4q;4&;Bqg!fk)hAM`G3kAukH zSNO3KcY0f)I4hPmtO}mX4oy$FHo|s~$A@h1GR~bf6PoqpRHeDh655;O_U}Ct$_jr} z)S4IUQ0dYnB&+7rbXy%-54&5E9&{<*?)cuZgvCqPq8h)wK1$J?QdJw0tMgK51ye6( iSLfU~qtVY-U*S5(;?TLQG^GND8$6Td;jGtH;Qa<~L(Y@{ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 0000000..d54a099 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,108 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# fasouto , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: fasouto \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "Un obxecto JSON" + +msgid "Value must be valid JSON." +msgstr "O valor debe ser JSON válido." + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "Insira dous números." + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "Insira dúas datas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c820a04f254b3c27f99e552c476fc5d28500927 GIT binary patch literal 3496 zcmcIm+iw(A7(WUKtalXANc4k9=muslwPIPQideKjq0$P8G0|z~ba!BOW}S1kOJm|I ziSYsKE~QWkG!4DH`NXULfDa}n^X98>KKSB;G4c1EncZ%YLPa^v?C)H@`{kVevSock zU~I#;9pBIRUdQ+CWB9??^tceafSZ9&1GB(afIYwyz%#&Oz}vtrz~6zd0ynG^;w9h? zAj|Fsz6=}y63_+i1%3lu0Nw%K27a+V*1vIs5FJ?W25too00}q>Oam_f4+6gjW`Vx} z*{;`~5TXv-yMb?E{o_U_t%1z^{QY z+YFfA8VHAgNHdQ+7xBS#6C=*gv-n_AYdnJ)Og1q!n{IY6$qyyU3;kjj3f1Vh$ zMsc20YE80?&RRfzwLC0C#p0V=v9It!X0=Cx!p}iA#=*1#iQ_JEGZOgPc6|jdRSIfJ zxEyjJX)k^WyPTke4l-y|)|vrd8DuB(V43Ps2wg>HIf%>0zpEJji=Fq8*>6`U7$v1c z*Ds=qg61^qS3OUO6H;mE#Q9Kh7EAUR7q}#4mnC`9FX~c83XfVmp|<)}(RHl%t3_oE1qDhCoE)+abH{_$`oNTNXDo2}Jq8O`$CQF)#j zvav@^@DlE9NoLcj{=WX+W#99eTghZ{@wBJIryV_%PajB$ zXg0bSU8VM`JerKA@OO!#>8OrLBU*~D9vn2H`DiL5z|)8>8M684ia8aazDUtcY%WDN znD+`~H+VXOy@_ZxDFZAP`M80<31(RYB`+o^x*XLh`VQNTXc~OPdYFKZaWZYKynz(K zh(*Yn!TD0ufME|34s(r34OT?K=uU^O)>rMI*~>h=Fy)kAn>x{$;7=smixDz1$=q}|m0Bofv@H}D04 z`sR*B;9Gm~JBWzKb&%BL407K^J( zDWG;bnrHoWd~@LA_A(`Q3!Ko@_8g*L8=!$1%wU?ACv9A&i1^NGpvLZEt{dUgEWCAX zT?ElhF2pI6A+9c-Cbw9;%bsxZ64iWB)tk+MmTP-g;Va8BrZr<}qT5K`*CyLNnv(zD JZgo{g{0;PxnCt)m literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po new file mode 100644 index 0000000..66ef986 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,111 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Meir Kriheli , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "הרחבות PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "פריט %(nth)s במערך לא עבר בדיקת חוקיות: " + +msgid "Nested arrays must have the same length." +msgstr "מערכים מקוננים חייבים להיות באותו האורך." + +msgid "Map of strings to strings/nulls" +msgstr "מיפוי מחרוזות אל מחרוזות/nulls." + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "הערך של \"%(key)s\" אינו מחרוזת או null." + +msgid "A JSON object" +msgstr "אובייקט JSON" + +msgid "Value must be valid JSON." +msgstr "ערך חייב להיות JSON חוקי." + +msgid "Could not load JSON data." +msgstr "לא ניתן לטעון מידע JSON." + +msgid "Input must be a JSON dictionary." +msgstr "הקלט חייב להיות מילון JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "עאך '%(value)s' חייב להיות JSON חוקי." + +msgid "Enter two valid values." +msgstr "נא להזין שני ערכים חוקיים." + +msgid "The start of the range must not exceed the end of the range." +msgstr "התחלת טווח אינה יכולה גדולה יותר מסופו." + +msgid "Enter two whole numbers." +msgstr "נא להזין שני מספרים שלמים." + +msgid "Enter two numbers." +msgstr "נא להזין שני מספרים." + +msgid "Enter two valid date/times." +msgstr "נא להזין שני תאריך/שעה חוקיים." + +msgid "Enter two valid dates." +msgstr "נא להזין שני תאריכים חוקיים." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"הרשימה מכילה פריט %(show_value)d, עליה להכיל לא יותר מ-%(limit_value)d." +msgstr[1] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"הרשימה מכילה פריט %(show_value)d, עליה להכיל לא פחות מ-%(limit_value)d." +msgstr[1] "" +"הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "חלק מהמפתחות חסרים: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "סופקו מספר מפתחות לא ידועים: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "יש לוודא שטווח זה קטן מ או שווה ל-%(limit_value)s בשלמותו." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "יש לוודא שטווח זה גדול מ או שווה ל-%(limit_value)s בשלמותו." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b4b9c117ec90250153e13ec40313e76206bb6374 GIT binary patch literal 1217 zcmaJ=T~8B16kQd+YK#dFqS3@Fk*|>L?pC6(P*4#J1e9RmecBz`sk<}H>}-n(kNW7N zkDB-oeDcXhefJlrKfnk52cFrM0tTGq?74II%$;+$x8DZ`-a1$X;3g0Qmx0fKUB7`5 z;16K)L#G_)y3K(H!3*FU;7#yVumlf*UxTlK-+`_E6Zi-44e+r4c*b!qfq#OB!N0(^ z-jxBzxdR>sTR%_0x4;qD)_DcC`uAXzaxMZ0^JRND--}VsISZTy&h>H^ERT(hw^^L= ziFAzefRZdVRONOjB3ga^>}kK25MdqyPugm=fJb6-dDora3}!5!PSgJX?vXk{(CE0MbmJ3`5jq9&7dRoLV$ zrH#9u)kmM&6$DLeGIc9mHgno>j!QyL&3dpYG%?8d>=x0ledMf zc|_0L7Z=kLhh(}oRRg6 z)wx^YED32*EBIlO#v8`8LeJ}TIz?kkiXFaNtf|E7HnmT2@4VO0-b7)2Wqs+O{h;U< z78QOd30p5)=+E$7mGr|pTL;_XG*h$qvNYZlSfivd=sS^!Jr_Kwlr(w({%^gKJzhtVVpc}DGX#y zkmOm~YVxliq@wK08)29fMQ2O$R2WWC8|5%c81ciYZgI)%^k)h4+L|X^{$F%Zq0}=c X@n7p(|L4*gT8jI3Z}(*, 2016 +# Mislav Cimperšak , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "JSON objekt" + +msgid "Value must be valid JSON." +msgstr "Vrijednost mora biti ispravan JSON" + +msgid "Could not load JSON data." +msgstr "JSON podatci neuspješno učitani." + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' vrijednost mora biti ispravan JSON." + +msgid "Enter two valid values." +msgstr "Unesite 2 ispravne vrijednosti." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "Unesite dva cijela broja." + +msgid "Enter two numbers." +msgstr "Unesite dva broja." + +msgid "Enter two valid date/times." +msgstr "Unesite dva ispravna datuma/vremena." + +msgid "Enter two valid dates." +msgstr "Unesite dva ispravna datuma." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..37a014e9108c48cf029a90a87d1dba8472f363fa GIT binary patch literal 3767 zcmcgu%WoS+7$2Z5t$7y;MS%DS3Qg3mAL%P~8(yUqX`3`OX)Cx?WADTsdp)!4%x3GT z7a~L?L?tA|0Yw~oso(~xgt&03{Re1t>6rt+*>xPJj}VE{m1ciCGv9pg@0KndIn{2cfl@F(DP;H52@{B2tq8^Qby;4a`GjGs#(snDhkwT{|+pP6LNAPk_!J z-vVC;{sKG%{1f;kZPrm6>Q#ajPOCq%V)Vok=R3S-;%DbM`q z%c_-H@u;0=lUB4~xw7?9LsG#KK|G3hn|!$6IXP7hs+HLpiO^KFvRo>IL#D2ip0|9G zV6+c!!m5i;j}9zoUL>pjUhiW+|L;7_|H1SgJX<=;9(7wT{1-hp;5o%Z((`0&BvlPb zq*p%+Dh>j}riHP>&%$A{AlCVU%Wpx3w*&=3)oeY_X0)+L>)8*^khpAxGKj8Wvl=8# z(KZD43u;MYAg2u5+~R1DAXZJK6E#2>MtVW|!XKcVa}q6&tkc(t&k8H8RhJ{;a#cW6 zw^!^R8bUv3)AZ~0ftg6V4&Y7t-UXBp ztSpn?K#l9%IT7l}dQ+w*eed14X1qCFrrgZgIq$eDc+h(9xh$r!Vrkqf9`s6wsZ=T- zII_1mRxE&?M@6L71eGEK>9or{1j>R_IZwPX;7 z`fa15%AyPcp7+I@IHPJYuL*BX@K%}5hat*g79^sT4+YQC{XdI7->)#E2R$6^j!SC3=gB z1d?nzhG}VSx}UCGS=~B-tubuvA3d65@87)PBMmqW-UNOdzM-(Y#5>C}X=h!l((Wwh znY$1?cM&vg_KmLDCe;u=uhwHSnihHIs9V%6Zcl|LHn0H^%jIkg(1`|0Lbh1%y0=tMr$qd<19!X76h zgfj+qRvjQ3?tasWXcRhExp5!lc)&U7sden`JhUm=dKw2PbtlJaySoI5gLsZixM75UJ0ZN8T^lUCAt~KFr~Yc-Z1!5E&%H; z7ZHdSa@$4D@Os=pI1^l8j!CPtf;=I(ACoMOw_P&5Q#wg=0+-lEB6#Bg2x&h689I3Y zLN*YQGmnHu~9hglZXwYu~`|XwZct~M!;RFFDmYO&b6ja+SNKm4bfTVi(o-2`+C)#0Fow$8Dx*+~BjEcdoyHwYxnmjwF7jbF@vRs#3 z`|V)Uot37x_{(Spap$U_dEDU*TtoeTjXnWXhjO-0Y0{?c+F2k6=x0NXUT2#w!(6jY xYu%vOsfiX|U0V*j--u=eV(Ap@UnfJEX!oNr=!?Fa(q`}eH?l@FaB_po=O0}V*608L literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..29812f4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,129 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-26 10:59+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Rozšěrjenja PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Zapisk %(nth)s w pólnym wariabli njeje so wokrućił:" + +msgid "Nested arrays must have the same length." +msgstr "Zakašćikowane pólne wariable maja samsnu dołhosć." + +msgid "Map of strings to strings/nulls" +msgstr "Konwertowanje znamješkowych rjećazkow do znamješkowych rjećazkow/nulow" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Hódnota \" %(key)s\" znamješkowy rjećazk abo null njeje." + +msgid "A JSON object" +msgstr "JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Hódnota dyrbi płaćiwy JSON być." + +msgid "Could not load JSON data." +msgstr "JSON-daty njedachu so začitać." + +msgid "Input must be a JSON dictionary." +msgstr "Zapodaće dyrbi JSON-słownik być." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Hódnota '%(value)s' dyrbi płaćiwy JSON być." + +msgid "Enter two valid values." +msgstr "Zapodajće dwě płaćiwej hódnoće." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Spočatk wobłuka njesmě kónc wobłuka překročić." + +msgid "Enter two whole numbers." +msgstr "Zapodajće dwě cyłej ličbje." + +msgid "Enter two numbers." +msgstr "Zapodajće dwě ličbje." + +msgid "Enter two valid date/times." +msgstr "Zapódajće dwě płaćiwej datowej/časowej podaći." + +msgid "Enter two valid dates." +msgstr "Zapodajće dwě płaćiwej datowej podaći." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina %(show_value)d element wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." +msgstr[1] "" +"Lisćina %(show_value)d elementaj wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." +msgstr[2] "" +"Lisćina %(show_value)d elementy wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." +msgstr[3] "" +"Lisćina %(show_value)d elementow wobsahuje, wona njeměła wjace hač " +"%(limit_value)d wobsahować." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lisćina %(show_value)d element wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." +msgstr[1] "" +"Lisćina %(show_value)d elementaj wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." +msgstr[2] "" +"Lisćina %(show_value)d elementy wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." +msgstr[3] "" +"Lisćina %(show_value)d elementow wobsahuje, wona njeměła mjenje hač " +"%(limit_value)d wobsahować." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Někotre kluče faluje: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Někotre njeznate kluče su so podali: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Zawěsćće. zo tutón wobłuk je mjeńši hač abo runja %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Zawěsćće, zo tutón wobłuk je wjetši hač abo runja %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5f2eaf4cb59d2d6f0a3d7db569c227b478128348 GIT binary patch literal 3185 zcmc(h&u`pB6vqc>OS}9i6eyIR(?V%N>)lO6X}WC?X=v3zlBP{45|?Ur{bD;F&ul&8 zY)n+Gl}OuVHf1Tn&Xo;^4UZIdLR_S&XmcO#cTUcYgK0H39U(Lgt*nTY!AmC8t)91h z9zoF|Tsc-@29bGl?n8AR8xc@2@6 z+J?jZ#FNMve5Z!Jxy9k0K&E1)TWW(~Gu6wHPyPnU1@}cOQtRw>pDzk4uT_^Lbg4nG z)cr!r9}p@t_i~=7Zhc?=^+?fS$(iJ>py*FJJ^U>4v!qH;wViEW4#4z-$-F~TH_P3HvB!KrRAq} zBTNZJbUegeS>Ts9f<#2JjP~<7UR6OR0`e9}BsG3IQ-Me$G@+r;+Ged%X|-Bq>r_XJ zbjiI_DK@tT*;7ynv&wL3W@_f-x*JBy)zTzNlN8KrH?dEPRH!s1YV{azgd#O$$KP2v z<&CY&xo<5}>YY>#?dQ2MR*!7o&>9c3(wxjvA-z*NO-zleX8vf#N00I1c6>WG-Br~llgH6>YcWab@>fNKP8hV;JA7=jgt@-Y1v(-|f$iRq zP-T#UQA{bCIH@u_5p}d`Yoq-ot$0EKPrKKpIK)E@ZGyXO)k$|nwK)ZNyMwMMg0`;L zQ3=X!s&Mqsf1og?WioV2jT3#-;_fOMW2d{4Xp3<+xW2(Xes=}C*R~S*H?Q24, 2018 +# András Veres-Szentkirályi, 2016 +# Dóra Szendrei , 2017 +# János R (Hangya), 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-26 09:51+0000\n" +"Last-Translator: Akos Zsolt Hochrein \n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL kiterjesztések" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "A tömb %(nth)s-ik eleme érvénytelen:" + +msgid "Nested arrays must have the same length." +msgstr "A belső tömböknek egyforma hosszúaknak kell lenniük." + +msgid "Map of strings to strings/nulls" +msgstr "String-string/null leképezés" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" értéke nem karakterlánc vagy null." + +msgid "A JSON object" +msgstr "Egy JSON objektum" + +msgid "Value must be valid JSON." +msgstr "Az érték érvényes JSON kell legyen." + +msgid "Could not load JSON data." +msgstr "JSON adat betöltése sikertelen." + +msgid "Input must be a JSON dictionary." +msgstr "A bemenetnek JSON szótárnak kell lennie." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' értéknek érvényes JSON-nek kell lennie." + +msgid "Enter two valid values." +msgstr "Adjon meg két érvényes értéket." + +msgid "The start of the range must not exceed the end of the range." +msgstr "A tartomány eleje nem lehet nagyobb a tartomány végénél." + +msgid "Enter two whole numbers." +msgstr "Adjon meg két egész számot." + +msgid "Enter two numbers." +msgstr "Adjon meg két számot." + +msgid "Enter two valid date/times." +msgstr "Adjon meg két érvényes dátumot/időt." + +msgid "Enter two valid dates." +msgstr "Adjon meg két érvényes dátumot." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"A lista %(show_value)d elemet tartalmaz, legfeljebb %(limit_value)d lehetne." +msgstr[1] "" +"A lista %(show_value)d elemet tartalmaz, legfeljebb %(limit_value)d lehetne." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"A lista %(show_value)d elemet tartalmaz, legalább %(limit_value)d kellene." +msgstr[1] "" +"A lista %(show_value)d elemet tartalmaz, legalább %(limit_value)d kellene." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Néhány kulcs hiányzik: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Néhány ismeretlen kulcs érkezett: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Bizonyosodjon meg róla, hogy a tartomány egésze kevesebb mint " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Bizonyosodjon meg róla, hogy a tartomány egésze nagyobb mint %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2325388886d976f017a7fb9ad8c9284f961dffa GIT binary patch literal 758 zcmY+C&2AGh5XTLa%N~*7#9=rfB`V&JD5A}#seqD7K?#HsIB{{ZlZ`8{z1Yr2AA}1B zo`JXEDS%gDoDc#d{WKnXJf5BX|GanfnUNh44~aA4F7c5FRufN%Pegih+nwVy zOH)eZSGba)=6`t|-pZiW%G>SZlq?zw=lR46?UeAw=I}~rEgcL|7O3Eix}ory+J>>z zb8}92bh#8I@(GG6hk^EJl?;2(Sa@IONwQwAV;`!@Id0;asgm7y?Vb8lB9S6#Mx()~ zf0#fPr_qI>qMACpscFuhW|q`SNZp0mLRg2s_kME8PY-$FtvOoW*E3U4FFBk}rT^P% z4pKy8wX{O$SSDTlN|n9`zt=b|W@KK!p|cVE$Eu+KWLO4YhDiti)ar r;rFrUK`IWy)PhE!z$ua@rf5kEP@xN=FuIg}SzyfidoiGcgGShI>RIBo literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 0000000..d9c741d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,108 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiones PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Le elemento %(nth)s in le array non passava validation:" + +msgid "Nested arrays must have the same length." +msgstr "Arrays annidate debe haber le mesme longitude." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..417dbab065a1c39f480b4d8a55fb70005b0c39d6 GIT binary patch literal 3035 zcmcJR%a0UQ6o;=02rWLqcMv@w$c#|^0D+-ljKeD#WoBAtz{Et!?XEjrm#Vte*1a`N zCnoM(7&peabxB;h(vAOt8yC8D<<^C6-S|7V`ZdVlB*sdrzj~Z|&bjAR{pcA&!E3z{kNF_#!wDE`#rZ?|^r~{otSA0dVIdLOcf^0$KMQ z_yX7h3Dn?m@H6lm@H_A>cxy*#f7ebSW^n%+_$;^r5~#pg@Kf*t_$^oie+SvGgS&+I z626}W`T38J3Q+<70uO?_b_?-7cm%uwegd+;zks~&Kfoj4zCA*`44wfGfj28oL{1|){{2qkc{($S_1K|*O z<&S;%#WuxWoE&RDI5u$EA8hYQoG>*$p1>7c6wly92z*YEBJmVXgxu$b^D2%Vo!O8{ zp=Rwd@)wjA)=^vWoet^k)s^L{Sn#B*eOq;$xRe!1NG5ZXWU>^YP&!!^SBx!kMJ|#K zKiX0*O;-^vI$7FFlvBxoy19~0AZi$yld`on02q@m~pehE)GKSMdF zpmo(B#d~v%!|K25wEu_FEp(`}H(*5%rCQAFA3vSx}Tv0_5ZW5{rUhE5% zpC9(tXYFC`N?t05o90&JZCAxj9th)__2oC51Fbyc2@ouX!A-OfcG;xxHhMg(Tvxp; zcfpeF>M*!ibZxMfHL22CSqm<4!$UT>%vDS$>y5dfemZEJrADLq#<}D5ll3|TgX?NT zv(8O&XM)BYojlb%)i_?qQMo3q3)ZlGn@E@CO}eV`0j(;hWgqk8LRX=?lfG)d)lH>N zsu(R0f_6df1{v71VkO+VnhiBAHv|=5MTB4dy0tY-?TR!4=cVLSGhh zZSBUMHc5w-R#N0L39e>&YMW$w{?^Vn&Qp0gUq4?F%NllQdXB?jVKKt`W5lQ}qrN0gb1VzoYop1ko-##b1`muaN$oLVLy1qg8%;UN1CHD_CM_v*p8;2 zG+c~jYPinuDUUI!(Y!R7#9|?oBasBP5W*ZPyuj{FM^DYx)ydOReiU$wWGAD7*YQ6F z*q&Oo(8r&aNl%n9E?1_?M*xiwM|#*3W6A2UVg3Fm!&q|0QLqJ{+jRODx literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po new file mode 100644 index 0000000..4b3a7f4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,118 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2015-2018 +# M Asep Indrayana , 2015 +# oon arfiandwi (OonID) , 2016 +# rodin , 2016 +# Sutrisno Efendi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-06-18 23:31+0000\n" +"Last-Translator: Fery Setiawan \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "Ekstensi PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Barang %(nth)s dalam larik tidak disahkan:" + +msgid "Nested arrays must have the same length." +msgstr "Array bersaran harus mempunyai panjang yang sama." + +msgid "Map of strings to strings/nulls" +msgstr "Pemetaan dari strings ke string/null" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Nilai dari \"%(key)s\" adalah bukan sebuah string atau null." + +msgid "A JSON object" +msgstr "Obyek JSON" + +msgid "Value must be valid JSON." +msgstr "Nilai harus berupa JSON yang valid." + +msgid "Could not load JSON data." +msgstr "Tidak dapat memuat data JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Masukan harus kamus JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Nilai '%(value)s' harus berupa JSON yang valid." + +msgid "Enter two valid values." +msgstr "Masukkan dua nilai yang valid." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Awal jangkauan harus tidak melebihi akhir dari jangkauan." + +msgid "Enter two whole numbers." +msgstr "Masukkan dua buah bilangan bulat." + +msgid "Enter two numbers." +msgstr "Masukkan dua buah bilangan." + +msgid "Enter two valid date/times." +msgstr "Masukan dua buah tanggal/waktu." + +msgid "Enter two valid dates." +msgstr "Masukan dua buah tanggal yang benar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Daftar mengandung %(show_value)d item, dia harus mengandung tidak lebih dari " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Daftar kandungan item %(show_value)d, setidaknya harus mengandung kurang " +"dari %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Ada yang salah di suatu kunci: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Suatu kunci yang tidak di ketahui sumbernya: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Pastikan bahwa jangkauan ini sepenuhnya kurang dari atau sama dengan " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Pastikan bahwa jangkauan ini sepenuhnya lebih besar dari atau sama dengan " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e043bd06f237965af2fa746fc6a540378ff096f GIT binary patch literal 3212 zcmcJRyKfvt9LEPpLUIruA-n_;zXT=m;q2a>A&Py85s()KJ29~n%4mE$w>Q4s*<)tb z7fY!r5M4xzNMk{f$Rd&p3YvxgfEpnRx-^tjd}sFjieq94Wu?8(K7RX~-~68U`+;5G zFdVPqd=uwyIN!qg^%MBPvG+;Fj)MEZ{a_7z9UKQQfuDn)f=l25@Ne)9aQ9P;y#gKv zo$gWaHEqXm$A1&0-fFGz)A2H=)U^{d>8x&JO+mQN`G7h3HKUofVaTo z;IH71;Qax=tCVsxSZoZ>E$HmN3myW00p9`t1c$->&oWjA$H2qjJP5P>0n^tGxWn7; z9=wPX+hh>+z6SgnFxek3;rDr*FlFs{4p%Ud9mEM&_?RF>>;;@~xsQ#DD?5I4Xn`lW zsG8&CFDT88r8(j5WJI6LT)q^t4?QWHn-?w1&SrTMk;*J3881aB;+BW(yfV2KWINpA zM;g*x#e#6r%F`_WHn}9jZ%&F+0-b*X(Dc z@^nsUU=7|E8Enc{jeWD{1T z*txQusv)Vc6G2>SzDN<=@0{$7gK14RDG{1hrYx7r;3Lz?`U7u8B%$a8ehE)qdNJ(hFucI zil_{SDTCPI3ogF}8J-GCgoy|GI%h#&Q5pkm>V5xf}RJ2JbWbR|1 zsP6d@zk1aiaaHL)<%3PTQgqu6*)`V?)^gUT-=Ggn>&$h4U?K{xp@gu@CPnk8@vL%1 z^fGOODHF>m_$ZG}Fq<{0GJSbAIO_@?vcWl*#WYfHj0W|SLE{uP8qN2{hU+8sIs}6& zVnI5co8(RfjWMc^G*6BU*Kt%Pxv{}4wr>({Gu@=wPNt(=(~OLB9T}4;I%CUcAI$Sm zn)mUIigO-|U{>(7NfRxRaD^hIp^mk^X06um_e1M+%C@)>qF2?*U9AG*UO`QoTD3AY zF?D`@|BbL-Ig6SU3U)2_utAF)sPz&Q>1k?pxHiI$U!A=WjIPVMwc0`l=T$3U4OV8g%m}mA7>o$9<*W)GIE27S?i_lL?vP2c%cAgoZ|KTzOkp*vNV!jeZS zn@Nh>*r>PKE?|AK#R?o4vaN66f{1HOuo!_-2nKG7+o*5Mu;NaNv9_acwur4b=SKcV zZg~ldIzlE`YSpj_g}&Z(QP~`!4Pl|7^~q5U*~dOs@MJkWiaV5GKyU;9WLr8&^ahAZkKWQvK)?~wu_#0FCRKP9<5kDHqF~APK10+CU38K zs#xjua^<=yroucY#G|~Hew?ri&YdVGO+(5LmTDO zkXuavg^R^D6kwk4B, 2016-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-19 02:52+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL viðbætur" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Hlutur %(nth)s í listanum er ógildur:" + +msgid "Nested arrays must have the same length." +msgstr "Faldaðir (nested) listar verða að vera af sömu lengd." + +msgid "Map of strings to strings/nulls" +msgstr "Möppun strengja í strengi/null" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Gildið á \"%(key)s\" er ekki strengur eða null." + +msgid "A JSON object" +msgstr "JSON hlutur" + +msgid "Value must be valid JSON." +msgstr "Gildi verður að vera gilt JSON." + +msgid "Could not load JSON data." +msgstr "Gat ekki hlaðið inn JSON gögnum." + +msgid "Input must be a JSON dictionary." +msgstr "Inntak verður að vera JSON hlutur (dictionary)." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Gildi '%(value)s' verður að vera gilt JSON." + +msgid "Enter two valid values." +msgstr "Sláðu inn tvö gild gildi." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Upphaf bils má ekki ná yfir endalok bils." + +msgid "Enter two whole numbers." +msgstr "Sláðu inn tvær heilar tölur." + +msgid "Enter two numbers." +msgstr "Sláðu inn tvær tölur." + +msgid "Enter two valid date/times." +msgstr "Sláðu inn tvær gildar dagsetningar ásamt tíma." + +msgid "Enter two valid dates." +msgstr "Sláðu inn tvær gildar dagsetningar." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listinn inniheldur %(show_value)d hlut, en má ekki innihalda fleiri en " +"%(limit_value)d." +msgstr[1] "" +"Listinn inniheldur %(show_value)d hluti, en má ekki innihalda fleiri en " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listinn inniheldur %(show_value)d hlut, en má ekki innihalda færri en " +"%(limit_value)d." +msgstr[1] "" +"Listinn inniheldur %(show_value)d hluti, en má ekki innihalda færri en " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Þessa lykla vantar: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Þessir óþekktu lyklar fundust: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Gakktu úr skugga um að þetta bil sé minna eða jafnt og %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Gakktu úr skugga um að þetta bil sé stærra eða jafnt og %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32bead51eb8e140099647967ab08877888e51071 GIT binary patch literal 3243 zcmcIm%X1V(7;ohvEItt5?+>bCvLv&Q7)@M=CB~qu3B)Aek?PEJb{l%Sm+78t!pVzT zWvMs+0523ri-VMBN>3g+`v+L%#j6*8-Lt!SKp<+_RWrYtp0B_6V}3if|2u~D9Ilsf z-NE%5uCE`$4eQXuj12(~10MrcfiD23f#-mq0zU>`2Ob0d34957U>{@80*?bd?y?9y zeGA zcQ70Y>q*>UCIe~kwcqr*L*=lZ!rj{nRR-&EJV8bFG%mOx!~`K?M{&XBAvQj)Y&sEr&fMixKi`cOlldFWZaik0{NGRcsSJ>oZOl0h&(LCFzu%;6! zEZ44Gwj?zy5yZ2MZ%_jFdnX6wpjv~?NrWag+Ht8Z4%xQp_Pmvl1fwzB3A;W%Jvy+U zRnhJHd%KU5%7b~@|AXl+JX2F-kKU0B|3%OH@SNuzGOJ`=CUpx*WcrU)ohxP8Iboeh zig4H>h;6>+^IMSRsURhE%e58IW8N8?Jy$Ij^r5UldlTRi7hbJr>Z^e-S#_MpR+`a7a|Y zeBu#g$w0itFST|^1N$_6EuQRAkxC^{x{ z(Y$TRBziAz*=X4`sI+i?IhyeW58CK`pT#s@t4~F>H>3I_)$5Ikw?}K^wHgScMX@G5 z&uw&*(Hk`yuQzHFqcyD39Jel7hWS=;XR-#(@Jtz+mzmLYdS+_&-PAu;qm zh?WIU8`N}YY3Mm4ZRa|TYPH+#R-ES~SH*e-9jaQ`(g)Q$UX`v|F3mURXE&{`S8Amh zRHD$(W}^eM93o%sD3s$4^o5I6b22_%zkar%J4;d|Z9aB$Bpv@Qd^H%cW zHSj>*@K#HDoebshKAIulQO)R=|D3DT58~O>uvgkxQiAkFm&Y6W>$ctCE)ZZ^RZYf= z-g+069|XlGu?vIX%)8DNG7E3u) z*SBx@>WAOa)Pra|V;pc&m4(HXgmY)^OoiNGJ26dmrx7PA6{ z&~KY<5rzf(K*`?R=32{8NQk?Ee=#vo4ay%tNx}iSZned=YyN);TVYs8>R>`|juCc7 z#W?~Lw, 2017 +# Flavio Curella , 2016 +# Mirco Grillo , 2018 +# palmux , 2015 +# Mattia Procopio , 2015 +# Stefano Brentegani , 2015-2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-30 21:04+0000\n" +"Last-Translator: Carlo Miron \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Estensioni per PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "L'elemento %(nth)s dell'array non è stato convalidato:" + +msgid "Nested arrays must have the same length." +msgstr "Gli array annidati devono avere la stessa lunghezza." + +msgid "Map of strings to strings/nulls" +msgstr "Mappa di stringhe a stringhe/null" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Il valore di \"%(key)s\" non è una stringa o nullo." + +msgid "A JSON object" +msgstr "Un oggetto JSON" + +msgid "Value must be valid JSON." +msgstr "Il valore deve essere un JSON valido." + +msgid "Could not load JSON data." +msgstr "Caricamento dati JSON fallito." + +msgid "Input must be a JSON dictionary." +msgstr "L'input deve essere un dizionario JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Il valore di '%(value)s' deve essere un JSON valido." + +msgid "Enter two valid values." +msgstr "Inserisci due valori validi." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" +"Il valore iniziale dell'intervallo non può essere superiore al valore finale." + +msgid "Enter two whole numbers." +msgstr "Inserisci due numeri interi." + +msgid "Enter two numbers." +msgstr "Inserisci due numeri." + +msgid "Enter two valid date/times." +msgstr "Inserisci due valori data/ora validi." + +msgid "Enter two valid dates." +msgstr "Inserisci due date valide." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d oggetto, non dovrebbe contenerne più di " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d elementi, e dovrebbe contenerne al massimo " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"La lista contiene %(show_value)d oggetto, non dovrebbe contenerne meno di " +"%(limit_value)d." +msgstr[1] "" +"La lista contiene %(show_value)d oggetti, e dovrebbe contenerne almeno " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Alcune chiavi risultano mancanti: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Sono state fornite alcune chiavi sconosciute: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Assicurati che questo intervallo sia interamente minore o uguale a " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Assicurati che questo intervallo sia interamente maggiore o uguale a " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..73707363be1a978a2a014b51dd39d75d73a12eb6 GIT binary patch literal 3349 zcmc&#+iw(A7(XfqtarS}3rCVd8{A6^hPqILR*1#kpam0O$h3R9JMHYuI&-#5A51#4 zEg)?zLfS%VC}Js1rIZ*!6f7?${sa2z%js_02NUC8;P1@rZo9~(#26=;`OP`=ec$;m zzwevh*RL8PxL(BlD(+u#Z@}IE5FWVJK1@gna2@aoU=a8+unJfY{0R6Va00j<_!saM z;Oa*Rc>(waP};5pz65LpQlJXl0z3|!1YQG901vJ5&VO_@A*EPv0zMCH08$_WmI03d zcLJ{fgTOz4(y!MZC1eo3ZwKze`j<7HA8XeVQjYZo;K#syIlKgveymwXNCj{!P_Em6 zQvPIa{WEYI)_(%4fh9gdJ_V{doCj{gnmtCy2f%*d)4<<=+kx2}zW%uP{UA`<83W35 z1TdF!0@n){(m|l=UeDl(FbPE6T+2-4_~9TAa2pxl$u^Z&O2kfV}G>HCozPD<{=PQj1XC;8Zgd zPlQGkt^~+#-AbB_@|eQ$P%UaIdX!PTv>Ne*#yHcuXw+m1XQq_WsbNy~Nm9`$H)u(z zrp8r%DCf`$&1uZCR%FXPGi6Xc8E;{xCC%rzyjT$f3vxBi?(*#p+peoc`>B|rv86L= z^hA;ua;kWFjHs<#HFU-73XmGk;)q=5u`-LQIwE0IF-@h5Mv#7)WY;;k7ACbSO4DlS zTv2rkN>UzXtWBrdgz(S)4_@a#&swV@jvwH=~vkXH;W)l*a<3(XcpZ z-L$WkvcsI|7OHEJCIccJtjnTEKcjKgvT#lqvB}M{oIq0V(2bP7OfX>@ooa+dmPt0t z6S-n?>90KAYb>`{B}drdRt8Vy7p6ywgaSk=yF``y8{N~(tc|iOrK*w(TDGDLJ3tP~ zfl%PAOTXM4XfzEu0sJ))|3S16q72hWJ9^yk?Pm$Yo5H4S> zVsU>n!nZVq8)ld`#ZU3 zKzJMs2qrYN=nmQ%Q%sBTssqh?{FO^`@~k#y`giNCM#QB=C44UU8K&)uuTe{yiss*A zm~ksi^@O{$s>*jz@3ktl!&fxDg*}s<{#w{0!tRk%TiD;Yiz#7$A)J0;UlI0{aE=Rm zR@kG$IVHLs;tD!bB0Vge>%zGxoEecm=542siu6t4+!D^og{f&_-&&Z((q7WHFS-Ye zNkhUuCG5-dGd-EnZ-w2Tx!j-WorDX;^TwLHabfN{T!5w{oIY1;5(mtm|8Zezz%@4^ z>_K6l6ZQ}Sc~H}^_#mb$ggp+ovqM)h-Q#d0(|aLveDuz4ip?0i1H_I8*%3%59k0XAVmZD z6hU&#%Q{kh~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 0000000..f883f80 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,110 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Shinya Okano , 2015-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-23 03:28+0000\n" +"Last-Translator: Shinya Okano \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL拡張" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "配列内のアイテム %(nth)s は検証できませんでした:" + +msgid "Nested arrays must have the same length." +msgstr "ネストした配列は同じ長さにしなければなりません。" + +msgid "Map of strings to strings/nulls" +msgstr "文字列と文字列/NULLのマップ" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" の値は文字列または NULL ではありません。" + +msgid "A JSON object" +msgstr "JSONオブジェクト" + +msgid "Value must be valid JSON." +msgstr "JSONとして正しい値にしてください。" + +msgid "Could not load JSON data." +msgstr "JSONデータを読み込めませんでした。" + +msgid "Input must be a JSON dictionary." +msgstr "JSON辞書を入力しなければなりません。" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' は正しいJSONにしなければなりません。" + +msgid "Enter two valid values." +msgstr "2つの値を正しく入力してください。" + +msgid "The start of the range must not exceed the end of the range." +msgstr "範囲の開始は、範囲の終わりを超えてはなりません。" + +msgid "Enter two whole numbers." +msgstr "2つの整数を入力してください。" + +msgid "Enter two numbers." +msgstr "2つの数値を入力してください。" + +msgid "Enter two valid date/times." +msgstr "2つの日付/時間を入力してください。" + +msgid "Enter two valid dates." +msgstr "2つの日付を入力してください。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"リストには%(show_value)d個のアイテムが含まれますが、%(limit_value)d個までしか" +"含められません。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"リストには%(show_value)d個のアイテムが含まれますが、%(limit_value)d個までしか" +"含められません。" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "いくつかのキーが欠落しています: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "いくつかの不明なキーがあります: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "この範囲が完全に%(limit_value)s以下であることを確認してください。" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "この範囲が完全に%(limit_value)s以上であることを確認してください。" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9da318967f474fe3814ec77e7b766f4936f11051 GIT binary patch literal 767 zcma))O=}b}7{^DgmpK*$4<2$Ot^%dju2~b%9ECWx0 z>%a@(8gK?2U-GgP->GY_V7U;u|vaz=2B>HsN_By8Qe?pV~B@6g3^5|GU@NKLMnp?I^!w6JIgdq zBtic0eu6g@qXvBO7B!5ZMik%1QHyl*zx-Ob5u-+fG@C0C znBS+`;6zcOb84g_=pGe_*;jV4rSW;&0OZM?Sdt7?sz!d)?vDHj<*YkS=M?vtPc>JRgoqB-7{YN`nmMZMIW zxQ))Iov7`5&VF|GwX<_)KRJ8i?6I@&>YY>M?3uIg;S6S#IQzxfueH}a@cuXQt+S_f i!Z-iQwD>BxuJQruy{bF;SdUN}GC(iT=gW(6?)?M~Ul#8G literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..fa3edcd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-ის გაფართოებები" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "შეიყვანეთ ორი მთელი რიცხვი." + +msgid "Enter two numbers." +msgstr "შეიყვანეთ ორი რიცხვი." + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..14788d610037824f0f42f406b484583d45a4baed GIT binary patch literal 868 zcmY*XOK;Oa5MH2Md_>~LVT6R#s%&CM6|`=HfYM5V7D5Sd;j+YAdmCpRyqi7{hdwSy z6$pgLr4pC^fmSp^^uY;<>pFM%EzCNlEh~MV$A0t8%*uZ*4SXhe1`t;e6Nrn57YKV= zi0g<~h(W{`#AU=U#QSrE{6_m65uYdI4ceb*ucEzkfe^eVXb7hAV|$Q_=1sUZD0MWX zKuFLL2bQL61p*O(Of)RASOiRSAIL+lG!Ods3Yu-DA!3U>FH)?@A?7mFQGrwwrNfjz zc{~GrS#zmGA{D8o$pWuyS_$Ygp4yxb!2*+E;>__@l4?4uLJ`or?NHHL;)7FtRHKtA zXBxTmUOq(0^=?wvquv;JH~f*YVb^nAB+@y)D6HmxyfIqxpj7flMuuHH&J0tU)>0-_ z%yg3aaGyyj6wGiD@E9g=8Vqm8c~}r~KDmW8GHkPu(;8<@A0DvRtP#Orq;<OxH>w8=D^W*?s5Ho)wgE>?EU{@Fh-PxrPh6?fUNo7s8DU%Dq%H2?qr literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 0000000..9ae6947 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,105 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leo Trubach , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL кеңейтулері" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Ауқым %(nth)s элементінің сенімділігі расталмаған" + +msgid "Nested arrays must have the same length." +msgstr "Бір-бірін ішіне салынған ауқымдардың ұзындықтары бірдей болу керек" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +msgid "Enter two valid values." +msgstr "" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "" + +msgid "Enter two valid date/times." +msgstr "" + +msgid "Enter two valid dates." +msgstr "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b46d6ee82f7a9aea60cfd037113e21f73414f39 GIT binary patch literal 3194 zcmcJQ?QaxC9LHAyfvTt|iqYUmQfUMCREU%-B`QKvp-`dXOWby+cT4wnkKMT*jc;f@ z^wQSY3P%reS1;O9&@(xp;3d|V{s+dFCMLeRnKRM9!0+r{uMa#}qi!8V09oz+ufY-tAz-!8WhKCl`51l$ka1Owpj zptNh-W1j7;p#1;G^@{R1_~-^tZWDL{^8+IsMJP&Rv5Ore>D9>TQbT>vaKTl!6g!;1yZ!lGP76YMhAEZcm8UrDBb0hPl>}YHn zP>lp_c6Jc=g~SpLBRy2kbd9`o^7t{o@}^5-^_-!-OgU&J42_r;BZj4VB1BV}>Q@e# zPQs>yMOB6$-66JWMkv8cuN8|Mlu=`lL~N=uYD+1TST><&6RJU&MH-t7J*KnMHG@`p zoIxFDRcE<6lNK=(u^wtW^7w@%&sX?B15A(62mE)RW!KbY>&d8P&_x{`W<0^_F;%@d zYI-lzEmO4z{YnR;F?epWXtP6f6P{3_+O|4KG=yIU*)t+O1WG%b~%!FY$$}#FNs(JZvyevl50a@UbIBJX%gPIW*^($SL!%){J-#tp` zIYvzf>2;Ko7DW2#phFOTN@BX>Ku;LH$;IZHK*H=dt)#g`Fm77|x<<7nlHF1xQ*9>g zmFm6Da+_5a2|d?KVX6Fwn%XiUzalrgl`7Y_yV{$b?XoT9R<-7|>_zFeUpXajgnH4s z^;f$Hx@=2c0lp5+cM3fOFT+GTgC@5cPSChzGhe3@(KX*&iHPItw!);L>v*^CpzL_a z`rdZSxFs0c>kEc_p?xIudU(&ioxxBr2tnToI-tulm&xt(wS-7ZOL)(ook2VeM^%UU zy5YWKsLZm%Bx*S{VMbcW{z!B%!OrOYp_bimL}IFL_;KwVzz#E#P$SgWP1RVK96^oY z=4pyD77qsk$z;;cq&V zkp4j2K!3K8-l%Fjl(oOtec0E!C?|FGQQLRO?6owv9$I^JR<|-t`mKg8BVntC@33XZ zoG>xt?$l`ywGr>NJ=oT;?C!3VJ{S4(L}ZJ+bcxTDy^E%r&4|&w$j^z%qR7mXYUTzX zP4m%dzalSoQYq!dtvT^Mv0`^Dl}bJ1u6<6aMx0)yruya%W+$_-bBU zo)fbv!f#y?xm2Zeenr1Jgx{Wn9#S1DR&JK~a2C3*z(RRm^-4zM%hgO)jD9OdbI{^f z{=t!AYGPGK@`-UG(%*=wap{qmy1)xFQfaCzu3m!1dZ_qtLCod?Fr`u&B63@$lv~xF zhYRNl)vMR5nOsc@2}<2-hHGUZBhuOXYjn+)sdW=3hKr(*k_kopGxL0QY-vt;sU#-n zh{&WxK8uWa9~DRkWQM%3^YN_Afyj&q#9}e0{8~|rOjk$BeB=_gF8i{Gj8s{@kmDDp zr4!Z9iq#A}%kmqgT`MxL5oz5=Lvqct5D*<{KVO)**E}T037?&=W+oJ#nwC)*yTHehHaDCy_Pmtk7jr0(S{0K@xePa@ z1&FLDlvnt;, 2017 +# Chr0m3 , 2015 +# 조민권 , 2016 +# minsung kang, 2015 +# Subin Choi , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: hoseung2 \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL 확장" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "배열 안의 %(nth)s 이/가 확인되지 않았습니다." + +msgid "Nested arrays must have the same length." +msgstr "네스팅된 배열은 반드시 같은 길이를 가져야 합니다." + +msgid "Map of strings to strings/nulls" +msgstr "문자열을 문자열/null 에 매핑" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\"의 값은 문자열 또는 null이 아닙니다." + +msgid "A JSON object" +msgstr "JSON 객체" + +msgid "Value must be valid JSON." +msgstr "올바른 JSON 형식이여야 합니다." + +msgid "Could not load JSON data." +msgstr "JSON 데이터를 불러오지 못했습니다." + +msgid "Input must be a JSON dictionary." +msgstr "입력은 JSON 사전이어야만 합니다." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' 값은 올바른 JSON 형식이여야 합니다." + +msgid "Enter two valid values." +msgstr "유효한 두 값을 입력하세요." + +msgid "The start of the range must not exceed the end of the range." +msgstr "범위의 시작은 끝보다 클 수 없습니다." + +msgid "Enter two whole numbers." +msgstr "두 정수를 입력하세요." + +msgid "Enter two numbers." +msgstr "두 숫자를 입력하세요." + +msgid "Enter two valid date/times." +msgstr "올바른 날짜/시각 두 개를 입력하세요." + +msgid "Enter two valid dates." +msgstr "올바른 날짜 두 개를 입력하세요." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"리스트는 %(show_value)d 아이템들을 포함하며, %(limit_value)d를 초과해서 포함" +"할 수 없습니다." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"리스트는 %(show_value)d 아이템들을 포함하며, %(limit_value)d 이상 포함해야 합" +"니다." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "일부 키가 누락되어있습니다: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "일부 알 수 없는 키가 제공되었습니다. : %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "주어진 범위가 %(limit_value)s 보다 작거나 같은지 확인하십시오." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "주어진 범위가 %(limit_value)s 보다 크거나 같은지 확인하십시오." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..275944fcff514fa1f5e830849186bd452c6a3829 GIT binary patch literal 3853 zcmds4J8T?97@k0$$2+_Q5q|%1xi7cCPIo7kStLk;p(oWL!yG7f`*QcZ+7=y79o~UBEd*=-_Gto|7-ro+^@U0 ze#tPN$9x&{C(KtcKih&IjGYfLwja0)_!zJNd=Xdyo(H}QJO{i5+ztE#_!4m2!;C!# z+zWKPCx9;i7k~tmz(c@KfL{Z@1Kt8&-kQkYzKyXltPcR61zrFWPyn;QkAYLbZ-E8i z??9*5p6!qi9gYIs`^BA!-X8(?V*Leh2Dk=13;Yx4^gFqWvDbj_0rvnu1UmY!fX*L3 z0QUiZ0lp4o8OCmJfepYl;LndRb_%aQg_9uKOgU>leReh+*V z_!|&x;sMqB1MXm89gnB*3p3fHn9kR3I2kY@9#7-<2~4QeA7IO%GJ6Jd2c|m{xQ9K7 z375yVyK`j+_m4HXABn6vNbv&&k+HNa+)8@%*5ZZpd3GvB(#u!Gie=L}@;y@8lCOC} zLLRp~&t{Z~LP561Eq0NjRI*A^&Ar}6Pp8vpeo;OIZlChyw zRRodlJr-2t`-Ytt#tJVv4wD>WjW=C<3o<+qBx`r)k zkkm!n5Zo^)kj6kx8Me8X*_0qsb){Qsh_Dgrru2k2M7iW7S{_=buM?jnR-CIYM#R+> z0ZrW(p}Y~IJae1lKy~l;#nQ88pUX{!<2rLuG<0Zl^QJ1j-07%la!a~QnS~2WxoMa1pv|3eQB32-(nPL!Bv(30 zrBeCuBzLua`3+a9N> zz%5UD$uf_!a~xY#HR4r~TM|4d)10)mh%1TeGgh;{v34IfE*j8mnVe z(j;BGM#=XgO~KJwIzdG$_lW3tg~r{cl*d$MGP@}rCGd#%(B29do}lqEy_r3h8R;aU zkoE4(pmT$46iQm|-nNpgRCONUtdgGMe&dc($AKZ$8ob%AYl^z-^^ixPj|sd8Nu;`K zdDgjOq?L6rL8YTQ8jmM=gMWZJYN#D@S1*N8h-w}#bMo8O$koUVE#;nE0^VKU44bAf zu_9hXrp{&Oa~Yuzbnf)uH-{{C-O&^f5%qf!-IYb^QrDY?gg|%`zJ{e6m9TKckn>|_ zcGtDnhP(2t*KmX{;9lEZBOFW{rOi1~i8$xG>$1C6W{aKcA@AOVlVf%px=zZVb3IQZ zgq<6XDR$sN;&u>KC68zzP6@f;a8Tn%IJoa44KCdb4?ZYS2)qBGsL``hA~~c7a$5IU z*ywrvSA<1I3agP`qHa(lJ2!A`?$uA^bu{>Z8^quf7U?wwSIDq|ENe>PYGLOaLS^b) zPg0tr3=L|qBhj8F=~ty5xwkZYm#OHAlAXhzI`$wWQbpV&6bt##mE?5P)YL#nmvyIo zUHB591j>fe0UifN4DC9T)@*DIxd&QTZmRgJkv55>h@)|!5A+MXle5fa6_LvZ_m@8Z WM74pNk_M36WiIwSIqZcEo#-zvc=Hzk literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 0000000..de56075 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,130 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Matas Dailyda , 2015-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 08:24+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " +"1 : n % 1 != 0 ? 2: 3);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL plėtiniai" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "%(nth)s elementų masyve yra nevalidžių:" + +msgid "Nested arrays must have the same length." +msgstr "Iterpti vienas į kitą masyvai turi būti vienodo ilgio." + +msgid "Map of strings to strings/nulls" +msgstr "Susietos tekstinės reikšmės su tekstinėmis reikšmėmis/nulls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" reikšmė nėra tekstinė arba null." + +msgid "A JSON object" +msgstr "JSON objektas" + +msgid "Value must be valid JSON." +msgstr "Reikšmė turi būti tinkamas JSON." + +msgid "Could not load JSON data." +msgstr "Nepavyko užkrauti JSON duomenų." + +msgid "Input must be a JSON dictionary." +msgstr "Įvestis turi būti JSON žodynas." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' reikšmė turi būti tinkamas JSON." + +msgid "Enter two valid values." +msgstr "Įveskite dvi tinkamas reikšmes." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Diapazono pradžia negali būti didesnė už diapazono pabaigą." + +msgid "Enter two whole numbers." +msgstr "Įveskite du sveikus skaičius." + +msgid "Enter two numbers." +msgstr "Įveskite du skaičius." + +msgid "Enter two valid date/times." +msgstr "Įveskite dvi tinkamas datas/laikus." + +msgid "Enter two valid dates." +msgstr "Įveskite dvi tinkamas datas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Sąrašas turi %(show_value)d elementą. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[1] "" +"Sąrašas turi %(show_value)d elementus. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[2] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[3] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas neturėtų turėti daugiau " +"elementų nei %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Sąrašas turi %(show_value)d elementą. Sąrašas turėtų turėti daugiau elementų " +"nei %(limit_value)d." +msgstr[1] "" +"Sąrašas turi %(show_value)d elementus. Sąrašas turėtų turėti daugiau " +"elementų nei %(limit_value)d." +msgstr[2] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas turėtų turėti daugiau elementų " +"nei %(limit_value)d." +msgstr[3] "" +"Sąrašas turi %(show_value)d elementų. Sąrašas turėtų turėti daugiau elementų " +"nei %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Kai kurių reikšmių nėra: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Buvo pateiktos kelios nežinomos reikšmės: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Įsitikinkite kad diapazonas yra mažesnis arba lygus %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Įsitikinkite kad diapazonas yra didesnis arba lygus %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3083dc0fcfbe6c255044aa5d02d6449cf7915eeb GIT binary patch literal 3382 zcmcIl%WoVt7&p+CHk3!p`%&?=B5guD`$(Y;+olEjpeacjnk5{IcgNZF?u=)#J+nz} z;m`x(7V!t=J0YXA>=jWNtrb$y8L9yid*`Cke`}_Rs!ChZ5 zj2AIq!~6;Jb<8gx!3SgSql^s#_W_>-7J)AV$ADA7PkRS>QLoBJek$ z)9cV4#=eK{r-2^!zdz2{es{h%=ldq`3iell9{`tu?%o~XG2mZ70v_52-GS$N_$jc2 z{pY|z;J3g(fxiIvL*9=AjJ<*VohKMO0dzuN0eC>i=L+x?u+_sA;3)P#1Kqs?a4y(n z1FH82+`+&y8wc=(nVCJ#*KRo9K;>*ai|^BzP^CYf!U`&~=P==lEG7sMdj=CO&tl`^ z%8m^VB|M15usKHAg2LEXstLD~K3$!;HdSEnWk^x2CF+)4h~mH}6sCgJ z>xBXvw<3h)$~K1$Nd-#;ajp3R`Eb8;a;6+qtFQ@)(9|Pkxl{(1Of%~CyycSwqZ9ZN zPF;L@bYMYqqPyOBShZEuRd*3~bd*S6_;*oOokYvEb^1E-d0}O>>T*QP*9A0ne}wWk z5fzxboF%F|KaxowHb-1lx~sfrv@1ntc7e^hhS1O1Ed6?YU|L7619;=UH;WR2l@;<^ zsPSmvy68mOdXuIheeeCaVZ3Top@HdZRqui;c+h$mT^7?wsXXeH-uB9;sa&qS_0I9q zNT~!u@485&kqqD$F+lw~?;U6m%XpQ;{vvS*O1=u&VT~RJCZn z5G3btLp5UF5MEXAutF2uCK8=zsA+AdQY?16-GX)eI zeDczU?d3vg-~#GVDCo4%fpHe`FLnYH=ozXvxi-R%eO$fljc(96S#v^rmsCCSvxFF} zN!wSmLP0Vx9mJXk-sMP#rb4QdZOz!pGn6mKhSXrWG&WYIqesatONYnGWjaqK0y!NX z!{R)Zu^AaYGqAbKr_0)=t2HjEl`hrRRxPzrc5TbUUX)$W&w72^x*ABhPM2GpqzKX_ zKV7!HCdO@y&UaDr4qrqwqvT%3L3XDNQHh&UC~&}v>n#QTAVwiyOqX`XXB-OqQdsoQ zBsOGl%ci%Ts$2f}LZ_<@kf86!sH7sI*4~CL_s$00IwL25<95adi@yE$ib{kL!B%BN zD_UFOEs6dQ4ID__4@nk-Bwf}S#7T6>=>1x8^xcsdUfe4XzC}N&ahif4hO@+;H z&D#d221YqAZ+;_0_BTdPufanuLu*0A+Qy|ml36yutH3s1w|+Hd^6_Bqfwy)xtBtqN@Q4z0u=1*M)SI>3VXG^-WdM|hD$Sc literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 0000000..1319c83 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,125 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# NullIsNot0 , 2017 +# NullIsNot0 , 2018 +# peterisb , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-23 16:49+0000\n" +"Last-Translator: NullIsNot0 \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL paplašinājums" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Masīva %(nth)s elements nav pareizs:" + +msgid "Nested arrays must have the same length." +msgstr "Iekļauto masīvu garumam jābūt vienādam." + +msgid "Map of strings to strings/nulls" +msgstr "Virkņu karte uz virknēm/tukšumiem" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" vērtība nav teksta rinda vai nulles simbols." + +msgid "A JSON object" +msgstr "JSON objekts" + +msgid "Value must be valid JSON." +msgstr "Vērtībai ir jābūt derīgam JSON." + +msgid "Could not load JSON data." +msgstr "Nevarēja ielādēt JSON datus." + +msgid "Input must be a JSON dictionary." +msgstr "Ieejošajiem datiem ir jābūt JSON vārdnīcai." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' vērtībai jābūt korektam JSON." + +msgid "Enter two valid values." +msgstr "Ievadi divas derīgas vērtības." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Diapazona sākums nedrīkst būt liekāks par beigām." + +msgid "Enter two whole numbers." +msgstr "Ievadiet divus veselus skaitļus." + +msgid "Enter two numbers." +msgstr "Ievadiet divus skaitļus." + +msgid "Enter two valid date/times." +msgstr "Ievadiet divus derīgus datumus/laikus." + +msgid "Enter two valid dates." +msgstr "Ievadiet divus korektus datumus." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur ne vairāk kā " +"%(limit_value)d." +msgstr[1] "" +"Saraksts satur %(show_value)d ierakstu, bet tam jāsatur ne vairāk kā " +"%(limit_value)d." +msgstr[2] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur ne vairāk kā " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur vismaz " +"%(limit_value)d." +msgstr[1] "" +"Saraksts satur %(show_value)d ierakstu, bet tam jāsatur vismaz " +"%(limit_value)d." +msgstr[2] "" +"Saraksts satur %(show_value)d ierakstus, bet tam jāsatur vismaz " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Trūka dažas atslēgas: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Tika norādītas dažas nezināmas atslēgas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Diapazona vērtībai jābūt mazākai vai vienādai ar %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Diapazona vērtībai jābūt lielākai vai vienādai ar %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2fc4c591def47fc8d8fcbd641f6b89393a7724eb GIT binary patch literal 3717 zcmd5;O^g&(5Pk}Zj(>&q@>qmLCxU$il*|donS-+iz!@?de|o^~|sr z1A~G$BZ-mtdsC0Y!op->hl?jJb|)UZX!KOcP5K05ffjg`|EzMUe#Ci zs;cMb6-z%B7%OqTfa^P4FXD3U!wusX;9B6Xz{h~g?ib=Y;7Z_OU>5iW@Lk{v;0@sO zz@LE60RIB60xn-7#IwL2;3nX1;I}{*_%(3VQmg@6K<4rrkbpOVY2Zr_2(cZwAD9Kc z4`d$G!0X`lJ#atXKU^lnlfWN=JAr=y&j2?(Bt#u}0k|5t`C%b;0f<z)yf%fH#25 zZ%ImsBfuPR3G|-?-o*QRj|g!TSbsE**AGD6_b2cma07y*fED0dz~6y8fcqX70%`=@ z)dMsHT+;(fdVs1PPvE{B7hKYV8 zRnw`+v|3O4fyxyX(1_$W+oFSmM-FGiZjI!P9G9bk*yB|ki(D@t$1`IQvdqBDh`p|= z_>zK>8Q^9s@=doW2@j)QdBTx_bSA0jOEZu@OS$CvB;To+4h0^q?Q!g~9lV_oTBJHh zDzzwG+Gfoow^AOFzGC(5sn}QeAhUs8mbY13U|Lh{n6H&QN6y(e5XdqdbAwV^k?n%0 zB-8iJNwN@Kj-j><%LNjLY=nN)a|6?M6?UnTS4*N{kqu3oa3{=i{1Z9opfOo%$Fnnr zR_4w+)qkP%Hag2*oE>i0S^pcJ|Df}*RDrbOc&j+EOJDZ%mty3q#i$CxJXMD#4VAN!RKS$_U=96OHHBXzOXUhO3IVno#V67nhP-ah!}8 z=7L_Zjt6{?E7&+-8N(<6cv&FpIBL{O9g`ED9~k|rXj{f>m7+3+yaJ^Ljtm)lxL_e` zysp!zjoY-nTAh2_RVkd9IB% z(o+h8i9$A8tJN|AE4Rnw3Eq^A-D`uBXvmhwv*}d-f&RU7fyifasXZt@>4M;&)U$MUY#FhGTTBa79#0K872kA>eV$)d z1#&0!tLp3BM)6}`59)#PIqK`9Jgr+t@oSD&<2|3Ios^>j<+r6ex^*}eoeZbLOW|zT zicUp!3a{beWY{3g;dUWx;$fP?sjv}VjbFmqq@i8FTKF4%W}K3B98Ub%(|#MygbLf!3o8I z!WS|8439|eWFLZxv_l{-BS2l>N1Z}Q7vOAE-xS-3>JXkrEx;yMMTY{NX8L?l0jD`D zFLfmpzDxg828)ltDIF4odtv{lkfxvWY1~`y!{(w-;0_GVp%WlokUQK*bYjP;gxpIy z9%o0=^_rNA`&2t|c!4_!Qie0F^J9;L=j>v=SFqmHZBREDXrBqMqMMz?Dso%r6RXl2 z(CFCAyf1wC5#-`5n@^NGU#q>F+u9W-0h8VO=d1b(R$vxVE#A(~akIl)(l*<3y2EnD zC&$Z8Q_F&at}L_<-F#-^rrh4wt&7`(E|gne6E=rxo%eSG6kr9vq>$r`N&G>@-s+K9 Tk3L}T)WiQr(hDoUi;vacRkd`j literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 0000000..0910de9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,122 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# dekomote , 2015 +# Vasil Vangelovski , 2015-2017 +# Vasil Vangelovski , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 20:42+0000\n" +"Last-Translator: Vasil Vangelovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL eкстензии" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Членот %(nth)s на низата не помина валидација: " + +msgid "Nested arrays must have the same length." +msgstr "Вгнездени низи мораат да имаат иста должина." + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Вредноста за \"%(key)s\" не е низа од знаци или ништо (null)." + +msgid "A JSON object" +msgstr "JSON објект" + +msgid "Value must be valid JSON." +msgstr "Вредноста мора да биде валиден JSON." + +msgid "Could not load JSON data." +msgstr "Не можеа да се вчитаат JSON податоци." + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' вредност мора да биде валиден JSON." + +msgid "Enter two valid values." +msgstr "Внесете две валидни вредности." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Почетокот на опсегот не смее да го надминува крајот на опсегот." + +msgid "Enter two whole numbers." +msgstr "Внесете два цели броеви." + +msgid "Enter two numbers." +msgstr "Внесете два броја." + +msgid "Enter two valid date/times." +msgstr "Внесете две валидни датуми/времиња" + +msgid "Enter two valid dates." +msgstr "Внесете два валидни датуми." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Листата соджи %(show_value)d елемент, не смее да содржи повеќе од " +"%(limit_value)d." +msgstr[1] "" +"Листата содржи %(show_value)d елементи, не треба да содржи повеќе од " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Листата содржи %(show_value)d елемент, не треба да содржи помалку од " +"%(limit_value)d." +msgstr[1] "" +"Листата содржи %(show_value)d елемент, не треба да содржи помалку од " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Некои клучеви недостигаа: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Беа дадени некои непознати клучеви: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Осигурајте се дека овој опсег во целост е помал или еднаков на " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Осигурајте се дека овој опсег во целост е поголем или еднаков на " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9c54076b9fcad83a6580fa73976da88c11e02b1 GIT binary patch literal 3755 zcmc&$+iw(A7(Xi4^^W&=I}n?;f!XagMB6PjBA28}p+ZH&3r;(yy92W`%bc@aN_^-g z1%hBgjPhc9z(7P}dRe5@(mop>%$eegFa852#`x-szi(!C+b#u4j5^7g-_DuueBbZ8 z&i=Y#)u#;CGgvQR{fzZ8*4g`T!?o^y#_E9Ufe!;yz~_MNz`eltfNujY12+Kw1U?U3 z{QzT612+OmcMI@YU>A@BZQvH*8Q@pIDd1(`2dg6cYgaSYfaiMPQ@}1D2lfFQfv14m zfD^zJ@OL2bdT9+~=fS-NScm5y*E04v@DE@M@cwm-6@hKQ3&08BE5MHR*aN!2B=Bn> z@%sgs0j^0zcD4gs@q7&U8}J+8U%(3wMslA#6vgEyU_JIC`w$q1oPm1vLO2*yhZp$)HyKoiv8K%@vEV`&BdBDLVu4cif?5U_*b`U?L3klW z>@h5aJj@N{iPhIN^qWpmG|GA&{^0qdRJ=#flWp<04(!{TWZOgJUe6KHtJn^&=vdtK z6n8u`65*Dq%p}|8%Azm0%9#o`TXNrYvx4JCua_@4LJ4PpXMJHR;ggihJ)etXMbqKR z<8=*=owwEDn9vHK!jN)k7y~_4n(;rB(4khyN+*P?o$!!;&2yXhmIlwK1pMo5c1GNlidu-&U z*K?I=yAr2l&MU>?vbYURTX5&tr3A%t(82pesS@y|LAH{2*D3!ErMJ++;R zT_1R74;ROka3#_!*#QqCN5z2T2*2QYTT0l;z&F}#j0KABQP(TEiv$b4*Kb?GS|r&` z7M1BM;!EbE&I+5AibNdm6<|tlgljDkN-{beRx0gp3avNFP1Kfj)Qp{`UL?1Z>>y2q zYSD)E7Y~9i-=h&=bXdkg^bowvaO((~+)L~i1v6#&&v#V3*n<| zZ*Jq!&-MnFZ*1r3#j^!sr-M-*oDYVAVLhj(lPr2Orze6l`aAu7FdXk( z)#DHuH*}c?BYHMCt*`5AJU9gv^lDU>=g0JPtW(eG@g&pVLhc+7M(4+Z!QdQz;`wY% zze;WdLtI}64cHtBJ`P5BFdUqN=*ju9`LT+|G7OD#Xc@v9h4E=(avHlcn%==8hy^1n zw@OBcaKui})|#!7AsXZf8IS0|;Jx#@q~{RmL6||L=Qy4Qi7@zAxF;Dri-h#l%`18m zLU3-D(cv&`rkKp&RXLZHEEoYaLXSL$sGE9-Yi!g<26p@>W{h+wr;Uucyi(n8A z%ml-=pR_oHH3g_YM>!1zLrC$YzPdEbm9Jk|DPi;~?-4?#KcfiYBr1jM;XVruH6K4c zMTH9fQTbEwx75_6g_?}Bjk;V?*|lWv$z)haRhRxl!z=QY(u&TbPW^v;UNM1-sJ|Qf zD(+=uIUWVn&ehHEtIVSY<9aHrh;nd>>5E|wCgI~CN+g^ns9+qd)*NP$zJ`SYAAy45 zu#PH&ttS18KIYVzv;5{2=q=-pRzd^ML>XuL0`w0;=?!!Z%5R2dBF&vRF*O0Fnq2fn z*Oy|VWlm?o7OsZg)14?Sr}Gvil_`uD2pNsiQ3^rW$>2(j6LP+J1^kCFwjr^Ca#;A6 zV36L$^B|n#)trDgg@;_e9-IzGxke&jpZ-f!wimh*qvK18BaNgegOk+P(G*$c+r|C{ D&*oJ< literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 0000000..9b4391b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,120 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Zorig , 2016-2017 +# Анхбаяр Анхаа , 2015 +# Баясгалан Цэвлээ , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Zorig \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL -ын өргөтгөлүүд" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Массивд байгаа %(nth)s буруу байна" + +msgid "Nested arrays must have the same length." +msgstr "Түүвэрлэсэн массив ижил урттай байх ёстой." + +msgid "Map of strings to strings/nulls" +msgstr "Тэмдэгтийг тэмдэгт/null руу заагч" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" -ийн утга тэмдэгт мөр биш эсвэл null биш байна." + +msgid "A JSON object" +msgstr "JSON объект" + +msgid "Value must be valid JSON." +msgstr "Утга заавал JSON байх ёстой" + +msgid "Could not load JSON data." +msgstr "JSON дата-г уншиж чадахгүй байна." + +msgid "Input must be a JSON dictionary." +msgstr "Оролт JSON dictionary байх ёстой." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' JSON байх ёстой." + +msgid "Enter two valid values." +msgstr "Хоёр зөв утга оруулна уу" + +msgid "The start of the range must not exceed the end of the range." +msgstr "Хүрээний эхлэл төгсгөлөөс хэтрэхгүй байх ёстой." + +msgid "Enter two whole numbers." +msgstr "Хоёр бүхэл тоон утга оруулна уу." + +msgid "Enter two numbers." +msgstr "Хоёр тоо оруулна уу." + +msgid "Enter two valid date/times." +msgstr "хоёр зөв огноо/цаг-ыг оруулна уу." + +msgid "Enter two valid dates." +msgstr "Хоёр зөв огноо оруулна уу" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Жагсаалтанд %(show_value)d зүйл байна, %(limit_value)d -ээс хэтрэхгүй байх " +"ёстой." +msgstr[1] "" +"Жагсаалтанд %(show_value)d зүйлүүд байна, %(limit_value)d -ээс хэтрэхгүй " +"байх ёстой." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Жагсаалтанд %(show_value)d зүйл байна, %(limit_value)d -ээс ихгүй байх ёстой." +msgstr[1] "" +"Жагсаалтанд %(show_value)d зүйлүүд байна, %(limit_value)d -ээс ихгүй байх " +"ёстой." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Зарим түлхүүр байхгүй байна: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Хэсэг үл мэдэгдэх түлхүүр байна: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Энэ хүрээ нь %(limit_value)s -тэй бүрэн тэнцүү буюу түүнээс бага байгаа " +"эсэхийг шалгана уу" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Энэ хүрээ нь %(limit_value)s -с их буюу тэнцүү байгаа эсэхийг шалгана уу" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3bfce1a2e212b40d2e945299da34c725fc47bd2 GIT binary patch literal 3112 zcmcImyOR_}7;g~}7N7VoQ5zJw6J{TW%DHfsfQKG%54jUUs(0tR-M;PVUZ;C@xhi7= z%gpi*Fpx5|43vbxy3o|X$lSn$z}Vk6Gq<-#aYB{FRQ3F(d%phqd;VtrJh=N?f$K$# zLm0nfypHkpBe>z(w@Zkl!2Q4{fHmODz!~5I@EY(E@Fwse@DA`5;GRc?cma4A$hxP2 zF9DZ;5~zX4fnNcC0R9ZT3B10$IDhXRAto??3-~;65h#HKoCJOeJOlg@SOfkIWV>G7 zE5tXj{S@$R%zt}Kh$n&n0CT(c3GoT$hk+jh*MR)~C*U#QuRyl*FCgpNwO@#5fQNu@ z0INVg{|fLn@C)ECz-FabzXN;|^Fs#;yUzk&!~7bM?HK^y1AYgb0{#KyxF2|2h%)2? zrjIU!LqH_I*bcZUAezUT7dbXCHNT$4{V5EXFuK?`m?)mZKnU`jAVuP741_$-4d+!H zJ328?CZkDzOy&VdZ{fuA*s?-t;-nU=OE|C!L+8htdW|wvq5R=vB`Jcu#8qLH58q|U1F8< zQ_4YwT&3Y=ytl_VuHIj#e;7)4(3!ZRdhA`b@PF+551sR>FWsv2A=S2nB66FLHJcgZ z#RB<2agh#RB(bXoT;C+UN=O>AozSg{CFcXmdim4Kl5PaD9@+I`*+Ha7>s})KBopmD z&S}CoUYsliGTXCmXvYNmsT=5+;xWk;J~5~?u)TbI(O7w}a*fc9Ho;PULpI(fR295A zFH~MXlAk{5k8oG=R#iI9t;lXy#Z@MRQO)M%SMtD8>X-qdxj4Ft7J`>e8Ly$oUF8b( zT^gc!-_db&F6;Pc#WiJRX>lbw&kYaR=p(LTIaO~=NA-83#wpooG~apuczvo~hhTJt z2AXwllRFiith3z7#_>9?%4Ow4v;z0NQNg86dC^&UX3g0Td(Jqkm8n|y0mN)4Qyq#{ zNF`0V;L;&=GzjOM>m?iC8#&Ppq2H|4hQnbsusXd;H>#kiTH(+pm{L*AwrZ1=`MLSo zE!P{>dgVOYkt|GF@58r%^w;_Z{dropyDIe*WAU8c-T*vJxK3!NyG#U1#0I zx>KfaHslWx^LQ_aOPRGG=UxwmjHpuavS9M%jaz9)uA(MDanp-p|uF=u7aFF-|b$|erR9?^qMDqrs6!GOy7c7otjhNzF5yR-a zn4Ah#Cphl1g(w#}8f}oPNNpLhd-C~%Xs7hy>fc#=0*|?99*XHZDqlo?z3zcP@xYV^ z>c&IRW;EGk{f%2p`{idCypOzh!ICN|89%0R#*ebVY;DjUV!r$+aUpS;Fo8N z#q-x$Zw+;VUxZSuh2I6o#T~{)mznILtdGOX#$!A3W@Qh2(D<d WB6`@8?}KRJciFEc+w+#47~@|Xb+Y&X literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 0000000..c154fcb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,117 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jon , 2015-2016 +# Jon , 2017-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-30 11:31+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-utvidelser" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Element %(nth)s i arrayen validerte ikke:" + +msgid "Nested arrays must have the same length." +msgstr "Nøstede arrays må ha samme lengde." + +msgid "Map of strings to strings/nulls" +msgstr "Oversikt over strenger til strenger/nulls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Verdien av \"%(key)s\" er ikke en streng eller null." + +msgid "A JSON object" +msgstr "Et JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Verdi må være gyldig JSON." + +msgid "Could not load JSON data." +msgstr "Kunne ikke laste JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "Input må være en JSON-dictionary." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s'-verdien må være gyldig JSON." + +msgid "Enter two valid values." +msgstr "Oppgi to gyldige verdier." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten på serien må ikke overstige enden av serien." + +msgid "Enter two whole numbers." +msgstr "Oppgi to heltall." + +msgid "Enter two numbers." +msgstr "Oppgi to tall." + +msgid "Enter two valid date/times." +msgstr "Oppgi to gyldige datoer og tidspunkter." + +msgid "Enter two valid dates." +msgstr "Oppgi to gyldige datoer." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listen inneholder %(show_value)d element, den bør ikke inneholde mer enn " +"%(limit_value)d." +msgstr[1] "" +"Listen inneholder %(show_value)d elementer, den bør ikke inneholde mer enn " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listen inneholder %(show_value)d element, den bør ikke inneholde færre enn " +"%(limit_value)d." +msgstr[1] "" +"Listen inneholder %(show_value)d elementer, den bør ikke inneholde færre enn " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Noen nøkler manglet: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Noen ukjente nøkler ble oppgitt: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Sørg for at denne serien er helt mindre enn eller lik %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Sørg for at denne serien er helt større enn eller lik %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9ac4f67142d3f75e29b3aae4ce9d623bb88a1ffb GIT binary patch literal 934 zcmb`DKWh|07{*tP2n#kTw9sPg62jc>9*4>8c_K+JkdV_OoLX2-Zs#@=_GXsdxm;3M zSO^JXd4ga$C&9wl2(i(R;5U%z{2D&HQDZ={$qT=I=6&~h-}&=xdTQ(-E`yt38C(Gg zC}JN>g9C5_yaCt1F}M!Cg7F2%`3{{2PcJ&oW9Ua{8+!GUgOo8< zd|OiUjOdXfayZ!JSzh_0w8Ih+k%(#TX))mc`1hAG8i$3wlc{aq({weWk1$&(8Iow5 z$ym7?JXM*d?K~C{T^zMFHM+`4bt0USwn&;NMwv(6EjFEh> z=Cd`g%KQ)(ls?(X3u}&votQIy2iCl^=BS)AE*lKo@2&Y_jltJLQ<)!~@7!~mhHD=F Gf7B1M*>zI@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 0000000..2d71b43 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,106 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "" + +msgid "Value must be valid JSON." +msgstr "" + +msgid "Could not load JSON data." +msgstr "" + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "" + +msgid "Enter two valid values." +msgstr "दुई उपयुक्त मान राख्नु होस ।" + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "" + +msgid "Enter two numbers." +msgstr "दुई अङ्क राख्नु होस ।" + +msgid "Enter two valid date/times." +msgstr "दुई उपयुक्त मिति/समय राख्नु होस ।" + +msgid "Enter two valid dates." +msgstr "दुई उपयुक्त मिति राख्नु होस ।" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e7f2dd327c127298d2e6c5ab38dec4893e9fdf37 GIT binary patch literal 3243 zcmcJROOq5u5XVadfx#!f!&ia=yF$D->)>8={PYIaz@ zfDwe@&69V+Bc42Z@W2<)t6#tf4}1duS>3xkyU4>Z=!l+QcXd|fqcXGR&%N7!P`F;k z{W|X7aleK8yT|Z@Yu7fV4uHGCr@#jIDmVk42d{ut$GFa?i*H^863U%;E-*V{||J9j8Gf%ik;i{K(i;1W0qehZ!ie+C=i-=Ns_<`YVN z58ID{@8bRTPNkj!?|^TB+jc4S2}l)tpxAi}d>gzCN*w+IMSj=rk_W+qc%KDDUmyGp z{1N;Wyjp`!@U1;codUlEUy$$MJK!zwJ@60kEV$=MrKZ6vAb~ePm>n*dzJ4Jb3RA-M z9Dd=Zf@p}f42lkz8e$~-Bfi3v_3LRo!9?{uZiFCQ*dp~TZiGDSjrgw)9hg|r*^npQ zAqo$a51pqD%Uc@LXO}LVud9y($##~x>(yyH%wjUuQ)YE3Lb3L`uI7vz7EHdUJ$_P0 zg*FKj9=bLkWb8RxrKDi(xezHswjlmys5A1G4oqZep8BhmK@YiH#?C#|T0!T?k{RY5 zE}SgCHdOiwAGqPuobU1NUxtIJo5n{yoAHK@c{3RL^_c21j&a)csWrM-t*d#@IXpMM zH|Z!f@PtVhg<6v5g)VUOU)3wIy)Huv?Jv*wx6;q0pj^LLtDjQVEVGUa1 z(OSSa2RW`kcun^x7QM%sxh>PjY)OXyW9NO=T+jouOXPf!ngm&7*B%>Ym}O3#XXiOC z_rsOD*wZVL;7m^EOc|TR_v&iVI*+`*^!YjBYo3k6_BwURLZr{Dju3vPJarCwTJTK< zCo6%W=^HyTV}gUiuB0)?W0Gyr=yl=6UQu6GRw!0U628`DSSnxG#G8cbN+yR)mGS*S z`=r}1Whqm2<+RkIxLsG5r6a5-ZOFf>5iAx~T0k@(N0(7U@UlhmGK$>RF7m(@K3Z@| z8b_ywiHq8{MYY8X?dY^rJY=KUkjB$f%@3lfX4E`R&G%bJj~||DPEA2Dy2vZ3thq_< zcr@Ll>FL(dqlc$()y`?>qc+@knfA75QQI2Bj!yc(dfxdc$#t65(Q-b7v`L0K;i%0z zZ_(_~cY8F^^M253G)ALQ-OEbp5?>SfM(N8MvTAa}WR1z%!u-PAhS$ydRP8h>kqxX_ z9iTcrcD^ylP?{&G+tY<(Kl4TVOmu8RPIN7C5zU#djYBFN>!g0&$QGHbwwMhIokeGC zkvj|w!mFE^K0)Q<%!HwRGt`_sQBzm6E@GzfCZ1dNlyDZOXuQ(B>3X_s(CpZR*QjdZ zXKnSKaKbCdSTZSQW;$j_e`Sk=xLC2s3A9D@A~_QZPWx!zR@!DP&3j2SrOSOuC5?g2 z%>{k&KI`PEi645M%U1f=h#3mK&QNyfl}OaF;nHImJIo!r_%i&sugpC@jzUQ9p4wxy z^-ap>&5EcG0q3>ocG6CkT9hI8tH5t<@YpYe41F9u0S#V)jt!8*mNC#mKbDUj4Ee1c z9wy|-w, 2016 +# Ilja Maas , 2015 +# Sander Steffann , 2015 +# Tonnes , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Tonnes \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-extensies" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Item %(nth)s in de lijst werd niet gevalideerd:" + +msgid "Nested arrays must have the same length." +msgstr "Lijsten met meerdere lagen moeten allemaal dezelfde lengte hebben." + +msgid "Map of strings to strings/nulls" +msgstr "Toewijzing van tekenreeksen naar tekenreeksen/nulwaarden" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "De waarde van '%(key)s' is geen tekenreeks of nul." + +msgid "A JSON object" +msgstr "Een JSON-object" + +msgid "Value must be valid JSON." +msgstr "De waarde moet valide JSON zijn." + +msgid "Could not load JSON data." +msgstr "Kon JSON-gegevens niet laden." + +msgid "Input must be a JSON dictionary." +msgstr "Invoer moet een JSON-bibliotheek zijn." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Waarde '%(value)s' moet geldige JSON zijn." + +msgid "Enter two valid values." +msgstr "Voer twee geldige waarden in." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" +"Het begin van het bereik mag niet groter zijn dan het einde van het bereik." + +msgid "Enter two whole numbers." +msgstr "Voer twee gehele getallen in." + +msgid "Enter two numbers." +msgstr "Voer twee getallen in." + +msgid "Enter two valid date/times." +msgstr "Voer twee geldige datums/tijden in." + +msgid "Enter two valid dates." +msgstr "Voer twee geldige datums in." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lijst bevat %(show_value)d element, maar mag niet meer dan %(limit_value)d " +"elementen bevatten." +msgstr[1] "" +"Lijst bevat %(show_value)d elementen, maar mag niet meer dan %(limit_value)d " +"elementen bevatten." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lijst bevat %(show_value)d element, maar mag niet minder dan %(limit_value)d " +"elementen bevatten." +msgstr[1] "" +"Lijst bevat %(show_value)d elementen, maar mag niet minder dan " +"%(limit_value)d elementen bevatten." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Sommige sleutels ontbreken: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Er zijn enkele onbekende sleutels opgegeven: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Zorg ervoor dat dit bereik minder dan of gelijk is aan %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Zorg ervoor dat dit bereik groter dan of gelijk is aan %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5fe9e72c00d4d665a8a1471f68a1db19fb6317e0 GIT binary patch literal 3734 zcmeHJ%a0UA7%vqN);B6@6#YORJArwvOMrm^1tCFLc7+8JV?t`WiiONjqyM{nrJ+jO-yv>FVKq@58OTI(UZTb?tQTGGQ^WsQvK_${_1;wU)8T` zSA5Jcp22(p^JmPLFh9Hx4~*6KGqxGH2KWfD415k)2ObBW0UiZj1Fi-B0el{~@&U%y z0XG00?_I!Wfm1*NO5ir&2f#0Z-vX}z&#uViuUg62D89D2`GRC;CsNmz^{O1 z;BP>u*ZNhAZGsLvfn)f7do^PZ0Y3u147>_F0sKD4wQDlH1#kn_XMm2+C%_kh-vHMG ze*$g-{tg@mt{Y*j3m+W?&H!g2#L3$MC+!BdfX?nOfR4|1Kmz^(+yVR(SO-=fWo#=@ z0l~%(sJ<}Z4zIskcmfksd!E7b}LUGSnY6$lwLwe)nxhq~?W~xc`;)Y0!V?V!?*$Nv(*~(bl;@?e{y{b2?r!5_cMHxp_w`Ui8$}>NP zGO$uBp7cxXh!rs`SGH9!Bo!gDTMo-lf80Kt;UW?geK6+a;Xe9nU+p-Z-pem zXgi*SRTrO}4lL-LNay{1qmRSVoq3vngXt}J#yZO$wJaCzMbF#toZwy3=g8PZswR?1 z&%c&cFNzF1E{qjn77mjIvBl53{1#+*EGQDHXWrHw^epM3Kei5V-DL39l}sX@{a zeM4}+pja9MIW^ek77IB+Pj!?|)e^#PqR-1vgi9!=okYtM>-2Tvv%>PV>T*QP1Ol46 zKSG5!5S5tQ>=V_kZ}id&W}~Z0x0UBcyHa#!m)L375EgRQr(fO&rV{NsK=DXeJdF~9 zl{E_6sBt}VLUeUvixZ|P!{UKn(-fz5jYg&>r;7(&!GpH=y31l3t5kOtD?5tSom8#X z#&>V4j8!TiES?bOrQ^ArZZ}mbwaWOm3dYDWZftQH=9`FHozy5k%L6Gov^RFxF6pSF zUv0)*MkO?zeb}IyJ>C?>X~E+fP3cIQ7LB&7?bgcWG)+s^ag*o7jN4Go?3srs-(BuT z<-*9sk%>c#mRC!ak%Op4p`cN}3)3v34@#8h9tv7KF~ZhQO&>1qTBLKb&WWUWNCi6d z>9DII?Shsy>P90|Q7_?9@vu%}QzO;&pQb*(2S44P`lzbctF)ggRHIR~xmwv*AEPZ> z$i42Zj~Cp#U$5+~j?sk+{zqkB6@T_q6`Rxs?4KvvSFbE?t`;19&UDA(`tHSbNCVeg z9OPwe$H4ZL!k!U!25G8?SLfcRrH2brRZ^pm)voR)JXQVJCsk3zB{tbW1g-yO$0c%4 z4`&sp0UuuCp-wq=g?g;cu}%PAf5Hian+iexZopxZB5%H1H`(b+FIbvTgf zHWWACn`XWaM0RY$J09!Z^PMT zA<0|*oj4}6$$ zhMN_5Cjo(L({0hz)X~Ft16=GEd;0Z@pXE1*>lZ)udwsvntVbuA_XzytuM@7lFYaDA L1%CMaCda^EDJ`U1 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..298982b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,136 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Dariusz Paluch , 2015 +# Janusz Harkot , 2015 +# Piotr Jakimiak , 2015 +# m_aciek , 2016-2018 +# m_aciek , 2015 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-19 00:04+0000\n" +"Last-Translator: m_aciek \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Rozszerzenia PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "%(nth)s. element w tablicy nie przeszedł walidacji:" + +msgid "Nested arrays must have the same length." +msgstr "Zagnieżdżone tablice muszą mieć tę samą długość." + +msgid "Map of strings to strings/nulls" +msgstr "Mapowanie ciągów znaków na ciągi znaków/nulle" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Wartość „%(key)s” nie jest ciągiem znaków ani nullem." + +msgid "A JSON object" +msgstr "Obiekt JSON" + +msgid "Value must be valid JSON." +msgstr "Wartość musi być poprawnym JSON-em." + +msgid "Could not load JSON data." +msgstr "Nie można załadować danych JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Wejście musi być słownikiem JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Wartość '%(value)s' musi być poprawnym JSON-em." + +msgid "Enter two valid values." +msgstr "Podaj dwie poprawne wartości." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Początek zakresu nie może przekroczyć jego końca." + +msgid "Enter two whole numbers." +msgstr "Podaj dwie liczby całkowite." + +msgid "Enter two numbers." +msgstr "Podaj dwie liczby." + +msgid "Enter two valid date/times." +msgstr "Podaj dwie poprawne daty/godziny." + +msgid "Enter two valid dates." +msgstr "Podaj dwie poprawne daty." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista zawiera %(show_value)d element, a nie powinna zawierać więcej niż " +"%(limit_value)d." +msgstr[1] "" +"Lista zawiera %(show_value)d elementów, a nie powinna zawierać więcej niż " +"%(limit_value)d." +msgstr[2] "" +"Lista zawiera %(show_value)d elementów, a nie powinna zawierać więcej niż " +"%(limit_value)d." +msgstr[3] "" +"Lista zawiera %(show_value)d elementów, a nie powinna zawierać więcej niż " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista zawiera %(show_value)d element, a powinna zawierać nie mniej niż " +"%(limit_value)d." +msgstr[1] "" +"Lista zawiera %(show_value)d elementów, a powinna zawierać nie mniej niż " +"%(limit_value)d." +msgstr[2] "" +"Lista zawiera %(show_value)d elementów, a powinna zawierać nie mniej niż " +"%(limit_value)d." +msgstr[3] "" +"Lista zawiera %(show_value)d elementów, a powinna zawierać nie mniej niż " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Brak części kluczy: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Podano nieznane klucze: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Upewnij się, że ten zakres jest w całości mniejszy lub równy %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Upewnij się, że ten zakres jest w całości większy lub równy %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..14b4220365c2f9dae3a3fcc81fdd6d457c45ba7e GIT binary patch literal 3136 zcmcJR%a0UA9LGxqf$@!s7!`k@WOsy~$4X=wSmU}bW|e&i3m!OV?euSE8oH~RuId?< zt0pGKqh3vj35p2^4#q^i&Dk4g{{v0*q&L4+Ju^E?K=9Q`&!@Y(>Q}#a%}+bGd?s)` zh5K3DH*i0X`;&X{gKPV}LhJ{3fDeIH@M&-cTms((-v+OMJHg+;XTYuZ39$>@3p&}; z;BIgQBrpOGf**rlf!~5x!1uQl`)}JS#3bG)z$d{KkiZsL20sFif!Dz*_zURt+H=1U zpF;O(@Fl$exJ`&hz~4dlzJ0q8bKuJZ_CTlC_uz}*4R8} zz|X-iL8tfeQlan9pxbBH1BE`b;3VG9f``Em!9(B=U=92gd=A|Apb${oUr>E?!5soq z{Ph@qVWz-T?`t>s1a7G6edOZfY=sJ=>tQ@WMe#UpxWHcsk$4n0T<&Az;v^>aPj+RT zbJ5=G!fXy{enWdmSC~#vThQ&F#pivhZUVHEpDo%+@Pn!Eyr2 zmF<)bMGBTM$t;uW6vF+^$zD0A)*x{rLTs8^Ss5vVRi>kR19ycKLDE6|5=LEs2J;|; zTHG5te6y3o%AIAJ|3m0)WG1>uA9YhQ{2M+0Lgu1ONw>(@EK+S`ksdx)RUXGiEU~d1 z7V$7e6g#r(5}e7%gehj#ww;Pt(Z(XLPrY-3_@ZTH5MCorX-qlK>xSTdrX(^3`!ryi z8!QhdkIUJk0>UOj;vrb>PeNkDySY49v#U?{j_k~rsX;MYF#XeKr z_&&dT+3a&=>6XfY(XJMq*%fidb%asU`urO-f|X3W77#3i!5P#LtZYzt4n?j@Cpp!b z4Hiv13WL}4wh2~sgGwvQtHGSBc+3sn@M%0%s~-+(^`L%)>aR2o9XU{|*J_v;oaAog zWRB0PPhl$6YK^Jdff}yT32AJw3iC}Ytlq16zWfoncV=8fct)0jyuAt|i zPA7vVuKfqG)c*qAK}VEoWBS*+98(kBhubnEZP3+2{1#`xn-Y3kNf(eBC<{q#nMmqi zMb(6oIF2$Z! zR69Dub78-{&7@m@cEY`1dAR6GTV*MEZv+{ymxK@~C}8MLRzYn|+FW9=^DCuZ@^BWb(DZ`y8i1 z|7-79_b0)*)FhfLa$a>%Nb|nS_rF1MK<1$R8}xrM8@KZWIfvr!;wwtUg%mMr$=J%V zmX6w%7}c5LW)xzD+`KYmgSdB!k7MhWk!<~INGGItQG^@ra1~#ap(|4yXPi?jN-Cos e0cAH10KX0u41GsuK<>@}7&vSyqa+@0B;rq}#Jj@) literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..71c3ccf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,117 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claudio Fernandes , 2015 +# jorgecarleitao , 2015 +# Nuno Mariz , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-12-01 00:20+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensões de PostgresSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Item %(nth)s na lista não validou:" + +msgid "Nested arrays must have the same length." +msgstr "As sub-listas têm de ter o mesmo tamanho." + +msgid "Map of strings to strings/nulls" +msgstr "Mapeamento de strings para strings/nulos" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "O valor de \"%(key)s\" não é uma string ou nulo." + +msgid "A JSON object" +msgstr "Um objecto JSON" + +msgid "Value must be valid JSON." +msgstr "O valor deve ser JSON válido" + +msgid "Could not load JSON data." +msgstr "Não foi possível carregar os dados JSON." + +msgid "Input must be a JSON dictionary." +msgstr "A entrada deve ser um dicionário JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "O valor '%(value)s' deve ser JSON válido." + +msgid "Enter two valid values." +msgstr "Introduza dois valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "O início da gama não pode ser maior que o seu fim." + +msgid "Enter two whole numbers." +msgstr "Introduza dois números inteiros." + +msgid "Enter two numbers." +msgstr "Introduza dois números." + +msgid "Enter two valid date/times." +msgstr "Introduza duas datas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Introduza duas datas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém %(show_value)d item, não pode conter mais do que " +"%(limit_value)d." +msgstr[1] "" +"A lista contém %(show_value)d itens, não pode conter mais do que " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém %(show_value)d item, tem de conter pelo menos %(limit_value)d." +msgstr[1] "" +"A lista contém %(show_value)d itens, tem de conter pelo menos " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Algumas chaves estão em falta: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Foram fornecidas algumas chaves desconhecidas: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Garanta que esta gama é toda ela menor ou igual a %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Garanta que esta gama é toda ela maior ou igual a %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4c6fe387c0fb0a6e4217ab31a1a873a0365b0027 GIT binary patch literal 3190 zcmcJR%a0UA9LGxqgz<$azLg)Cg`GgpVkx~qn&>KT^1 z9*kEL4_=4~kr<;f(SsKc^DlVzN@C*0vj@LbJu~}aaSgGPo=lY+`r*Ig!}VH@Pljbql}G#`@pBbGWaq$4K9KofggZ(zysi4;H%*7#~6D7JPdl- zli*9>GDx5VkAt6q-+(`ZcfhN=^8NShW^5eqN5O;O5=fu`i{Pi=Y48WI4E_mvyk8u#*Tr9z&iLocpm%;d>*_99tQsgz5Z|PgDkKHdb@lK9sx7( zDEKA#E%+;V7rb7`zaM;pu`1pt!B@a*U=jQTJOzFaPJ#Ep3i#%e`Mz}!YKIG|k1m*l zVQRRZ#V?M@Fg4iP4|>}`<#0WR-)C?`mC@zT4i&>0VT#}rxQOk?4U-4oc)zk^W8+<( zWTI$~QFx#7H6Qv14>s#v)!fv+j3v+&HhV-#$;QkgGmM#Lb3)rv8gi@rFqy<`;)R z_2Wmv?nQgVXQf}t2Z#2l=#O1uSA0Pj#cT+_K^<5&+E;*RK8~&+g>cFm#n+JIx^Pi+ zv~kgbZOJ&A$yzq5>lzi7m+H~1Pk79Y-t$pR6P4;@R5=+{Pf@j6d+VL!m5E9P6Qhfw zE4|DO^WKgoPEvKUR;?bd;3{0;)+xmBK7?RVe7Y+QGpcVx!ziki1jWXmewQo4#B> z7fr6s^V>CriRM&8$01lISEL(hU8As9VL8bRPoi_$q_#$?6JG7~#1!R^)8mTHP_;N! z*ihhOf#9_$1zDOGqHg~-io7nd%V{X?$N*pP*<$}|R1Gbuqpj_K*A)phP?SWA8&vvO z+d(|c3gcu`-pE7*3j*Xb24xI|6>+1fe|K2>I5>AA@jLhf3?Li3q0RMS=ZRrJ@#cmYmw@~N?{s0dlbUR&xa+_o$T6U;v z&~3~4|C>y-1H_6iw0S@1aKz5wWzZ28f;ZrD)EL#~u@51bBSmf_stJD`QXL}R;BSO- z$gH{05Bfi0O^~=$l$tzoT*auKqeii5W-Khads{T5SD=aL z#VT!-AJ8ZWqjd-;, 2016 +# Carlos Leite , 2016 +# Claudemiro Alves Feitosa Neto , 2015 +# Fábio C. Barrionuevo da Luz , 2015 +# Lucas Infante , 2015 +# Luiz Boaretto , 2017 +# Marcelo Moro Brondani , 2018 +# Rafael Ribeiro , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-06-25 18:11+0000\n" +"Last-Translator: Marcelo Moro Brondani \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Extensões para PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "O item %(nth)s na matriz não validou:" + +msgid "Nested arrays must have the same length." +msgstr "Matrizes aninhadas devem ter o mesmo comprimento." + +msgid "Map of strings to strings/nulls" +msgstr "Mapa de strings para strings/nulls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "O valor de \"%(key)s\" não é uma string ou null." + +msgid "A JSON object" +msgstr "Um objeto JSON" + +msgid "Value must be valid JSON." +msgstr "O valor deve ser um JSON válido." + +msgid "Could not load JSON data." +msgstr "Não foi possível carregar dados JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Input deve ser um dicionário JSON" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' deve ser um JSON válido." + +msgid "Enter two valid values." +msgstr "Insira dois valores válidos." + +msgid "The start of the range must not exceed the end of the range." +msgstr "O inicio do intervalo não deve exceder o fim do intervalo." + +msgid "Enter two whole numbers." +msgstr "Insira dois números cheios." + +msgid "Enter two numbers." +msgstr "Insira dois números" + +msgid "Enter two valid date/times." +msgstr "Insira duas datas/horas válidas." + +msgid "Enter two valid dates." +msgstr "Insira duas datas válidas." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém um item %(show_value)d, não deveria conter mais que " +"%(limit_value)d." +msgstr[1] "" +"A lista contém itens %(show_value)d, não deveria conter mais que " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"A lista contém um item %(show_value)d, deveria conter não menos que " +"%(limit_value)d." +msgstr[1] "" +"A lista contém %(show_value)d itens, deveria conter não menos que " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Algumas chaves estavam faltando: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Algumas chaves desconhecidas foram fornecidos: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Certifique-se que o intervalo é completamente menor que %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Certifique-se que este intervalo é completamente maior ou igual a " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b3944148dc01e7d7badcdcbf3e0a02ba22cc7de GIT binary patch literal 3454 zcmd^=&yN&E6vs;igz-22K>Yb2*=0uP`LU=hg9BM`Nmkiqg$0hJrn`2gpu1|UA3Ln! zpxMNOG2T27qX!Sfi^hZTA7Br}vu7{HqaNfR@LS!pv$HEG(cr~Sx!JXjm;Pc?t2N-(> z+ye&Pli;)9JV>Af_k$mSUxD9)*TIWhiuJc`WvqN#z&1Dm zegIa%@4yn)`5D{-{#Ih_D8_F+gtftmhYP)zz@X=S@BsKZ82t7F*aCOMspH@U5Nh%Z zrVlT;gF$6}J%J~-$uKqdbr=k`!}R=m63@qQ!<69__6`%-Q@G)Z{7i5}>~Y+1d44wG zT-m;{@)A$IsMvj!zfk6_qqYcNGNHH5o}R0+shp(SmqhH?3GLH_ly;PAUWib_9j~%! zWxWyPy4>L*Eg7ylg76aStd|NW(q-xx!JRNcN|81s-t{~sr)jL5%1pY81B32TT`H`- zD_!}TeND<|ZDDLszcy6t6?+ghCo^$}f43RVP2Diw@9I>nuQ8)~-VJ@q3qK|@c2X;D zmaA;Wi3~eeu3NDr6?P(s8^f0=f%}7#bK_uIlbw<{npi8xrLvf0yShK{Rzebr4&X@` z4d*kEg9=&{{WX7Y^l?)Cd!6=PD7}NuOc&9kHpRlfvGXr<&hj4VMY7IF)j<&Hwbz>R zX=>S=uude!aoFMzyL>6cw;;^rAOTya8KoUUbOHAF6pWlM0s zpiEkeb(+{)7_1Bgyt=G(UyTU%j9!w7NJb)Ekpg{k5oZh#HONtB3d3 zC+c+wMrXv53_3T>;2!o_9pF zAb8fKGdkl+LZIAruGg&9`u%>@h52$(T&bci)ruXgAsx)G8C|QCW@l!n*Z10})=MXl ze?q~Afoc*s#nIx%W4l;sT`YV zHY$}PrEregNK~WIBJYf7dx>aTU7PqAU;Xf)EYASU4ltS`^Y2n7I9TZl|xWtWQu-udApzgCb$h%$}Zmc(!k8kv+~}j^Sn%%|8HRhdXHi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 0000000..b858875 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,129 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bogdan Mateescu, 2018 +# Razvan Stefanescu , 2015,2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 06:23+0000\n" +"Last-Translator: Bogdan Mateescu\n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "PostgreSQL extensions" +msgstr "Extensiile PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Elementul %(nth)s din mulțime nu s-a validat:" + +msgid "Nested arrays must have the same length." +msgstr "Vectorii imbricați trebuie să aibă aceeași lungime." + +msgid "Map of strings to strings/nulls" +msgstr "Asociere de șiruri de caractere cu șiruri de caractere/null." + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Valoarea lui \"%(key)s\" nu este un șir de caractere sau null." + +msgid "A JSON object" +msgstr "Un obiect JSON" + +msgid "Value must be valid JSON." +msgstr "Valoarea trebuie să fie validă JSON." + +msgid "Could not load JSON data." +msgstr "Nu am putut încărca datele JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Intrarea trebuie să fie un dicționar JSON valid." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Valorile '%(value)s' trebuie să fie valide JSON." + +msgid "Enter two valid values." +msgstr "Introdu două valori valide." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" +"Începutul intervalului nu trebuie să depășească sfârșitul intervalului." + +msgid "Enter two whole numbers." +msgstr "Introdu două numere întregi." + +msgid "Enter two numbers." +msgstr "Introdu două numere." + +msgid "Enter two valid date/times." +msgstr "Introdu două date / ore valide." + +msgid "Enter two valid dates." +msgstr "Introdu două date valide." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai mult de " +"%(limit_value)d." +msgstr[1] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai mult de " +"%(limit_value)d." +msgstr[2] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai mult de " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai puțin de " +"%(limit_value)d." +msgstr[1] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai puțin de " +"%(limit_value)d." +msgstr[2] "" +"Lista conține %(show_value)d, nu ar trebui să conțină mai puțin de " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Unele chei lipsesc: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Au fost furnizate chei necunoscute: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Asigură-te că intervalul este în întregime mai mic sau egal cu " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Asigură-te că intervalul este în întregime mai mare sau egal cu " +"%(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c2600d2da7f8ddfc6f5c7b4bcea6c502023d8ec7 GIT binary patch literal 5119 zcmeHK+iw(A7(XZ|tl|Z)L=6X$LN|2wQcEaHw0=TKcK(w%x?F>auI??<0P}cnK|dXf9LzY z{dwKW&ls-PaKDNBC)^uwPp-fZuGLR4)&N`sTnmf>*8`KlgTP+k`@rkKb->?&Zva<4 z$=IvFjX>hv3Va>d1>`^txD|K-_ziFtcpZ3bWg!2lRg5*_eKYVC;2|If3Sby`7T5;N z0i(d*fTY)3PchaE9kv6z@qT~BBzb`admcAbUA~|egNf{A+)v}C zm_S|j0&cim#)jg`wlp*jsk$q|_7*N5c*eCI-Y4iyOY!}O4;_rKcO`PO@3`o9*dEi> zQ`|5euA6GGg{M?Ujj+9j?OK96gQ|lc&E}SBqy@)AznRJE!V&riPg_EDghjgyZdzP? z(<7?y^?rvsAU} z`|zNti?WOkBkMZLK2-xhrnG)XGY!=miLeewWMH}B42Es48L&if)w0wPo`USu7Ob#emTBUe2V+Pf)9w{lE15coQm9^r~NpX-i2qz z46?_l$%RMJ^Bz1q)hss$xb0Y)kwy}krN^k@>blJi3fmE>ARKlO#6fk4@>_6Q%?Pdw zBkc@ESeI!#NbAEN9N^-lBMckSwb@}4TTX}(o5THrXEfV}oCIv6kKy75*EnIA!$!r% ztYr>qDUqt!*+UW?)pAH*5+58ac~&V$#L0dEO=(3Ksj5v8M#M5v>H8)rJ#25HQ%R(1 z(P%n~WOjrdp@OiSvoigPb)d^KsRAe+Ddh-`5Ufn_)N!0~Gt@1zrsXJ|c3Mj*yWO;{ z^q2`A>N?b;?4bjXy~=x(#k@HdZ&hO3l=yZYk0)AoY>hR?V%Vs3iy@78R_)uaG|PRl zmaQ>dp#!SzC_OOW)>X%}65PA&EqXKFf5QuB5mcgfa52)ZnifirP%{bM?IJX&Mva4xlTAdU!^6W7hh%62;v`W-11n3Q7s;cR z8x4m#J39B4{SlAELVIvVg#kTBvM|^|PDHah4((3fKd4%^aFQSP>{D9H`$*P+u#~+< zznPLr(%Ppv%W5XL<%YU+*HU$5pJ`?61UIts)lRnT{m4lg*{2wqy%EN{U!pyqTXm6_B*YTf!iT7fF)I7%jSvEUIEdY#ZrNLH~a~I%%9{4972d7 zQdGyhyg%VB$ploednv-GC(+{#|3a{Zc~`;M9|yY}*cJRy;xdPqo8U8!r+LXZAf!!s z$#o{eysx|)U~-Fgcr!%U#Qk%4E^z-Mfj`D+6*RYT&p~Xy396Fb{-l2%aU13k16qT6-3z2N(EM(agY20@* zQi1=+;OU^PBOp1X)+iiBo<&TH&MWxmLAV%LLY!vct_6QQ!Mtn8H!5NUZ$Y{edeGu5 zB`O$KwSNC%rC20D0lO)2aFFC_!ty*FK`1c>DU{ol6l4Siu8yIBu9XRO#{}^Rs(QJ9 zld|yA|LQ)jRCrj=%Cl6Jx>S{BPJ$UlmAG{{_UDRLcad@b-gSLash1s zy&YANN;6Fwm>?^vby;6!TJl? zkj|qk&{@G?=1=kRpBOn$$tjEmpwloI{i, 2016 +# eXtractor , 2015 +# Kirill Gagarski , 2015 +# Вася Аникин , 2017 +# Алексей Борискин , 2015-2018 +# Дмитрий Шатера , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-27 11:04+0000\n" +"Last-Translator: Алексей Борискин \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Расширения PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Элемент %(nth)s массива не прошёл проверку:" + +msgid "Nested arrays must have the same length." +msgstr "Вложенные массивы должны иметь одинаковую длину." + +msgid "Map of strings to strings/nulls" +msgstr "" +"Ассоциативный массив со строковыми ключами и строковыми или отсутствующими " +"значениями." + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Значение \"%(key)s\" не является строкой или отсутствующим значением." + +msgid "A JSON object" +msgstr "JSON-объект" + +msgid "Value must be valid JSON." +msgstr "Значение должно быть корректным JSON-ом." + +msgid "Could not load JSON data." +msgstr "Не удалось загрузить JSON-данные." + +msgid "Input must be a JSON dictionary." +msgstr "Значение должно быть JSON-словарём." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Значение '%(value)s' должно быть корректным JSON-ом." + +msgid "Enter two valid values." +msgstr "Введите два правильных значения." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Начало диапазона не может превышать его предел." + +msgid "Enter two whole numbers." +msgstr "Введите два целых числа." + +msgid "Enter two numbers." +msgstr "Введите два числа." + +msgid "Enter two valid date/times." +msgstr "Введите две правильные даты со временем." + +msgid "Enter two valid dates." +msgstr "Введите две правильные даты." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Список содержит %(show_value)d элемент, однако количество элементов не " +"должно превышать %(limit_value)d." +msgstr[1] "" +"Список содержит %(show_value)d элемента, однако количество элементов не " +"должно превышать %(limit_value)d." +msgstr[2] "" +"Список содержит %(show_value)d элементов, однако количество элементов не " +"должно превышать %(limit_value)d." +msgstr[3] "" +"Список содержит %(show_value)d элементов, однако количество элементов не " +"должно превышать %(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Список содержит %(show_value)d элемент, однако количество элементов должно " +"быть не меньше %(limit_value)d." +msgstr[1] "" +"Список содержит %(show_value)d элемента, однако количество элементов должно " +"быть не меньше %(limit_value)d." +msgstr[2] "" +"Список содержит %(show_value)d элементов, однако количество элементов должно " +"быть не меньше %(limit_value)d." +msgstr[3] "" +"Список содержит %(show_value)d элементов, однако количество элементов должно " +"быть не меньше %(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Некоторые ключи пропущены: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" +"Некоторые из предоставленных ключей не входят в список известных ключей: " +"%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Убедитесь, что все значения, принадлежащие этому интервалу, меньше или равны " +"%(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Убедитесь, что этот диапазон, больше или равен %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c311668a7284362b0421952fce411ce61fa09e7b GIT binary patch literal 3630 zcmeH}&u<$=6vqc>OKX0YmfwiiLeiMlzd|9YTNh|))j)pHq(SsjjlC0l_^V5)y|>2P7XmyW+&w;Zbfi8Fy{2crS{2sgkUfGqbzh^gNBX}PM4}vowfdWi}*T7TYw_pzZ z6|{D}yoa%$Vfz?3hWCSe8G8hr0$&F|1}}i0g6F|I-~sT!KE@7%Y0$=DvP&0y0q@s9 zYws#J1l|D^*7+T*gB2|D8peNkG?DuQw0;wUHVlq~Bj6Qq0{jfL_WcOH3Z@=s3~J&F zrf*&dM{K_xcnUY%WKbQ)8i->97vk$_JfFawN?zk9)H0YD`}i(KjiGt*i2ZcI|;B~dZ#tO`Acq%!0wo`{gc4bQT3 zQip*cQ{x5?S5v@cRSxlnWr zPr|6(pROEK(4uJd;yoB+C;Rt0_5Dz~gHB&1*(0~*!auR|E;^@pgVZ8v6S%U9BvQSf zIT?DMX466&;UwFklTEDgrp<3bn)`x0A*-gAWwS~fr1ji~lO(PhAvJbavpEHkx@c=c z_yzf{)>x+q-|S$zD-g=MR4uthuo0-H>j-Cy72#{Sq*trWab6;i!|q{Ca=>-&6q|pmut0JS!1=ii{h%CkW2jO!RyY> z>3S}mnwpq8*Y~`T&8N=kRw6aLLo|^T-fP0zqD)4oYWFvmnrQ;_l`B@r4flz@;CCbzAFiHEXKyTv> z;@du*F41TrbgD$hAyn8DI%Ma+O`}D6BYiT(E+_{H!D;K6fDDV)sNCMTPED-NjZ{7@ z!mw!7h;CNQ;8>`e_=QDZIeZBf(r$!FuhX0)Qp4ea>!J7Z&Pudq_{R0@=5m2r*1Q(l zgzGI;5ni-P&FJgS%Eqe8iF=}~2xTELJlMj}e0z59sK^)c9@JdsFda@gsBmi~5-iL5 zgFJCRx=9Xv5B+wov%)nx_+3P{eiWPYYjKEc`z8`t@AMK#fCdM_e3 zeQ9!%ElB*kkSH>wI(iD)jeXk8wvC0?qjhpR>!_b_;6O)L*;tL%FxBO3+C`^R0hH7` zx1;sW3JSLt-752?Xno6ZeFiJgGWv;KPKsp|p#3Y*ow7ynGWwy5bF8ysJ6qBiV0X78 zN}+xDRE}=h_S@cAO}ZE=u&!`?H2YKfO;GoiL7(oQ^)@u9`6N05X(e5, 2017-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-09-05 17:06+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " +">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL rozšírenia" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "%(nth)s. položka poľa je neplatná:" + +msgid "Nested arrays must have the same length." +msgstr "Vnorené polia musia mať rovnakú dĺžku." + +msgid "Map of strings to strings/nulls" +msgstr "Mapovanie reťazcov na reťazce/NULL" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Hodnota s kľúčom \"%(key)s\" nie je reťazec ani NULL." + +msgid "A JSON object" +msgstr "Objekt JSON" + +msgid "Value must be valid JSON." +msgstr "Musí byť v platnom formáte JSON." + +msgid "Could not load JSON data." +msgstr "Údaje typu JSON sa nepodarilo načítať." + +msgid "Input must be a JSON dictionary." +msgstr "Vstup musí byť slovník vo formáte JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Hodnota '%(value)s' musí byť v platnom formáte JSON." + +msgid "Enter two valid values." +msgstr "Zadajte dve platné hodnoty." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Začiatočná hodnota rozsahu nesmie býť vyššia ako koncová hodnota." + +msgid "Enter two whole numbers." +msgstr "Zadajte dve celé čísla." + +msgid "Enter two numbers." +msgstr "Zadajte dve čísla." + +msgid "Enter two valid date/times." +msgstr "Zadajte dva platné dátumy/časy." + +msgid "Enter two valid dates." +msgstr "Zadajte dva platné dátumy." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." +msgstr[1] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." +msgstr[2] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." +msgstr[3] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať viac ako " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." +msgstr[1] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." +msgstr[2] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." +msgstr[3] "" +"Zoznam obsahuje %(show_value)d položku, ale nemal by obsahovať menej ako " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Niektoré kľúče chýbajú: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Boli zadané neznáme kľúče: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Hodnota rozsahu musí byť celá menšia alebo rovná %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Hodnota rozsahu musí byť celá väčšia alebo rovná %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca0e57e92a29680107c7c2b97a1b15e9e0181024 GIT binary patch literal 3524 zcmcJR%WoS+9LE>v(@-Ae{Sf?Gh#IR|Ka!}VPE!h@tpZJInh+#7z{EST$2&V?c4qA+ zst`9MM7VL}P!1J0goMP6Q+ndc86o}vg!l{i&h9$4OZt!+RvLeHW@mo$o8SB%{{85_ zZ#+EDqP>Ln8`>*qUp;^yJcl0iyfN@Fcmyni&x3Q|68Hi5E_eex3jPDW2=0H#^PT~Z zfll@e_#9XV2^8Q2_$Bx~_%nC|{A6FY|H1v9H;(=Z@M*9P61WZ)!7sow;E!M#{0nq? zy?g*?fbKJ(kN%NEp7$^~3p#lh!LwioJO};&I{ANtPR@bDnH^4n&JN4q3!nkVz^}oR z;7{N@_W1++2z(8jIQxD6NVe~{pgaGs;H%)D;1qZOMw|z0pd0@TJO+LTLQMKV^_>Ui zNcDFEPoUwL9z>nCNAUs`y(iHQ=7YE*?{PGkJiQyIr*~p( zyvt<5i{=ESFBB!l(i(R?5zsr!mzPT3n<+`JwRyvO^E#0MDQ!t=mQA66SyuASE0e^W zY>Qd^2tzSbO-^`e=%^#P<#L0XF=v*?Zk8e)6aO?}lB}k&aVa8UKh71pM{$xHb5F9; zJ$sr|60PyrIPv|V?5sEgFIy4u+kD$)I8}9Iyw}o_5B6A4oy6|glx21dM8gWLSiDj4 z7A%i&a%EdZLqg#soLC&Q4GLg>XXI2ls8%EIlEB?Gw6aVngH@)bd%3v+5|A{3U&5%n zpnM)=&^qt+4L)k*pmcYc=Km0S8<~;L+(+Hw4ELkw9b_)D4(W9=HWsQ0FVg+jvPz^h z-V!&K2ibj?>=s+B>l~buVG$?ERnxXgUR@gtzg~Xt67j2+D}(Db-m=D&kZ%}*`8h?x z80=HS+1y|;pOC0f>7E*z*ok#l1Uwj;x#D)TEVfQxw|y2_X|Osc;a3|Rnz}Ds1tXJ6 zo?D!HsvAF^?p`#Rx{=-B#;rYQpdt)yxE6 zCi+)+S2&p?^G^GdQ#4trO;4Vz;3-^U#`-HbzLCu8xJLC@MEd401cd@6LORoN1DmC8 z)<4&bn2;qTptD%3nh9%ie}%KCM$1xnxe`c2<1K4DwQ{-F>y@mNE!O!}x2Bw(t`C_D zC>vQW78Vy4&kyWSEmaEhh)u4b-$n=VYT*mzjzqA|QlrIU!|mMrD;NBk!92IuI*TVhzVGL<}0+oW+vRr8k9LFyX5mcYWdR0^I+nn-t&)NvP0ZPCL0wNq=3+7HS1p5(E;76@-~w%9uj zb$72N{#PFUKfwQCN$1wLc;bCnaxcX0V$Z!0yPH+-BDWrMBSpx%41T-GyNEHzwCs8p z72gbymvh$^sS~s{WiqoA5on1-qx4AWjoIeS>mnAm%Tc;R6q{I3DBH>Q7K9*8gshF4 zv{QbUkk+z|w98|-wf-V#pcpjB7Z0uZkRj1oL}{MB*ig83^dR8V{h$r$fI_Vr$S7I9 f!{6kcggdCk*b4?o(^y`E`$>6_4f^4oC*pqrQV~6; literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 0000000..baaaad4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,130 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Primož Verdnik , 2017 +# zejn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-23 20:42+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL razširitve" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Element št. %(nth)s v seznamu ni veljaven:" + +msgid "Nested arrays must have the same length." +msgstr "Gnezdeni seznami morajo imeti enako dolžino." + +msgid "Map of strings to strings/nulls" +msgstr "Preslikava nizev v nize/null" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Vrednost \"%(key)s\" ni niz ali null." + +msgid "A JSON object" +msgstr "JSON objekt" + +msgid "Value must be valid JSON." +msgstr "Vrednost mora biti veljaven JSON." + +msgid "Could not load JSON data." +msgstr "Ni bilo mogoče naložiti JSON podatkov." + +msgid "Input must be a JSON dictionary." +msgstr "Vhodni podatek mora biti JSON objekt." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Vrednost '%(value)s' mora biti veljaven JSON." + +msgid "Enter two valid values." +msgstr "Vnesite dve veljavni vrednosti." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Začetek območja mora biti po vrednosti manjši od konca območja." + +msgid "Enter two whole numbers." +msgstr "Vnesite dve celi števili." + +msgid "Enter two numbers." +msgstr "Vnesite dve števili." + +msgid "Enter two valid date/times." +msgstr "Vnesite dva veljavna datuma oz. točki v času." + +msgid "Enter two valid dates." +msgstr "Vnesite dva veljavna datuma." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Seznam vsebuje %(show_value)d element, moral pa bi jih imeti največ " +"%(limit_value)d." +msgstr[1] "" +"Seznam vsebuje %(show_value)d elementa, moral pa bi jih imeti največ " +"%(limit_value)d." +msgstr[2] "" +"Seznam vsebuje %(show_value)d elemente, moral pa bi jih imeti največ " +"%(limit_value)d." +msgstr[3] "" +"Seznam vsebuje %(show_value)d elementov, moral pa bi jih imeti največ " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Seznam vsebuje %(show_value)d element, moral pa bi jih najmanj " +"%(limit_value)d." +msgstr[1] "" +"Seznam vsebuje %(show_value)d elementa, moral pa bi jih najmanj " +"%(limit_value)d." +msgstr[2] "" +"Seznam vsebuje %(show_value)d elemente, moral pa bi jih najmanj " +"%(limit_value)d." +msgstr[3] "" +"Seznam vsebuje %(show_value)d elementov, moral pa bi jih najmanj " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Nekateri ključi manjkajo: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Navedeni so bili nekateri neznani ključi: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Poskrbite, da bo to območje manj ali enako kot %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Poskrbite, da bo to območje večje ali enako %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e3bb00e5aad770f159e7b241eb954bf2f1c9bf62 GIT binary patch literal 3192 zcmcJROK%)S5XYO4gk*Uqya}Qb2(fWycWpp+HZhQdM6rn<#Ks5?MD3mSZtu=?kGp%k z@c{{h!~t>P01{syL^48f;l{~V#EAoJ2wyY34UGU0q#OT~#xG z9@_gA!|^1}BRGG<`8>`q?!g7efjx{J2M>Y|f)(&-a1xva-vi$UuY-rcf52zKefKi< z1b7tmx+lP=zD)4lwotco_8dj)RxLPr--5U%;c_AE3AYU(mYKks{R8vGp`0bhKe&^r&p z>~O&J{(*2Xh=$`)T;V2zXo$6c>0<*^!{OKSzQC0J@euA{B6|!cLJ{@^TNGk~kcYkT z`^runA6nx{E{5$13OAJI*3q)?Pco+Ig}K=>I~z!Pxh3k3o!5C1lhTe7%?lBVx#MMa zLD}30a!u}Vk(LZs4MDi6>oiM*6UjO?jNncfFQrHu6012+$Z0x0l*m-Nt6hWcP+cOd zy(3*=&5kCOr^~`vufF%H@D)CYij%3>W$Y%egQ?rzcbYm8gEgj9mb-pTc@f80)}7Rf zoAolAaw3K2$~A{ANd->?abx&8#R$I-axf02)!1c;t*L9}xKtLCY*Tl-(TYhz(Menh zZ~gvs<)DIAM5h<;?JCXCfsRLqjSP4*`_ngfo~#s4THV0%~hF| zwQ0PLDXNk4hKLpgPiu5GS>{Tj_Y5_i%W9QMr_(7ruTiduYh`q*O5sxvNq2t5u2zOi zGgC7c2HuaBtEKa(NTFcWdIt9#GN6(rDAChYZ*pUWn|yciVl*+3^J}dL6J1bs9fy>d zSeCADXN~M?X+FsfPoj(3q_##X3y*ek>@*d(lS7J*PSWV`=@MH?gyFQcmB)EgpapMk zP)qo$Z{s9sEfFiWxw(;+*=!51eM4`%Fv=GG`uLliRD+v#j^M;d4L>u6xGMTqnJvgh zZgewOl2$R+UPs454@HX5=7w#0`4p$5l*didR?spx9Hk?66f|1q9qP(>`!DOiK0^Ix|4pj2H5>?@6waq&hs17U5JynGOE;M~7|aswc(JraCs+!zc7|X1V6U`z zf*LEnsB1V2dz zy_OFI2RqOf3L3l?zw<5JC~CC0-%(j+A3(3cZw3uM8*C;=6K(lfb&k5){1%<0|DBlT zejrpL7)FEgjH?!^5lyf!dQm3+CkiDPa;{gNk}S%5V4xGNHnK6KWv&epsXw8Y b%3{kG!|UkPxere$OnftXvIG6Qb)EkJ>?QCI literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 0000000..3220782 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,117 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2017-2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-05-18 09:27+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "Zgjerime PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Objekti %(nth)s te vargu nuk u vleftësua:" + +msgid "Nested arrays must have the same length." +msgstr "Vargjet brenda vargjesh duhet të kenë të njëjtën gjatësi." + +msgid "Map of strings to strings/nulls" +msgstr "Hartë vargjesh te strings/nulls" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Vlera e \"%(key)s\" s’është varg ose nul." + +msgid "A JSON object" +msgstr "Një objekt JSON" + +msgid "Value must be valid JSON." +msgstr "Vlera duhet të jetë JSON i vlefshëm." + +msgid "Could not load JSON data." +msgstr "S’u ngarkuan dot të dhëna JSON." + +msgid "Input must be a JSON dictionary." +msgstr "Vlera duhet të jetë një fjalor JSON." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Vlera '%(value)s' duhet të jetë JSON i vlefshëm." + +msgid "Enter two valid values." +msgstr "Jepni dy vlera të vlefshme." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Fillimi i një intervali s’duhet të tejkalojë fundin e një intervali." + +msgid "Enter two whole numbers." +msgstr "Jepni dy vlera të plota numrash." + +msgid "Enter two numbers." +msgstr "Jepni dy numra." + +msgid "Enter two valid date/times." +msgstr "Jepni dy data/kohë të vlefshme." + +msgid "Enter two valid dates." +msgstr "Jepni dy data të vlefshme." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Lista përmban %(show_value)d element, duhet të përmbajë jo më shumë se " +"%(limit_value)d." +msgstr[1] "" +"Lista përmban %(show_value)d elementë, duhet të përmbajë jo më shumë se " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Lista përmban %(show_value)d element, duhet të përmbajë jo më pak " +"%(limit_value)d." +msgstr[1] "" +"Lista përmban %(show_value)d elementë, duhet të përmbajë jo më pak " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Mungojnë ca kyçe: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Janë dhënë kyçe të panjohur: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Sigurohuni që ky interval është më pak ose baras me %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Sigurohuni që ky interval është më i madh ose baras me %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..aabfcba9cf6f2f1e250fb76c9f3b8822f1d58838 GIT binary patch literal 4106 zcmc&$+iw(A7(Xf~RPloMsPRBj=nAu!TGFy~K`AAvP$;zGBTjcuw?k)V);VXpZR7#k z2x@#VMiacpm=HBSEYO8!sqMdTCgGVEUIv~A9$yp5e{d~hZP;%CJ`Fq!^mdg(#NeuM6vz+T#~W9&&_7T5tS1K$SzT*nRTp(FMlum|`tkm#-f)4=sDjJ*Qf z2c*3Z+yndxcoK4c2fho;Kf>4`&VPlIjsQC!jqLaUNc?^T?gd^49s_QA488+S0Cxg4 z5Nyl?)t4T)gFRf|JpqK745Ey$>6m;2Q_Mqlf(?U8OAo{`n8KdI`w(7=2|~mk#|xL6 z*ic;A*4DOh+bxNh+{(>@7fMp`VL>}5$KMz{d??OdH^}|r6C$fvk6&_g-18N8eLEuI zIa}Fr*6YbqAh;T}6@DDa1KZ0Bjz!il6kVZ&JIV8bu$2gi%Hw{(#XBY2<;v%+ZLU*r z)bYAPt7PX2DObhI$SnKZD;0)CAc_6rQDiG@5DDcJ#4Wz9aBNg zlK7~wOs!Imh>5I#ru0R4xhA4Gqst~y>3p-19+R7?D(R|SH=0V3%#O2T)DV_()}&v( z4-5o8bpWd`XB|Tc!OAqxoj{HIEk{Ms50up}^G?p%Tgppo$WQZ@fx|;q4;4IUt$mcm zygixfvXVQjR3}fR(j7auCEJrp5L!pYxI;Xf=sK-r2T$!x@7S>|iKpeDEtNF{^QCJm zKS=YvSdaPqfInt?@LQI551W(M#uiWFevsddi(bBD=Y=&S>_VCkieT7518N&ps+dkB z%H?ug5nE?OOvKTy5|Lqx;MT7vWRQrp^!N4m-f%%Go^0tsSqcxTO%`FJLK-BBF6wj_ z&yL!G6e{!P(0;4y1|7*75rNg~W&NDVi>_fuEvcF2GH4laOM&fL`~9FG)7&eXt<1c- zi$}{$o7b93W-=+hWecZea#JRi;(K_KgB<(anfAp`-I)$rnj6XPRFa=O8C?NQGKM=T z+-Z;PYH6AY`eJxWSM`kkMbC$)!zr%kusEeFTwl<$;gp``fYW+`&h$l)&DL{;CI{E^ z`a*aP3~IU(PBHzpt{M*dQaH`QwZg;c@T_4}(Q{FE)C;(UPheit)i~4NfNv!{N6Z!= zs;V!ophY;XYj_t(QH~4M@Jpkcz6vlZkPQ`GTh?08yzfT995ni3)dIeU=qgkvhrt0e zWDpz(pUp$H3RGB`qS>>!V%!2VAwE$L%^Vy8!|sa5%9o&FvtS%7O9MT-@>Rt14D`8r zvw1kuS4h#Dc&!jjlRGpeA>}*xj4}%ugwREEl9C6Rrmxf&6kiH@g`y27&6;e4ur$+1 z14>-nMgS^$2A?h?aLcA=L_%W1>FvZE{E*;0oC19nOJa@0GAY~0heCl&06CI&S#Du$ z-LZIGy|?0L|9|m!@B530?fdu6_y4x|JM{f+#D9gHU7&h1WrzBiM|z`b!uL$^pc-n_ zz)VRtlOUOijtHveuaIT#R;f*0qGU$}&6u`h?xPOPcWmmzAw0L(-qGZyQFEx*s0zUv zJE}mcv8I1cU|2J$K>h3r=uy;WVnlk@!q3gDsKN>(mZp-KNi-b7>4twx`coXyXaYOa zDQN!G@6d2D)*1pxY~b3+;#=@Oi>6J@r`9lf$f2e?z*LwKwTXxq%|McbHc`V8S`qQm s&@w&x6GPK5P8SuZH2gC&-Zw3+IW9(Y6c;RK&1j4Mvgw=nu69iS1s~2AkN^Mx literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 0000000..27a30d0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,123 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-07-04 19:55+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL екстензије" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Ставка %(nth)s у низу није валидирана:" + +msgid "Nested arrays must have the same length." +msgstr "Угњеждени низови морају да буду исте дужине." + +msgid "Map of strings to strings/nulls" +msgstr "Мапа знаковних ниски на знаковне ниске/null-ове" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Вредност кључа \"%(key)s\" није знаковна ниска или null." + +msgid "A JSON object" +msgstr "JSON објекат" + +msgid "Value must be valid JSON." +msgstr "Вредност мора бити исправни JSON." + +msgid "Could not load JSON data." +msgstr "Не могу да учитам JSON податке." + +msgid "Input must be a JSON dictionary." +msgstr "Улазна вредност мора бити JSON dict." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' вредност мора бити исправни JSON." + +msgid "Enter two valid values." +msgstr "Унесите две исправне вредности." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Почетак опсега не може бити преко краја опсега." + +msgid "Enter two whole numbers." +msgstr "Унесите два цела броја." + +msgid "Enter two numbers." +msgstr "Унесите два броја." + +msgid "Enter two valid date/times." +msgstr "Унесите два исправна датума/времена." + +msgid "Enter two valid dates." +msgstr "Унесите два исправна датума." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Листа садржи %(show_value)dставку, не би требало да садржи више од " +"%(limit_value)d." +msgstr[1] "" +"Листа садржи %(show_value)d ставке, не би требало да садржи више од " +"%(limit_value)d." +msgstr[2] "" +"Листа садржи %(show_value)d ставки, не би требало да садржи више од " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Листа садржи %(show_value)d ставку, не би требало да садржи мање од " +"%(limit_value)d." +msgstr[1] "" +"Листа садржи %(show_value)d ставке, не би требало да садржи мање од " +"%(limit_value)d." +msgstr[2] "" +"Листа садржи %(show_value)d ставки, не би требало да садржи мање од " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Неки кључеви недостају: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Дати су неки непознати кључеви: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "Овај опсег мора бити укупно мањи или једнак %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "Овај опсег мора бити укупно већи или једнак %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ba47202f970d6f50e8703882c32f3c54453cfaee GIT binary patch literal 2875 zcmd6o&u<(x6vqv;6c#8@euVLMSF5I|t;LMe;J(C|>wIvd&gr%9!*z@N3z32Dd{Bh#Q zb%yacu4i%mfa^J2@85+R#xLMF_$&Aj_&4}8c=T?@mci%2i=YNifZu`7fIovzf`5Wf zf$Sc}#(**KEZ79U0zUx11dknIYy$imd;|A==aaT&tc1F;0u_) zc#N@!!Hb~Z|2=RO9Dpm}Pv9fq*nNfGDtHp}MbOI&@GF0{2u%f{1*K9e#Tw~ zU#b*x5s`fO62TF76XhZm!jA?OgWx2-Q2qd#{ zRkR(uU~(0cHjb3xg$Tvm@fw@cHqQjP4tKaoOBvURAUw29+Ec;_wM9uLxD%O|(qu9c zALU$;Gc-P-WGdZOr-ZeK(iQd`7}9yVAu{XL?=BU-!Us`zG8MOYca!B{>d5+_ zW0ct6W5J0Oj%nAaT9O)u3gTJDw8A-sZ8X|2>r3%2{kYAKNGt~LXG zK(LpYzKlhDKyuyh=y>MHY=-TN!U(nIlR#W+3s~w66FMFdsM{nkdjn++zDyu8&(FI?Ckd597X*bzuz8W=}QFEG_ zue7G7&or8i1_YzaqA$J95xMDTvPqMZt*NOq4UEbXw=PuT`%P27{XO8s(xWmV-FSJAx5QrjZk3sXBgIYY(c?1ZLMv(&84R7RR=I^01L zqRKN)iBwJ|Wlx=RE<8oPt9Bi`nClp=5~h>lamPvdbw&UX6AI^s7TDOr?$wsc(J@Mo4n~;SM>jYV6=b z;WqdGh&)AujYW1Fft$bT!$UYdqPHVd*lQ&O5Kfj|wkUX^i`FVKUdFW*njwBVQftu} z?t~cK&}ECmIE$#EqJt>TV^5ybChRC, 2015 +# Jonathan Lindén, 2015 +# Thomas Lundqvist , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL-tillägg" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "Objekt %(nth)s i arrayen validerade inte:" + +msgid "Nested arrays must have the same length." +msgstr "Flerdimensionella arrayer måste vara av samma längd" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "" + +msgid "A JSON object" +msgstr "Ett JSON-objekt" + +msgid "Value must be valid JSON." +msgstr "Värdet måste vara giltig JSON." + +msgid "Could not load JSON data." +msgstr "Kunde inte ladda JSON-data." + +msgid "Input must be a JSON dictionary." +msgstr "" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' måste vara giltig JSON." + +msgid "Enter two valid values." +msgstr "Fyll i två giltiga värden" + +msgid "The start of the range must not exceed the end of the range." +msgstr "Starten av intervallet kan inte vara större än slutet av intervallet." + +msgid "Enter two whole numbers." +msgstr "Fyll i två heltal." + +msgid "Enter two numbers." +msgstr "Fyll i två tal." + +msgid "Enter two valid date/times." +msgstr "Fyll i två giltiga datum/tider." + +msgid "Enter two valid dates." +msgstr "Fyll i två giltiga datum." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla fler än " +"%(limit_value)d." +msgstr[1] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla fler än " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla färre än " +"%(limit_value)d." +msgstr[1] "" +"Listan innehåller %(show_value)d objekt, men kan inte innehålla färre än " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Några nycklar saknades: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Några okända okända nycklar skickades: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Säkerställ att denna intervall är mindre än eller lika med %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Säkerställ att denna intervall är större än eller lika med %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..68fdaa92f22c3161c7e0745ea480b2dedf5a710e GIT binary patch literal 3162 zcmd6o&u<$=6vqepgVsQS^805Wl|mD>YdfLP;1Z;!O;Mm}L+h4fHTF*Isb^=*%xqly z58#04k#lY>HyR`=A%&CO6Iae$k&w6me*oXvwG$_5p$JuCJAzWWRf|*Q%@J%r2 zo&{e5mq7w0coh5s{2IIi-UP4i&iCKDhp|aKzXd)IUH}Oc;1u{d_&#_WEP=m)!LHZ$ zGS-9bC&1%){`N7(o&bLV!~CCM6+EzyvCCi`d23C{`)cHRINz#qUOxC_P|0cSv%oeh}2Ip7Wk z(QE`eam?&I!Pj8~-@w#tJd6LQaKVJlaR7HPkv)eCN6%t{5V5Cm!R1+OLR{IAiOE&2 zQZeO@PO9p%c#<)Fbm_wRB0H6lOzoPedv@BSDkg0_DZ_ISin-@SwxC^V1^FiT z_>+z-*9}3qshgy&gcqty4J)`8Hb`kQmc(Z%SL6*%Oe&d3e|2ck1FBQPxd+mf?b$J; z)1)S>3+hL&^0VR$qU2>F?lX6f*O{r?-glZtiLE^rbvyN&KIOR|V_EmoXl}bjw&+EI zlWX6cawIiQB8XedyA;Fy!O59%Fs;JQNra|uwC7SgEOJfL8G0)w2}Q^7Pk0;RGn9i0 zS`nR*zqk81F8;Gl_b`;+M`vR4?9n@N;lJ4VH#(Pio6HJ1Z>4S^iOlG>q*J9FJ1?9U zaUKqr2eHXlLw*Z#JQ1XXZun-AEgR>N)|WmxN8-8{+9A4*T`~}9iLN8KUr-{Q!#)+9 zExeo>3Z%NFO-GLjwyjx}v53bct6@jatq=Bw?eoIQYBl7DxLy~qG|UJcZxbrAusBQ9 z@cwYN`;U#Lc>L%~BfIuo*(X3EpEQTd%{`UFi+SB}4Tv^-NTLom81 zR%Ot+Q*M@~%a!uGN6Q$6bKLo;isL)Qy|ERVH|a%FZ(%|=Qr-|zRq&)j)zr46Ytm%X z`*x*N>U26qAC}1#alMFkRLTt>K@FFeye&-?mKK*5wvISmEEi6r?1aYF-8RnP5#~}` zp$<<{y~(W;e(rMhY&5$i7xr2aHd@ei6K8Rstx3OWCUn@svPvyi(OF{?S0UZb9^Kr` zNy=~MCN+IP(^Dr4+ZuH&25Z7fYKZ< z&PnR_H(E$uk%(9p*?fu|=W4J%SR1VGtUX7=?Q|?O)%qJ@EvX&u~dNz`6GIW?;vb&eryJ7 zHbufEAxwE&7dzW|CQLE}Sayv)wzDG+qY`2g^Cl 1);\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL uzantıları" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Dizilimdeki %(nth)s öğesi doğrulanmadı:" + +msgid "Nested arrays must have the same length." +msgstr "İç içe dizilimler aynı uzunlukta olmak zorunda." + +msgid "Map of strings to strings/nulls" +msgstr "Dizgiler/boşlar olarak dizgilerin eşlemesi" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" değeri bir dizgi ya da boş değil." + +msgid "A JSON object" +msgstr "JSON nesnesi" + +msgid "Value must be valid JSON." +msgstr "Değer geçerli JSON olmak zorundadır." + +msgid "Could not load JSON data." +msgstr "JSON verisi yüklenemedi." + +msgid "Input must be a JSON dictionary." +msgstr "Bir JSON dizini girilmek zorundadır." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' değeri geçerli JSON olmak zorundadır." + +msgid "Enter two valid values." +msgstr "Iki geçerli değer girin." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Aralığın başlangıcı aralığın bitişini aşmamak zorundadır." + +msgid "Enter two whole numbers." +msgstr "Bütün iki sayıyı girin." + +msgid "Enter two numbers." +msgstr "İki sayı girin." + +msgid "Enter two valid date/times." +msgstr "Geçerli iki tarih/saat girin." + +msgid "Enter two valid dates." +msgstr "Geçerli iki tarih girin." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha fazla " +"içermemelidir." +msgstr[1] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha fazla " +"içermemelidir." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha az " +"içermemelidir." +msgstr[1] "" +"Liste %(show_value)d öğe içeriyor, %(limit_value)d değerden daha az " +"içermemelidir." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Bazı anahtarlar eksik: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Bazı bilinmeyen anahtarlar verilmiş: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Bu aralığın %(limit_value)s değerinden küçük veya eşit olduğundan emin olun." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Bu aralığın %(limit_value)s değerinden büyük veya eşit olduğundan emin olun." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a80add979ea511df7aa9177962f218bbf3715f91 GIT binary patch literal 4758 zcmeHK-ES0C6u%%K)Gq`DjT#RmKsPY^QHzv?Eg&Be`KnMb@r4ZC%kI$GnRRBCr3NF= z0AdyiAd zV%ikAw4&9vN>*?(n?+YSQ}3!Vu6a&>$p{?NwDm> z$F01~H%WH0$H4Rg=F9G*gQd?Z=ZHMfBf*q^kxqV+P*Sk6PE?*>uDvJx<$Nkx)r=R- zN0FDE6o9s~?9c41v_VugNZRs=wjs5bt#Wp9&br@~!P|2n{ zR;Tf_>^A+t=*IGW+YDSUOWmet`n1dSJ};WRv=Kov{bX-6T>t*&Ldmr3B+5@GRGmV_ zEJ&kUnx!lq?DcStEEJ*EVi1(GsZ_OEO$Kb*Ix0`FPAXd51lX~GRHZkSXxX!K&-O+b zGRbtyRvb;~fL>o2>kN|p8>pvfdcF*D2fKF|9Su45byRxBcBjY9>)hx#Vg+@g zS*rB5blDZpw2d9ESMsyul=aZhwQr#4YpxZig))@OQJPk+Bt1&=Fw+>OX&J^D+5{OG zd6YtDj@lXuv@u8RJdCWT)3lK?ZFKTvY(Gt%lxa`EU}l=ZSOpZ)tS~X`%&nbde|@6q zSJ=yeU!6bvpJYDkUpPimOd&9FZ_ zqee-Msr%un@D!BBFfk5^dvP|aAJolN;borJGeUjOnnUWAs;RqBI}IOd1cM>G0^YCN) z{SKUlc~u}kz(f%$tsI_)*&3Klmk0;rU76SuosrV z+DZ8|lX4UzEb;8*l}$~@nNm>aijD_oC}*G!H{4x8jE3W=pTVw1w}7ypcY;GOs)jf= zI-zwQPehD!BP-O8a5<_&H3pR^hd4p86;o~pP;7Fw1_6oEj8SLa0EL&pYn0=n{V{{f zP3I_{j1r_aB?Zx-pPCGa4E?JJsoMW^ns1g*ojVWWqKL8_UI_cSHs~`x?GpObxuZs( zV5^=zohMA?|1hC%xa#P_sJAq(YiMxw!bJ!MYWXRYm0P;n3=s<3#8{1{P~dN(+w|+g zq#HUni!p8+(BK}A&Q~|bgQgbGWwGAk??av&e@z$GArQN&dnQ<+U$Y^Ur|a-H!d+GO z>F5GMjf;D|`JmPRr?#%u04ntfXK@nZ}Ja2Z>6Uz-7 zkBd21bx5GW@kHHRv$1Pf1T#1TDb)5U*9Ptox*j(of_QO&qFcz+1E=E;1#H;BBa9(B m(|Vbv*z|8f`$I#hZy;Y7^z9`2(=gpagPW#W->sQ1WPbwW`Fa2V literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000..8f08a3c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,138 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Andriy Sokolovskiy , 2015 +# Денис Подлесный , 2016 +# Igor Melnyk, 2017 +# Kirill Gagarski , 2015-2016 +# Taras Korzhak , 2018 +# Zoriana Zaiats, 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-17 11:49+0200\n" +"PO-Revision-Date: 2018-08-24 20:08+0000\n" +"Last-Translator: Taras Korzhak \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % " +"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || " +"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +msgid "PostgreSQL extensions" +msgstr "Розширення PostgreSQL" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "Елемент %(nth)s у масиві не коректний:" + +msgid "Nested arrays must have the same length." +msgstr "Вкладени масиви повинні бути одинакової довжини." + +msgid "Map of strings to strings/nulls" +msgstr "Асоціативний масив із рядків у рядки/обнулення" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "Значення від \"%(key)s\" не є рядком чи null." + +msgid "A JSON object" +msgstr "Об'єкт JSON" + +msgid "Value must be valid JSON." +msgstr "Значення повинне бути корректним JSON." + +msgid "Could not load JSON data." +msgstr "Не вдалося завантажити JSON-дані." + +msgid "Input must be a JSON dictionary." +msgstr "Значення повинне бути JSON-словником." + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "Значення '%(value)s' повинне бути корректним JSON." + +msgid "Enter two valid values." +msgstr "Введіть два корректних значення." + +msgid "The start of the range must not exceed the end of the range." +msgstr "Початок діапазону не повинен перевищувати кінець діапазону." + +msgid "Enter two whole numbers." +msgstr "Введіть два ціліх числа." + +msgid "Enter two numbers." +msgstr "Введіть два числа." + +msgid "Enter two valid date/times." +msgstr "Введіть дві коректні дати з часом." + +msgid "Enter two valid dates." +msgstr "Введіть дві коректні дати." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +"Список містить %(show_value)d елемент, кількість яких не має перевищувати " +"%(limit_value)d." +msgstr[1] "" +"Список містить %(show_value)d елементи, кількість яких не має перевищувати " +"%(limit_value)d." +msgstr[2] "" +"Список містить %(show_value)d елементів, кількість яких не має перевищувати " +"%(limit_value)d." +msgstr[3] "" +"Список містить %(show_value)d елементів, кількість яких не має перевищувати " +"%(limit_value)d." + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +"Список містить %(show_value)d елемент, кількість яких не має бути не менша " +"%(limit_value)d." +msgstr[1] "" +"Список містить %(show_value)d елементів, кількість яких не має бути не менша " +"%(limit_value)d." +msgstr[2] "" +"Список містить %(show_value)d елемента, кількість яких не має бути не менша " +"%(limit_value)d." +msgstr[3] "" +"Список містить %(show_value)d елемента, кількість яких не має бути не менша " +"%(limit_value)d." + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "Не вистачає наступних ключів: %(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "Були надані наступні невідомі ключі: %(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "" +"Переконайтеся, що цей діапазон цілком менше чи дорівнює %(limit_value)s." + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "" +"Переконайтеся, що цей діапазон повністю більший чи дорівнює %(limit_value)s." diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b09081528a2016322b907b48a40a178050e4d43 GIT binary patch literal 2854 zcmcJP+iw(A9LJB!b-kc?#p@9z?FzG(hG@G`BUVVNZK+W45vMz+y92W`>zvsx^{FbA zmK1@&x(FEBq^*FIwurDS3w`j}7h~d^FYe54V6gscIVgAam1a241Hwt?@1?|@_AO7IWx8F2A^ zgggPh2nyZx;8S2bNI?}`2kr+?gO|ZE@PkF3{iTZusl|5<_&C@OQm_m3gZsdZ;1n1H ze+PwM&o3e5OZZ+7uEqC{O9^=x{1X)WE0z(m3G`RE8x;D-!5Z*;Q275_g-e%v`!9ha zKMmk3;0{p4{c(jqfUEJn%16k{;70HpZhBTVuD9+7J?gbldr#vsmT1s^6J1Saw}qu%3<^8k@7xtS3`eHK($d zM@5ZVs-eqfPk=OAEP=>%EAHo1)e#A!vT4daR6+Vhl3nNET7;4o6=xGQbW2usj=y-^ zNLSLOP!*ci;Z3nB4yYmr9kh$3XA{0K$x7hPI{E*h^fo#ZhF3oNO~vqE{QL)e`8#_Tkxr!35KgvvSWL=c-;^j8E@`flAw>+=MYrqQh`OqnOyAuL+5X$gOY zd9SnFW)(%k_Cy&x6+28<76=81_}Q&gvA){1?&qsTTZ&)hO3cX_HF0y|8+7O1XMdp^&f$+H| zTZS2-Ees9UV(2ltkw@b!AxHTev4pH@0bDw-Ltc-iq(+n zEfhj9si9Lh&}dvXIkOty>)0aI&&dgMUCfj=>rq2-E2F+swW=ORsB6pDuBA*_leQRU zf=8&HbU%4xcmwsOjiC*`1sA#9Td=45W`?gi$0nSU15T#DbbPP4$(^BsT{uXJx!z*# ztXQxou9T;Sv2dXL={0-*Q2E+5S1vQ@960}L?Ycwj8>EvR zbxxkTQ8?&iFTvMa%Xvb#-b11g*WdOs7h!mAwVGWwhvQkhFDEu3Q@Xmhm>Y+d(z$a; zhj*>d3}11wL(aDuXJ~ll?4S^}`?KZY)Ar>H_F$iV=o^SGxXba!jlv*~#m*lUnRl~v zQ+gE&seiAle5tQIz3;ZV#, 2015,2017 +# Liping Wang , 2016 +# Liping Wang , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Lele Long \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL 扩展。" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "数组中的第 %(nth)s 项无法校验。" + +msgid "Nested arrays must have the same length." +msgstr "嵌套数组必须是相同长度。" + +msgid "Map of strings to strings/nulls" +msgstr "字符串到字符串/空的映射" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "\"%(key)s\" 的值不是字符串或者为空。" + +msgid "A JSON object" +msgstr "一个JSON对象" + +msgid "Value must be valid JSON." +msgstr "值必须是有效的JSON格式" + +msgid "Could not load JSON data." +msgstr "不能加载JSON数据。" + +msgid "Input must be a JSON dictionary." +msgstr "输入必须是JSON字典。" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' 值必须是有效的JSON格式" + +msgid "Enter two valid values." +msgstr "输入两个有效的值。" + +msgid "The start of the range must not exceed the end of the range." +msgstr "区间开头不能超过区间结尾。" + +msgid "Enter two whole numbers." +msgstr "输入两个整数。" + +msgid "Enter two numbers." +msgstr "输入两个数字。" + +msgid "Enter two valid date/times." +msgstr "输入两个有效的日期/时间。" + +msgid "Enter two valid dates." +msgstr "输入两个有效日期。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "列表已包含 %(show_value)d 项,不应该超过 %(limit_value)d 项。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "列表已包含 %(show_value)d 项,不应该少于 %(limit_value)d 项。" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "某些键缺失:%(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "包含未知的键:%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "请确保该区间内所有值少于或等于 %(limit_value)s 。" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "请确保该区间内所有值大于或等于 %(limit_value)s 。" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/postgres/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..babe1d06cc59f109aa4ff9cafba00315cee564d1 GIT binary patch literal 2864 zcmcJQ+iz4w9LGlmffa9nx2QN0o3??omrArOl%N%oDuqH1rn?8up0l2r?Y2Bs z(zPvYp~kcY1W_!73Kb9vO5+4cH4qL6XPVapE)zX`Q7F> zv$s|(8YE~hp}&Uy2l^Z6naA*hw)AmAD!^sn(_jF61*`*ifP2A@z)^4o_&4|}xcCV| zUIgC+rS4krWv~gPpboAB4}%xLo8Tz;=_1emlEs8n;ky!i0c-*(*alXEJ>VwrDi{Fo zfYPtkPZDwlzSn}4`2KT==NDP(`Lz<gR8;6KpDsKW!`!fDD$!z zRKQQbU0?=`fVWEPZ~F*&3*XJ)^I!)k<39|(4xR<&{@*}p?+z&Kta^%&QpyQjFE^xv zV99M#AHpQd(Pge>TZIl+-5BKgJc|yM<@O9laE+`)M=IQgBO=eCBjv7d@|;LzMOC|M zBw01Dr0#&mlU&diCckuze%QQoho8LXl3FeMS*sxRR?^U@X$fjrswYANVL8}!{7)&sulSXZ(3T8_wlUg=qpCwg;3X4`$8G2k7`$`TiP@Taz zUyv@>X3C;wGTy>$F4fOWd9fk}77%)zJz(u$rd?O(&8K3P!DekVn2Dq)=T!CbsOhaj zw@lUU^pgg`;)vW7v1(3r6Ok~g+P2zBHKboA*>w)Cg(=yt<7`?jQ>ePhv5Uv7R4H8= z)uCw}eko?<0hQ#SgSN5MOv2|US@SsLTljC?f zX|^D8fOT?;^fMaQIftDvVw02AC4r=Qz_e249KnQbwd)$w=14}QMWNb4`YX+QH_N@O zvPf7*D}$$Ug_+tsAwQ9u-Aa}7Yh3Hqe2u)8a;sVjTHZw&wx8^gFG9I!-TEs%1WmRj zp8%ynQ}*BvA<8h-_T!RUzTGTg*+OaLQC(BsPe!>CvBK2Xv@@dA%Nq|_VgdK{VfXl?x?;@VTK1%MR1X z!K9KvUTJ+SiQi30tR?w=drLH~>V_XL&t_~gqe(T&ln7JfVMyvGW-1#+K{I)lLXv!Jr&0QPxo*t(wd%NopnV#%&x{i2L`M$B~ zpKp+S_jiygWc!@-Id7qGttU5hLW&nI9?74bD*Vu&8z0GE?siV~=Z;@?21cD9Gfw(~ zGjcvRl+E=H<;VLlxaaEf1t_?3Yyk=i*-5zOq{rZSZgA2WAC`X2n?2Q+8|=-W?9L6J z%bhwC$elP;9Qx`JQV(24s_t7GybjC6%dBVFOV#X)E~71;_}=Lqo}L`fU%G^BcyBwr z_A*@@8!n9ZIU`qdgTr^TCvg@(LE6croq>yxp7*AgH{H!bjFolYDjx@f7, 2015 +# Tzu-ping Chung , 2016-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-19 16:49+0100\n" +"PO-Revision-Date: 2017-09-21 22:44+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "PostgreSQL extensions" +msgstr "PostgreSQL 擴充" + +#, python-format +msgid "Item %(nth)s in the array did not validate: " +msgstr "陣列中第 %(nth)s 個物件驗證失敗:" + +msgid "Nested arrays must have the same length." +msgstr "各嵌套陣列長度必須相同。" + +msgid "Map of strings to strings/nulls" +msgstr "字串與字串/空值的對應" + +#, python-format +msgid "The value of \"%(key)s\" is not a string or null." +msgstr "「%(key)s」並非字串或空值。" + +msgid "A JSON object" +msgstr "一個 JSON 物件" + +msgid "Value must be valid JSON." +msgstr "必須為合法 JSON 值。" + +msgid "Could not load JSON data." +msgstr "無法載入 JSON 資料。" + +msgid "Input must be a JSON dictionary." +msgstr "必須輸入 JSON dictionary。" + +#, python-format +msgid "'%(value)s' value must be valid JSON." +msgstr "'%(value)s' 必須為合法 JSON 值。" + +msgid "Enter two valid values." +msgstr "請輸入兩個有效的值" + +msgid "The start of the range must not exceed the end of the range." +msgstr "範圍的起始不可超過範圍的結束。" + +msgid "Enter two whole numbers." +msgstr "請輸入兩個整數" + +msgid "Enter two numbers." +msgstr "請輸入兩個數字" + +msgid "Enter two valid date/times." +msgstr "請輸入兩個有效的日期/時間" + +msgid "Enter two valid dates." +msgstr "請輸入兩個有效的日期" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "串列包含 %(show_value)d 個物件,但不應包含多於 %(limit_value)d 個。" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "串列包含 %(show_value)d 個物件,但應至少包含 %(limit_value)d 個。" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "缺少鍵值:%(keys)s" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "包含不明鍵值:%(keys)s" + +#, python-format +msgid "" +"Ensure that this range is completely less than or equal to %(limit_value)s." +msgstr "請確認此範圍是否完全小於或等於 %(limit_value)s。" + +#, python-format +msgid "" +"Ensure that this range is completely greater than or equal to " +"%(limit_value)s." +msgstr "請確認此範圍是否完全大於或等於 %(limit_value)s。" diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/lookups.py b/env/lib/python3.5/site-packages/django/contrib/postgres/lookups.py new file mode 100644 index 0000000..c2b3d2b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/lookups.py @@ -0,0 +1,76 @@ +from django.db.models import Lookup, Transform +from django.db.models.lookups import Exact + +from .search import SearchVector, SearchVectorExact, SearchVectorField + + +class PostgresSimpleLookup(Lookup): + def as_sql(self, qn, connection): + lhs, lhs_params = self.process_lhs(qn, connection) + rhs, rhs_params = self.process_rhs(qn, connection) + params = lhs_params + rhs_params + return '%s %s %s' % (lhs, self.operator, rhs), params + + +class DataContains(PostgresSimpleLookup): + lookup_name = 'contains' + operator = '@>' + + +class ContainedBy(PostgresSimpleLookup): + lookup_name = 'contained_by' + operator = '<@' + + +class Overlap(PostgresSimpleLookup): + lookup_name = 'overlap' + operator = '&&' + + +class HasKey(PostgresSimpleLookup): + lookup_name = 'has_key' + operator = '?' + prepare_rhs = False + + +class HasKeys(PostgresSimpleLookup): + lookup_name = 'has_keys' + operator = '?&' + + def get_prep_lookup(self): + return [str(item) for item in self.rhs] + + +class HasAnyKeys(HasKeys): + lookup_name = 'has_any_keys' + operator = '?|' + + +class Unaccent(Transform): + bilateral = True + lookup_name = 'unaccent' + function = 'UNACCENT' + + +class SearchLookup(SearchVectorExact): + lookup_name = 'search' + + def process_lhs(self, qn, connection): + if not isinstance(self.lhs.output_field, SearchVectorField): + self.lhs = SearchVector(self.lhs) + lhs, lhs_params = super().process_lhs(qn, connection) + return lhs, lhs_params + + +class TrigramSimilar(PostgresSimpleLookup): + lookup_name = 'trigram_similar' + operator = '%%' + + +class JSONExact(Exact): + can_use_none_as_rhs = True + + def process_rhs(self, compiler, connection): + result = super().process_rhs(compiler, connection) + # Treat None lookup values as null. + return ("'null'", []) if result == ('%s', [None]) else result diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/operations.py b/env/lib/python3.5/site-packages/django/contrib/postgres/operations.py new file mode 100644 index 0000000..95e7edc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/operations.py @@ -0,0 +1,77 @@ +from django.contrib.postgres.signals import ( + get_citext_oids, get_hstore_oids, register_type_handlers, +) +from django.db.migrations.operations.base import Operation + + +class CreateExtension(Operation): + reversible = True + + def __init__(self, name): + self.name = name + + def state_forwards(self, app_label, state): + pass + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + if schema_editor.connection.vendor != 'postgresql': + return + schema_editor.execute("CREATE EXTENSION IF NOT EXISTS %s" % schema_editor.quote_name(self.name)) + # Clear cached, stale oids. + get_hstore_oids.cache_clear() + get_citext_oids.cache_clear() + # Registering new type handlers cannot be done before the extension is + # installed, otherwise a subsequent data migration would use the same + # connection. + register_type_handlers(schema_editor.connection) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + schema_editor.execute("DROP EXTENSION %s" % schema_editor.quote_name(self.name)) + # Clear cached, stale oids. + get_hstore_oids.cache_clear() + get_citext_oids.cache_clear() + + def describe(self): + return "Creates extension %s" % self.name + + +class BtreeGinExtension(CreateExtension): + + def __init__(self): + self.name = 'btree_gin' + + +class BtreeGistExtension(CreateExtension): + + def __init__(self): + self.name = 'btree_gist' + + +class CITextExtension(CreateExtension): + + def __init__(self): + self.name = 'citext' + + +class CryptoExtension(CreateExtension): + + def __init__(self): + self.name = 'pgcrypto' + + +class HStoreExtension(CreateExtension): + + def __init__(self): + self.name = 'hstore' + + +class TrigramExtension(CreateExtension): + + def __init__(self): + self.name = 'pg_trgm' + + +class UnaccentExtension(CreateExtension): + + def __init__(self): + self.name = 'unaccent' diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/search.py b/env/lib/python3.5/site-packages/django/contrib/postgres/search.py new file mode 100644 index 0000000..a14d510 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/search.py @@ -0,0 +1,219 @@ +from django.db.models import Field, FloatField +from django.db.models.expressions import CombinedExpression, Func, Value +from django.db.models.functions import Coalesce +from django.db.models.lookups import Lookup + + +class SearchVectorExact(Lookup): + lookup_name = 'exact' + + def process_rhs(self, qn, connection): + if not hasattr(self.rhs, 'resolve_expression'): + config = getattr(self.lhs, 'config', None) + self.rhs = SearchQuery(self.rhs, config=config) + rhs, rhs_params = super().process_rhs(qn, connection) + return rhs, rhs_params + + def as_sql(self, qn, connection): + lhs, lhs_params = self.process_lhs(qn, connection) + rhs, rhs_params = self.process_rhs(qn, connection) + params = lhs_params + rhs_params + return '%s @@ %s = true' % (lhs, rhs), params + + +class SearchVectorField(Field): + + def db_type(self, connection): + return 'tsvector' + + +class SearchQueryField(Field): + + def db_type(self, connection): + return 'tsquery' + + +class SearchVectorCombinable: + ADD = '||' + + def _combine(self, other, connector, reversed): + if not isinstance(other, SearchVectorCombinable) or not self.config == other.config: + raise TypeError('SearchVector can only be combined with other SearchVectors') + if reversed: + return CombinedSearchVector(other, connector, self, self.config) + return CombinedSearchVector(self, connector, other, self.config) + + +class SearchVector(SearchVectorCombinable, Func): + function = 'to_tsvector' + arg_joiner = " || ' ' || " + output_field = SearchVectorField() + config = None + + def __init__(self, *expressions, **extra): + super().__init__(*expressions, **extra) + self.source_expressions = [ + Coalesce(expression, Value('')) for expression in self.source_expressions + ] + self.config = self.extra.get('config', self.config) + weight = self.extra.get('weight') + if weight is not None and not hasattr(weight, 'resolve_expression'): + weight = Value(weight) + self.weight = weight + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + resolved = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + if self.config: + if not hasattr(self.config, 'resolve_expression'): + resolved.config = Value(self.config).resolve_expression(query, allow_joins, reuse, summarize, for_save) + else: + resolved.config = self.config.resolve_expression(query, allow_joins, reuse, summarize, for_save) + return resolved + + def as_sql(self, compiler, connection, function=None, template=None): + config_params = [] + if template is None: + if self.config: + config_sql, config_params = compiler.compile(self.config) + template = "%(function)s({}::regconfig, %(expressions)s)".format(config_sql.replace('%', '%%')) + else: + template = self.template + sql, params = super().as_sql(compiler, connection, function=function, template=template) + extra_params = [] + if self.weight: + weight_sql, extra_params = compiler.compile(self.weight) + sql = 'setweight({}, {})'.format(sql, weight_sql) + return sql, config_params + params + extra_params + + +class CombinedSearchVector(SearchVectorCombinable, CombinedExpression): + def __init__(self, lhs, connector, rhs, config, output_field=None): + self.config = config + super().__init__(lhs, connector, rhs, output_field) + + +class SearchQueryCombinable: + BITAND = '&&' + BITOR = '||' + + def _combine(self, other, connector, reversed): + if not isinstance(other, SearchQueryCombinable): + raise TypeError( + 'SearchQuery can only be combined with other SearchQuerys, ' + 'got {}.'.format(type(other)) + ) + if not self.config == other.config: + raise TypeError("SearchQuery configs don't match.") + if reversed: + return CombinedSearchQuery(other, connector, self, self.config) + return CombinedSearchQuery(self, connector, other, self.config) + + # On Combinable, these are not implemented to reduce confusion with Q. In + # this case we are actually (ab)using them to do logical combination so + # it's consistent with other usage in Django. + def __or__(self, other): + return self._combine(other, self.BITOR, False) + + def __ror__(self, other): + return self._combine(other, self.BITOR, True) + + def __and__(self, other): + return self._combine(other, self.BITAND, False) + + def __rand__(self, other): + return self._combine(other, self.BITAND, True) + + +class SearchQuery(SearchQueryCombinable, Value): + output_field = SearchQueryField() + + def __init__(self, value, output_field=None, *, config=None, invert=False): + self.config = config + self.invert = invert + super().__init__(value, output_field=output_field) + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + resolved = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + if self.config: + if not hasattr(self.config, 'resolve_expression'): + resolved.config = Value(self.config).resolve_expression(query, allow_joins, reuse, summarize, for_save) + else: + resolved.config = self.config.resolve_expression(query, allow_joins, reuse, summarize, for_save) + return resolved + + def as_sql(self, compiler, connection): + params = [self.value] + if self.config: + config_sql, config_params = compiler.compile(self.config) + template = 'plainto_tsquery({}::regconfig, %s)'.format(config_sql) + params = config_params + [self.value] + else: + template = 'plainto_tsquery(%s)' + if self.invert: + template = '!!({})'.format(template) + return template, params + + def _combine(self, other, connector, reversed): + combined = super()._combine(other, connector, reversed) + combined.output_field = SearchQueryField() + return combined + + def __invert__(self): + return type(self)(self.value, config=self.config, invert=not self.invert) + + +class CombinedSearchQuery(SearchQueryCombinable, CombinedExpression): + def __init__(self, lhs, connector, rhs, config, output_field=None): + self.config = config + super().__init__(lhs, connector, rhs, output_field) + + +class SearchRank(Func): + function = 'ts_rank' + output_field = FloatField() + + def __init__(self, vector, query, **extra): + if not hasattr(vector, 'resolve_expression'): + vector = SearchVector(vector) + if not hasattr(query, 'resolve_expression'): + query = SearchQuery(query) + weights = extra.get('weights') + if weights is not None and not hasattr(weights, 'resolve_expression'): + weights = Value(weights) + self.weights = weights + super().__init__(vector, query, **extra) + + def as_sql(self, compiler, connection, function=None, template=None): + extra_params = [] + extra_context = {} + if template is None and self.extra.get('weights'): + if self.weights: + template = '%(function)s(%(weights)s, %(expressions)s)' + weight_sql, extra_params = compiler.compile(self.weights) + extra_context['weights'] = weight_sql + sql, params = super().as_sql( + compiler, connection, + function=function, template=template, **extra_context + ) + return sql, extra_params + params + + +SearchVectorField.register_lookup(SearchVectorExact) + + +class TrigramBase(Func): + output_field = FloatField() + + def __init__(self, expression, string, **extra): + if not hasattr(string, 'resolve_expression'): + string = Value(string) + super().__init__(expression, string, **extra) + + +class TrigramSimilarity(TrigramBase): + function = 'SIMILARITY' + + +class TrigramDistance(TrigramBase): + function = '' + arg_joiner = ' <-> ' diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/signals.py b/env/lib/python3.5/site-packages/django/contrib/postgres/signals.py new file mode 100644 index 0000000..abfd890 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/signals.py @@ -0,0 +1,64 @@ +import functools + +import psycopg2 +from psycopg2 import ProgrammingError +from psycopg2.extras import register_hstore + +from django.db import connections +from django.db.backends.base.base import NO_DB_ALIAS + + +@functools.lru_cache() +def get_hstore_oids(connection_alias): + """Return hstore and hstore array OIDs.""" + with connections[connection_alias].cursor() as cursor: + cursor.execute( + "SELECT t.oid, typarray " + "FROM pg_type t " + "JOIN pg_namespace ns ON typnamespace = ns.oid " + "WHERE typname = 'hstore'" + ) + oids = [] + array_oids = [] + for row in cursor: + oids.append(row[0]) + array_oids.append(row[1]) + return tuple(oids), tuple(array_oids) + + +@functools.lru_cache() +def get_citext_oids(connection_alias): + """Return citext array OIDs.""" + with connections[connection_alias].cursor() as cursor: + cursor.execute("SELECT typarray FROM pg_type WHERE typname = 'citext'") + return tuple(row[0] for row in cursor) + + +def register_type_handlers(connection, **kwargs): + if connection.vendor != 'postgresql' or connection.alias == NO_DB_ALIAS: + return + + try: + oids, array_oids = get_hstore_oids(connection.alias) + register_hstore(connection.connection, globally=True, oid=oids, array_oid=array_oids) + except ProgrammingError: + # Hstore is not available on the database. + # + # If someone tries to create an hstore field it will error there. + # This is necessary as someone may be using PSQL without extensions + # installed but be using other features of contrib.postgres. + # + # This is also needed in order to create the connection in order to + # install the hstore extension. + pass + + try: + citext_oids = get_citext_oids(connection.alias) + array_type = psycopg2.extensions.new_array_type(citext_oids, 'citext[]', psycopg2.STRING) + psycopg2.extensions.register_type(array_type, None) + except ProgrammingError: + # citext is not available on the database. + # + # The same comments in the except block of the above call to + # register_hstore() also apply here. + pass diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html b/env/lib/python3.5/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html new file mode 100644 index 0000000..32fda82 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/templates/postgres/widgets/split_array.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/utils.py b/env/lib/python3.5/site-packages/django/contrib/postgres/utils.py new file mode 100644 index 0000000..f3c022f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/utils.py @@ -0,0 +1,29 @@ +from django.core.exceptions import ValidationError +from django.utils.functional import SimpleLazyObject +from django.utils.text import format_lazy + + +def prefix_validation_error(error, prefix, code, params): + """ + Prefix a validation error message while maintaining the existing + validation data structure. + """ + if error.error_list == [error]: + error_params = error.params or {} + return ValidationError( + # We can't simply concatenate messages since they might require + # their associated parameters to be expressed correctly which + # is not something `format_lazy` does. For example, proxied + # ngettext calls require a count parameter and are converted + # to an empty string if they are missing it. + message=format_lazy( + '{} {}', + SimpleLazyObject(lambda: prefix % params), + SimpleLazyObject(lambda: error.message % error_params), + ), + code=code, + params={**error_params, **params}, + ) + return ValidationError([ + prefix_validation_error(e, prefix, code, params) for e in error.error_list + ]) diff --git a/env/lib/python3.5/site-packages/django/contrib/postgres/validators.py b/env/lib/python3.5/site-packages/django/contrib/postgres/validators.py new file mode 100644 index 0000000..db6205f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/postgres/validators.py @@ -0,0 +1,76 @@ +from django.core.exceptions import ValidationError +from django.core.validators import ( + MaxLengthValidator, MaxValueValidator, MinLengthValidator, + MinValueValidator, +) +from django.utils.deconstruct import deconstructible +from django.utils.translation import gettext_lazy as _, ngettext_lazy + + +class ArrayMaxLengthValidator(MaxLengthValidator): + message = ngettext_lazy( + 'List contains %(show_value)d item, it should contain no more than %(limit_value)d.', + 'List contains %(show_value)d items, it should contain no more than %(limit_value)d.', + 'limit_value') + + +class ArrayMinLengthValidator(MinLengthValidator): + message = ngettext_lazy( + 'List contains %(show_value)d item, it should contain no fewer than %(limit_value)d.', + 'List contains %(show_value)d items, it should contain no fewer than %(limit_value)d.', + 'limit_value') + + +@deconstructible +class KeysValidator: + """A validator designed for HStore to require/restrict keys.""" + + messages = { + 'missing_keys': _('Some keys were missing: %(keys)s'), + 'extra_keys': _('Some unknown keys were provided: %(keys)s'), + } + strict = False + + def __init__(self, keys, strict=False, messages=None): + self.keys = set(keys) + self.strict = strict + if messages is not None: + self.messages = {**self.messages, **messages} + + def __call__(self, value): + keys = set(value) + missing_keys = self.keys - keys + if missing_keys: + raise ValidationError( + self.messages['missing_keys'], + code='missing_keys', + params={'keys': ', '.join(missing_keys)}, + ) + if self.strict: + extra_keys = keys - self.keys + if extra_keys: + raise ValidationError( + self.messages['extra_keys'], + code='extra_keys', + params={'keys': ', '.join(extra_keys)}, + ) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + self.keys == other.keys and + self.messages == other.messages and + self.strict == other.strict + ) + + +class RangeMaxValueValidator(MaxValueValidator): + def compare(self, a, b): + return a.upper is None or a.upper > b + message = _('Ensure that this range is completely less than or equal to %(limit_value)s.') + + +class RangeMinValueValidator(MinValueValidator): + def compare(self, a, b): + return a.lower is None or a.lower < b + message = _('Ensure that this range is completely greater than or equal to %(limit_value)s.') diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/__init__.py b/env/lib/python3.5/site-packages/django/contrib/redirects/__init__.py new file mode 100644 index 0000000..65364a4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/__init__.py @@ -0,0 +1 @@ +default_app_config = 'django.contrib.redirects.apps.RedirectsConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3319df62853392305bcd869001fbbbe87f5c6ed6 GIT binary patch literal 220 zcmWgR<>fL;wu*6OU|@I*#Bjg}WH|tFF&B_XVPJ>?l8g+&noL!?DOrhm>G^ue`FSNp znMry@sVSL7smUe9dWi)E#d<+7u5*4~T4uVRCS#OPN@`kSX--KzP(eIU8&G&9LlMXZ zF!9S-za+OnzaXor;Cq*|eE8a52D7!=-ViSylTBr}VP(MCCGcU6wK3=b&@)n0p RZhlH>PO2Tq++rYR001y@KbZgk literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/admin.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/admin.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b637350d172f97e9ae54e2006b4833b9409e2be7 GIT binary patch literal 646 zcmY*XO;6k~5FO`h-ED$6RpP`s2R16VqN-YiDpUzL0ODX(vO;XYTjv8iD@3pGXZTCG za^f#=V(jcv>co@hdDfeGqkPG->29_6dyfD-!-o|kp5wMh7zDlqG(b&&5g_gyfDWJz zfrUUMfkgx|ga-nLA_Nh^BVNH25-~h@f+ZkgILnh4RD_%iaVcumAfTsGC?l)Ba?E-K z2*ps+vc3ZLb4$kwv^uFgPPEqGV&~mYPzic11pcNs;#9bzby!S9Ge| zxm+qOcA5qMCU*byg;+Vg2TF#+$M$#Z5?(x}^e8M(H zo!LrYY;61gNK5EL=6F~DXaS!ryl6elr`i)h#KGCT+`k(G&8 zVB(xK#mb$(`|)?*<#aR}%#!)j7XW;t9S=pcKr83y1bze*Kt_NOATIVmd64gjTmDlyI1 z{6frLY}CkTuY;QCs3wZFEhy1CIftwE?jKi3y%ruT6+8NLt{v>a_)N8NgCXygwULi3=IQly%zNDJiM{5HvDmJ1o5KFrd2v?!zqU85X6(K>%7 zRGy_uJkC;4et4O4AY|gFc+aKlx1UB~7>i?Hil@;@lm=v0^H2!sQC}hvK#{}1c?Jk{ z!~%h_YExW)1(>7AfY5~37~l?s7KANw+_OnKbKB*eM(a0z93T3@>aFH!U{rbl=uN}K zp(aQ)z!I-!aLzz|02*}|H2;}_HsKtl7OX2NVLEfo>DkS2>8Fcq9Av4M(czearp|tN zkrkuBPt#0~3MEGGwq|sEB+}7!my9AcqVrLzG&&)|vD=bluIEIGZ@99Jtg@vFM5wem z3L?!p;$tZh&pn3_l@}->nqAI=*jI}4Kj6*&L?`(qkMetmMHGkk(k1^ayuZ?u+Mech z;oAgpuM$N~k`0dI{8TzBZ=ln0a~^QwKeihSQBanN`Fjuz#@4YRy~jl zV2r&;89ZO(Zh(~y@-NUGSXL9#)P-e_G7I5%P8F!#bX>S5Qa`tz!)E=Zf9 z+GQWY4y+82|H2wm%OTfhG#fxIM%6QN+_k6C?-&z=6tl~-vpD3ruaDlaiTB<-lY!t^ z*CGwMLTHb^FTvd^`8sMj9iH}+ zk@#%@d7B8;gS;ZW}vx#htoCuYb`WsC(Bfpy6O? z&TF9duJn*5;%ba$idfZne{^M6)vm_sD3dxUw5l@0+udxEVk}Mqk?RPXeAQ_-wj5#i yuU#cCz4tH96grC4I21X4QG7ZkyN!QuUB3jP{Y4$cuQ0zsQ9yXfc^tTE$24? literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/models.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/redirects/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebb9bd86ca5c8db137b54b0dd908ffd1779c7e7a GIT binary patch literal 1474 zcmZux&2Aev5T4cQXC+IP6Q@Sd_P`zjM?fV3xzz{)8*Y+AYai?c1&9I!CDPJ5++Bs_ zIX)(C*f*0*Y2$FzooVm&(hDP3w^M>`o;D7SvAN&SXdoKMg4fFJ>!7PRP2#Cr z#O^MDyIO!TDSo?L3~8~VhC~#?(2KTRf`gEEw!ob&@Xi*vy8-XOYt;j_Tc){-!GL!` z^+D~?3P;xiO!i?BU1$|sJ@rNRM%zi|v`A&5i@L+?S3SG-vMZY3!{(N;aK13)Vs0M(oW~&!_jKzo{rCWV`60bZuPbdHpLhiNyoUK z{ZBylR63-P-RJ?!(9N!LW7yk^ADQ#gdgAc`zhsAV?-xg74D}CnYnbXWHg|;PU+SWw zC>uwO!?muw0Sb>3N*Dnz_1he+&Z@Vm_UKG|Swx$BczZK)ysxfhI?Kdn#kMeN5oJaR zD&G0W+Nu=i^Zn8wusy_Jw@Y2Sh(sx(5Jg7_JifWnIPMDZK9`2djI%)4CZhTNw(MeI zaw|=#tCtg_c|T9%_qi56!^4lY!mS2YqYlTi!Z7xja4j{-u3L7*dh9 zPv_FUinUQCBYQv|%FjL~b6?MDM4W5`4GHDGMAHqv!HQIM>DTT@;eM;coe$dltE%Fo zb*V>mkKL#$bH%H@MyN?e{PB98``EaVw=#7``Z!B%od^(n-Z-N_!7|AIu`HtJ)iHZP M`Z(gd7vLNI1w=Muo&W#< literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/admin.py b/env/lib/python3.5/site-packages/django/contrib/redirects/admin.py new file mode 100644 index 0000000..f828747 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin +from django.contrib.redirects.models import Redirect + + +@admin.register(Redirect) +class RedirectAdmin(admin.ModelAdmin): + list_display = ('old_path', 'new_path') + list_filter = ('site',) + search_fields = ('old_path', 'new_path') + radio_fields = {'site': admin.VERTICAL} diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/apps.py b/env/lib/python3.5/site-packages/django/contrib/redirects/apps.py new file mode 100644 index 0000000..cab6742 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class RedirectsConfig(AppConfig): + name = 'django.contrib.redirects' + verbose_name = _("Redirects") diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..15a649ff06426b26cf99c041b8ff87a3f3d05cb5 GIT binary patch literal 470 zcmYLF!A=4(5XIJWI_U6K5A{7GRXXn{r-TBS^B4CbQ90 z71jk9`%EYBu*y8dR*-1&5<}l98Bhz4GAKcsjJJSs;BCUWVC_2NjG+*w>Qk4V2i+BL z2CRi6g0nh9M9q#5*\n" +"Language-Team: Afrikaans (http://www.transifex.com/projects/p/django/" +"language/af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6c98b5fde707f237146fce1b1fc3da5fa699e85b GIT binary patch literal 1342 zcma)5L2naB6y6pn)QAf=M1|g^BoQ5Z*CaqT-By7H2`Ld#3zzjJKv)dDL5IBo!KaARo?xNmc)>pS%F7EN-E6S*#?NFq&Z-8`q&l||BqE0YyX z+CU{uw2bM*mC8hUb;o2TCReaEjzY&P<4>Pyj*QrYHNK?QG%GA(TKb|)7xO;p6X zD2%RX!BwN>ebv$2$As3DY>#(F9&;V&%!puF$$PjcyOXl-h0>WUVoLAvqA5!&q9c`I zOS+k*>}I#ASxv@NTE1Ijx0K)pTJ{|`n4}s;Gb{>OI7`v>c)EHetcD?kY(=bR-gB(G z4iSr>yB1G}S3<1PBG-o16fbnnjZ`t+!sPt%=QYL$)iUJG_PbsJg;cWvaAvXK7)4+o&9tZpp&nDOv5u4z6Rw zrm1vtJoy|oFo_l>S*_h>H^w^OYfUJ&P&B0fOflW4XXbdyn7Aq}=Uv5fc3Y~pj;ZJj zw>r5tMq3`*vXa_7B8kvVHf!K6bnI!0ox6!0p)s`-tpAw@o;>?{+=eu}^KET+cp7&9f0b zbPwDX=p;lvf3)LvQD+D6>${yP?}3AX+lG1HZF|Xmke<)O+djes4+($?aJpp=?cm*C z;s1@|e)e-64dXYv-gr1RW_|8@!yBUgA^L2Uz4(dm_`$!#zI~bB-+z~nW?<;HgO8`} TK5qBZSn#1Y?_u06I|%**VKMcZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 0000000..6f799cd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2016 +# Bashar Al-Abdulhadi, 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Bashar Al-Abdulhadi\n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Redirects" +msgstr "إعادات التوجيه" + +msgid "site" +msgstr "موقع" + +msgid "redirect from" +msgstr "إعادة التوجيه من" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "يجب أن يكون هذا مساراً مطلقاً وبدون اسم النطاق. مثال: '/events/search/'." + +msgid "redirect to" +msgstr "إعادة التوجيه إلى" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"يجب أن يكون هذا مسارا مطلقا (كما هو أعلاه) أو عنوانا كاملا يبدأ بالمقطع " +"'http://'." + +msgid "redirect" +msgstr "إعادة التوجيه" + +msgid "redirects" +msgstr "إعادات التوجيه" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6d2d993e2edfef659ed3e7663b29db31254c5c74 GIT binary patch literal 1071 zcmaJrSo>^>V&w;H36AVKljNQ$lYT%|=@2o;yi5k4sh1}S9UknG z^U`{y`!qx)RR-Q?VZC0dO}n~*$&U_-FySig(qe0Qva;z*zes-XqHR;^*W_EU^eQS=8D|TY>nyphthZG-4-8ba}&W!b9 z&-GO-p67ihIwqv@{;Q7IvMfDv#S7_iiDuAP6^%dy8`M|}A2nBkW)L7z9PqI!dd~CK zkR+N9sj(5RHdX>yc~?3wI#z0zNN;RNFQwL4_%5rM6MBr>zs{q%7YzxM%KJ%fWg@nX zO%Oxzu*vP?j@!nX2(OO%AflHFTJcPiN}OsfyPbVr^Ad zLVHM&6Wt*Ug?Nci=pc1$C^GuI04Eb-?y?=9%73(n3LR8, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "redireicionáu de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esto debería ser un camín absolutu, escluyendo'l nome de dominiu. Exemplu: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redireicionáu a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto pue tamién ser un camín absolutu (como enriba) o una URL completa " +"entamando con 'http://'." + +msgid "redirect" +msgstr "redireicionar" + +msgid "redirects" +msgstr "redireiciones" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1363a5eedce8b1df478d5916f8588837bcc9b755 GIT binary patch literal 1157 zcmZWnO>Yx15H;TrgoHSA7SR;#xupo`hlE5#Riz+~PS(x3?ApQhrb$oy350S& z;=+Xkz4X*u3R1*>Kp=7BPwv_$!RKgz>EywF7rqagKI$yC;c;xa` z;nB%rRK3Zo5s&Ut^>%z?@p`lvMM&hEvZI3LH19T&coliK;v3QR2&?o&IM3@=XqO3Z zY)or8hOHs0_CzA+o`nA(Q@ZGun_w zRAMg%2Ra+}HQr%9?8CC`Q9CE+tuCPb@iFkRmPcK!j@D4LU z4He23#zo1nPcxItnW3;l4e|M1CVEitA|JiiX;qo6nq2D15l8zP%7YI_``ui;3ev^G ze{F<=sWmuo9;d1-bgj^RnQFtn8;zhBXy%_cJ5y#oOp0yK8n~SV-TW1pdXq3DnG-$F FeghdhXNv#; literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po new file mode 100644 index 0000000..015a1cf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Emin Mastizada , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Yönləndirmələr" + +msgid "site" +msgstr "sayt" + +msgid "redirect from" +msgstr "buradan yönəlt" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Domen ünvanını çıxmaqla bu, mütləq ünvan kimi göstərilməlidir. Məsələn, \"/" +"events/search/\"." + +msgid "redirect to" +msgstr "bura yönəlt" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Bu həm mütləq ünvan (yuxarıdakı kimi) ola bilər, həm də \"http://\" ilə " +"başlayan tam URL ola bilər." + +msgid "redirect" +msgstr "yönəlt" + +msgid "redirects" +msgstr "yönəldir" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b7597cd450480d5d84067ce8614b406dcf521490 GIT binary patch literal 1437 zcma)5&u<$=6dq`S;))9wK&sH=KohH3d)K(M-DFc}Nu@}Qh$08h6YtpGcD-xujFV7$ zAVn0U6y*YuxKPw7a-fZW3ABBF074?yhMUI#4ASg1>)_aa z!-F>LReMB-MFBOM*nCS|TG{_>xTHt`gMYszu{mB9bnPBBe-EqZ`Mx zxNw!E;+cw)Car);V=bjRez`nW>Z{6D+Kodi{Ji1>iPd`C4J{QdDNNfuN+{uNQKFeu z-tNT0r?IkF7KxH&DR@?IS>0?f_mM-5ENzc&Dn0TglaUf^K1;9Rq0VgRd?qp(rHN1B zHJ&un!h-0enR4c2GYXwc-KKPEsZWLZPixNQOmKx-=M%0lNyYWfI-cve7sxy3S1V`S zitD1#SrE&S)g0BGLy_a5?nA%oo^f#sSGiP9E#rxdxk@viZX~G+1rKTJMk~sAquz?H zf7HYZ;!-_rPlJ#&ySyo!n&54pE{T|DT^V7EEu@#R41wL2II;5o*M)nojy(0b>9m-k1mo+ zD93#|s0>q6LDjlB!=3Ufbn|APGVN81pm+mH5V$s#*G&g!NAwHDqd0WYX4rEofWk$p zK;VPoWP$0sdfR-Zd-?#jYc_L#E59F@O{VXeug$FqG8=lA%qE$i^_C@=HN8DSdLP*} zkZzkhq#u~|zVk#sM%{r~C-a@&GaKd`l=k!k{h0J1r+a3DtOyvJws;tL0%y&v>pi`z zd;Pw73dElI77072W!=_2(mQl`fAE_)+$#;H{r_XxnKvMki|*(xOspS5f8Ts>LnYF8 z@ziyUvWMtH|L~W?`_KI=^R_SS&fEcio8`LyT55kiJO2?!=NB^ABBbyku&bVaWNxv4 E00WC1m;e9( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po new file mode 100644 index 0000000..f9c1dcb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2015 +# znotdead , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: znotdead \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Redirects" +msgstr "Перанакіраванні" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "накіраваць з" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Тут мусіць быць поўны шлях бяз назвы дамэна. Прыклад: «/events/search/»." + +msgid "redirect to" +msgstr "накіраваць да" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Тут, як і ўверсе, мусіць быць поўны шлях, або поўная сеціўная спасылка, якая " +"пачынаецца з «http://»." + +msgid "redirect" +msgstr "накіраваньне" + +msgid "redirects" +msgstr "накіраваньні" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d3e35e4dc528cb6d57e39f7cc19ef56f79bfc4cd GIT binary patch literal 1268 zcmZ`%J8u&~5I)}Eh=v9sQ4CcQk+she5V#P;D@aI*h=K$4+TNTmoNuk&wG*g98UzI( zAqqr+l!A)FfrJD|LPtZh*HIy;`4fC=8;3_&Y3`euo%!Z*`}NT7rykA$$WcfcauD(g z;?6gSyZa8Ag8YEogk0F+dHaFSfG&O!*aK_=UHm$5H}DhiIpj0s5bSW5=RF4A0p0`l zAjtWj01pFS0*?SUJN_>~SLX*16fN#OK<9I3CuCnsYuD?j9_YQj&X^SCNQsisUZE0c zD)EGhf<$C0LJG(I)iH0hh_fYGJ%_X;tn*N?g5cGF zF4p6as|c&?>+E@Ub~bAqZ8R(7i|9Ut9VK|bqeF3H4TzpQY( zh8c~RGr3xf|1eCY3RhZ~k*UHJc6uw$)tVNHjV2}O{#`()i;?Lz8c;FJOvH7?V|GQV zstzcrwM;!SI81GIq%WakBb4tS&Up4kI&W9(M|_*I01<+a&wOZi0COUzq*fRK$V9rQit< zkX;4YM+Dt-b<_Kl-u?Y0cN<{9 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..12ffedd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Venelin Stoykov , 2015 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Venelin Stoykov \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Препратки" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "препратка от" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Това трябва да бъде абсолютен път, без името на домейна. Пример: '/events/" +"search/'." + +msgid "redirect to" +msgstr "препратка към" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Това може да бъде или абсолютен път (като горното) или пълен URL, започващ с " +"'http://'." + +msgid "redirect" +msgstr "препратка" + +msgid "redirects" +msgstr "препратки" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3d5ed4162e9bd3d71fe41fb00e0017b083b06c86 GIT binary patch literal 1319 zcma)5U29W85WQ;siiqH|$oSNjy2(vYTW_t1T0v>ClvJNL$tJnwW;fisY3qw1BBCh1 zSYJ!AZmUQwK8OXWzrcSWvOmSM+n9jg3&YIpoHKKFa`Wx@z;b|d5OxAqh8=-Dfw}V$ zHV4~=-G&|869k9g8}LWr+wcy57ydB(WB3=a=de}eBm08j6Z{wWlde7x1SR;_@FVbF z;obeA{Xqaq?;Jq17lv~0poP~7D1281S2C4!w4gTEO&a1EZq$Mp zCWSK9J4r%wvs095p6XaOXc0^rY--((3WdS^Zr7}-I!Vnn{<-665=+&jQ*%^|q?&5+ zSd!!|k*CQe-fAZzqQQb#5K?D_Oz^bYbbV7%i&Ih6y@2YeYV|X%dT|!aq-q{mcD=@K zi8PCqjHouxWkcm=MO&qsO=pd`#x8dn87r%Zax*u}>`E%Q29{mr8X`(z@hmHbEId!e z(dbNRBrJs?fNWMQ#I9!_Hwq9d0(UMt6OM#9xhbA$R!+Ih60TJm(G4yo7Ct57nn>sZ z)F8c-_%t8Oy1EFCY;<@-u(IH-h%O7+;7LqF-R&+eF6OoC7}v#8zN%V<-8cPkNta%z z$ii@L`ug-_|MkUun7g8+##UMRP8-kDVo4X;3AR5@)h16fp(p0b*VtGe=VsMK$|hx1 zxnC@zu}Z9aG9#+U+)UC*dBU!#w3S69+dj=EO5?N}P7FypH9^JU@myfdGi$cUnoVnV ztl2<>i?`N%wC25Ce`?J;yME7_6%^iB^NNP7dE~<_yZ*38T^mOI0qUN+GyS@ULk7Z0>_6WDn?)3kpxZQ930~>q?Xl*Ds literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 0000000..f7a9334 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "রিডাইরেক্ট করা হবে" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"এর মান অবশ্যই এবসল্যুট পথ, ডোমেইন নাম বাদ দিয়ে, হতে হবে, উদাহরণঃ '/events/" +"search/'।" + +msgid "redirect to" +msgstr "রিডাইরেক্ট করুন" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "এর মান এবসল্যুট পথ (উপরের মত) অথবা পুরো URL পাথ ('http://' সহ) হতে পারে।" + +msgid "redirect" +msgstr "রিডাইরেক্ট" + +msgid "redirects" +msgstr "রিডাইরেক্ট" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b626694751eea2d8ed9480f327ae963c3dcd2dc GIT binary patch literal 623 zcmYL^&u-H|5XKD@0Y+RnbC_eRYU6cOXxWeo^`BH|M5qim4x4!FZtLt?yA#sBL3^#> z-UsLzi8JrPvoMZBGSY9qne{j0*}pH>enuRRnODpK^Mt9GCa#&M%nkE`xn-U+cg!>9 zp84@0ihi*+Gd@0Szkgzb8Sl(pJMGii9sk$F7~En5SddD4?ksM-=ik>iUUokpexhYB9%hE zg>+kObvI>KN;Zm9{BD|=E8jMoM9RK5YD;cPj`&0e5}DUFRGOSu@IhN^0-T`9v4VHJ z4VUk$dD$_xaJ$@N%c(9=WT+e0KC;gXd(VdKZ zvJnrC2ZyW2ryUvZJ4JglZ(SK`R|Nl;+xc^UfM9<*tH-NG)U8@)Kv`GpSci3B)Z, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "adkaset eus" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "adkas da" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "adkas" + +msgid "redirects" +msgstr "adkasoù" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f986b59c714ce0ea37eab9756c77abde5aa07b9b GIT binary patch literal 1115 zcmZuv%We}f6dj zkYe2D@vzexC`TQssm;X757-hM*>)zcJX0zCfEJ{~jv4VH85~ou%5&P=-6H3u^-A~Y z0Fg95@V-nNjrsZ{s~eaq?}o&GXS_yy*vYGI2t`TinnEf~S{7WVjYC_ZjrC&N^;K7_ zSA8d1CZ*cW)0VhzS$b&21L@I3Gfr-ZBo^^)N>cmvdS}H*oLeW4Eq!&)h+b?pLzUqQ$aEY27%j z@PG@yUiaYOpzcFP)#Jl@#}tjpoqkjPE4#tI0AgyDc?X@0?TQgm#)nh9*bjO4rOX*fy`DvRewOwr|udK|)Lt_h(!#zp)HfEx8w6#g$D_M%hH%W6cS;YL zocwcoCwZ-$r2RK#n_rSD7)3C+pgKK4J*$c#, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "preusmjeren sa" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ovo mora biti apsolutna putanja bez imena domena. Na primjer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmjeri ka" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ovo može biti ili apsolutna putanja (kao gore) ili pun URL koji počinje sa " +"'http://'." + +msgid "redirect" +msgstr "preusmjeravanje" + +msgid "redirects" +msgstr "preusmjeravanja" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3b7028871a187d71f7f5c143b291462c7e98eb94 GIT binary patch literal 1137 zcmaJ=O>Yx15M7{r1-SIgVK_Baak7aDEn9+GN-I@rMHEsv7H8MlxZ1TB+uMZy0SB(! zkU&Cka~6;ZvuRGU_{16^i` zFZ^%C+ayMDRwh0bEh*7Cmx>h6MU8ewJTEd4(NbNU2<2?u3U1AvxP0e3US46<6R^9RUKX~|Q;x`O8sZF9#n%&>Yo;NfssbH1MJi;>T$ zPj55>a3|^YnAevp2YUxQ^Sd`{VP#t@hrzP$%L12kV&v*Yh8M6w@qimETWYS+flLhFD;_=o^)r&j3A&&J1Y&(*seCYjYt)f(6*WzG<925MYmeiSl+12, 2014 +# Jannis Leidel , 2011 +# Roger Pons , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Roger Pons \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redireccions" + +msgid "site" +msgstr "lloc" + +msgid "redirect from" +msgstr "redirecció des de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Aquesta ruta hauria de ser un camí absolut, excloent-ne el nom del domini. " +"Exemple '/events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Això pot ser bé una ruta absoluta (com a sobre) o una URL completa que " +"comenci per 'http://'." + +msgid "redirect" +msgstr "redirecció" + +msgid "redirects" +msgstr "redireccions" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..22cecbb096c0dcd7583ec41ec121641b039809d3 GIT binary patch literal 1156 zcmZ8fO-~$05S=*0PS%QI46O4(KteM13N7Sjsb;3w8JOu_b@#Ba zr<@~2oN_=pksDH0$q$Hq8Susb!Aj2dk8t(wnnkqq^r~uJRdw~$n=fa6_xOCqxX(x! zpELeqxbq*wefyuW!+6X1neoF%p7$y9DYMi6$$XdjA7-cjmwATy74wksnsJZ) zYrIaH8HiCrL_nEMNdr3=8I_lopocbvc{ChRhqM5SKf_*`=diQ=1dK&(GueecXTn@+ zZ7=lwx%#-ONmZFAuJFx@4}p&2yi8mww}eC$m`RXWP#xBfu;}F!!kkZsB(3ocp^j5m zS5NMJWx$?R#niLv$~KxeZ?Xjv@ z13tAUXsqaHlqN^3bO^h7b#`%ru!S)lz-r;>dxJ8G)KNViJmw79EwM|YLs*2cHlUdQ z!sL1T{eIoLYS|vKTowL!o)45ylKt5D3$?Ayt@Y{Tje1a9Q_}LYiq3J5N3(Qf{a((` zzXEZJ+K_GSbT-8DROfo_krwMRR_>RDupDLf>XISErq<3&jk(xRx-cQg-pDnruU24e zw&rE4)mVVOWp9y|cK+FEkK1_zrfHLrbnN~XB@L#xB;Ojbj$qpX7B^6$%+ z1X1U^}O1HAaH8cN)+hB2o|gxSek z&ho0d4$(1i*Br+^Cfh$PAJM?=Xmu`+>%e!ch6gz&A, 2011 +# Vláďa Macek , 2014 +# Vláďa Macek , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Vláďa Macek \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Redirects" +msgstr "Přesměrování" + +msgid "site" +msgstr "web" + +msgid "redirect from" +msgstr "přesměrovat z" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Toto by měla být absolutní cesta bez domény. Příklad: \"/udalosti/hledat/\"." + +msgid "redirect to" +msgstr "přesměrovat na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na " +"\"http://\"." + +msgid "redirect" +msgstr "přesměrování" + +msgid "redirects" +msgstr "přesměrování" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..737534d941ae04346d1cc5bd2b2c84bb4a6b9410 GIT binary patch literal 1132 zcmZWoO>fgc5H(P~!pDI#hvCvTYBzS$R1GcxNMf>CI>CvMZ_hik66q#i>&c_88;A734I2P+l*;ILHkCD+%gza zo53PA_=`Gabx`;il3WNlKH39gskU6EP+%l1WY!Kt-(P5qvzkohB6f-Y&A1F~6p1`` zq4-LO)qrvdk`7n{wnua@6fA@VpPe#kjc*v$QRedMN!`;6Bw7t-%Btzzc!ye@V2@-s zCQq3*T*(mP6Dm_xJ7PnnE!j6IkIADvHKeCPs2v{k$fjo0qL*w@i$%18<|=6hB)ALB zwXoe<3R*#cMsmbXxyw28t)YpuR-oAlSKCVgp4uKYmh?20Mo_DC2v4Y#IPg8jV%G|sYMV-0oGIy*Lu}5nk@bfHXTJ_nMzvwKd)(V0ote+QD`A>!%SgHJ6+)-a z?X<`cqOx`rPki$xvZhIZZ*Y2Y1cAIs000D&HM9Yb0CE!jMIxs&E(%qVs zt%Xlk)@$Ad7ipO=t~rfq?mcEga1DuyaaB0(Amva>5JlO?wR9`X3k!=0PBxD+71u$s zyjoNtXd#_9W>KbT4qrc>UDvG=X8@U!Rqp>%E, 2011 +# Maredudd ap Gwyndaf , 2012,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Redirects" +msgstr "Ailgyfeiriadau" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ailgyfeirio o" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Dylai hon fod yn lwybr absoliwt, heb yr enw parth. Er enghraifft: '/" +"digwyddiadau/chwilio/'." + +msgid "redirect to" +msgstr "ailgyfeirio i" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Gellir fod naill ai yn lwybr absoliwt (fel uchod) neu URL llawn yn dechrau â " +"'http://'." + +msgid "redirect" +msgstr "ailgyfeiriad" + +msgid "redirects" +msgstr "ailgyfeiriadau" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1c8d0e46ea53da50361a20ca9487b0b2b4b686b4 GIT binary patch literal 1114 zcmZuv%We}f6dj zi>_Gk0qiQVLE;k-toaF!+mIlHrK96JK0dbZobOi`-X$0pfonhkTn0V@ar^+{+D~8) z_yxQG9-c~)3*h(QsQ&=I1pWk$`p@76@E7n~;45$i^~*C!@(NsmpMt-Eqy9R?(WgG; zHE`5#g3p87U|1Y$&w}IGahwL?dK{3<25ggav1)Un9Cw3HI(_A-D-G>4u?l^5ghK9n zt4D!pC_|qXrNAhzY>N#7@t6*nypLi8G z*>(0c9x9#`;yF97tjVc(Elp`_Z5~<|#EvgjAs&rNFFH1-+U~QC*mNudv|>vJ++-zd zu8C$Qvb)s0ov*GeXDe9-p=k41MbEkJHbkNc-K~5zTh1_Q+tLToang7#gLOHzoEp#z zTN=-X?zz>RWd!5JP&RiGI>ai0o z)3x!J<#cCXh1o69Pg&d5BPX?ZY+dDZGQ;E2Z>+4-$#i4U(2WghF0I#+XBEPyN_OyK zmuzuB&<4l|ZiR-7j}9HOI13?CrfAXIijY9lvu+9T(HcR8W?*Ah!aR*^3Z{ySc^an& z_<_{__Z}56LIjTv4I4Q&91y~R=W570rqI0UbHOh4mdmuB*gw~w&yYg-R~3|=S0|60 K@V-|CC%*wD^FTEK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.po new file mode 100644 index 0000000..2d557b7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2014-2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Erik Wognsen \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omdirigeringer" + +msgid "site" +msgstr "webside" + +msgid "redirect from" +msgstr "omdiriger fra" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Dette skal være en absolut sti uden domænenavnet. Eksempel: '/nyheder/soeg/'" + +msgid "redirect to" +msgstr "omdiriger til" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Dette kan enten være en absolut sti (som ovenfor), eller en komplet URL " +"startende med 'http://'" + +msgid "redirect" +msgstr "omdiriger" + +msgid "redirects" +msgstr "omdirigeringer" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3ad3cce399a6c943a222cb9c31db2b854e550748 GIT binary patch literal 1136 zcmZuvO>Yx15M7{r1;K$chvC##tv8#{s%1-ne$q;fh@ymE;Na{|vTk?nmF-Q^TmJ+H zB!mQK4*USlT=)Up5cJBQV4S20su=0%dDhQk&+Pkof9|bEahvdf5EJeaJ`-I0BDlTZ zgf`(1;fSz##q(|vzaw_~PsDeKzYsh9SK>M1Z^R!7-wAF%yXJXsh)*Z{gV^a;N$l!8 zBfdvmCwBVR#5ai(Vk$AxUMF^UySPel`z}Z_4Jzy1a9I;$p)s01W zU#_?eIE>OFc1P(-h*idg1j#e>VRy*0JjD>^%h*S0P1zvVQR3?A$-Acu=xUYCGOMO* z;~8PmYiM;$jk1H7y+Un-k|D&$T=rC{iMi62)lE;tY^&%Q)>0vq8ZTRHTO+rmWjox` zOR7O-l~n>3Jci0zxKdpTszE?P*2KPWHD|gt60zzdsH}&pD@y@I>5v=CTAE9fa;tO* zb*@he1N$nqs534lJQ4C#o$%+`XeXI&_*gup^Rid)9FLiSL4`-1$J6~+KPX@D_hNXEFZqlQM8$Dk(P5l)n|iY23x9hV^!7A9i>p24Q< zQuE7XQ%q3$d^t*@sKcJU@Hy&-$3H Ups(aVndDJ2OR3!>?2JtM7v8){&;S4c literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..0a048f7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Hagenbruch, 2015 +# Jannis Leidel , 2011,2013-2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Markus Holtermann \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Umleitungen" + +msgid "site" +msgstr "Website" + +msgid "redirect from" +msgstr "Umleitung von" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: „/" +"events/search/“." + +msgid "redirect to" +msgstr "Umleitung nach" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Hier muss entweder ein absoluter Pfad oder eine komplette URL, mit http:// " +"am Anfang, stehen." + +msgid "redirect" +msgstr "Umleitung" + +msgid "redirects" +msgstr "Umleitungen" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af954a57c7feae5f3f06f92b6cd0bf3016fad96a GIT binary patch literal 1242 zcmZ`%J#S-06n((*WkdrKqCn_2D2d3}&rZ-TFPN|0th7=hqTsL%&G^l=J@$JuPc!2< z30tM1q@qBPD5xkX5NS~;vZkSf9zo5Y;Ee6W0>Vf~XYSlHXYS10-(R}*WrFcM@EV|i z7lH49IQ{@)?oZ$V_zQRleDFk)JO};?9QEITUjTm(j`|U^{!Tt{UAYIU=PZR8< zl|cwq)@ZEM=dONW$AyZ<|8`s_KFW)+id%6cDO*Zy$jFlGw0$JYs^E-P8hpqm_=acc z@UKC0)oY|L+VMa9CTp?tToR@;5ByS;pbW<9OlwI<+& zMd!G}Edw8gMpfV^wg?3}&!K(Lxi9W4b@8wsJF#tY8-FjOJ6#>FtHsm$Zf&m^J6VYP z)|EaZQ_Vu(-rS=3w7qKHXr^hq-K6&@B}nFB3t@8^ZqTDgSE)^;T1aiIZPk){vfyEL zdG6igGi8QshBE0`DlgBc7Zx2mx@un|$v^&FPA^81y2sNqH1fz&|MJ`od6=V{qgL6< zPEXBoZ0L0wU7n+-kEa)OBJ+W*bo5|4`A2hGxRK(aoSxeMJ8PXvUE0{$Z18z~)HkcN lPJ7ccJ(`|Mbz_IC|6Gof8`fxoLT^kcd&9C!JS$Y2{0*&Kc~AfV literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..b605e43 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Dalejpósrědnjenja" + +msgid "site" +msgstr "sedło" + +msgid "redirect from" +msgstr "dalejpósrědnjenje wót" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"To by dejało absolutna sćažka byś, mimo domenowego mjenja. Pśikład: '/events/" +"search/'." + +msgid "redirect to" +msgstr "dalejpósrědnjenje do" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"To móžo pak absolutna sćažka byś (ako górjejce) pak dopołny URL, kótaryž " +"zachopina se z 'http://'." + +msgid "redirect" +msgstr "dalejpósrědnjenje" + +msgid "redirects" +msgstr "dalejpósrědnjenja" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d1baec4d03cd172321e8ba210c0f3972b917d8e6 GIT binary patch literal 1384 zcmb_bJ8x7+6uvw|7SXsw2pyEdw(#sL2Fx`^Nx&c^43@Qqdb~T{z4-2()y%AIIzO-w zl0l*XDP2T`ka<{Oz+l*p25F|EMM+J=PvD!oevpKuVx*(*oHO5f&b=QycHRkaeuNx= zR3Q5xOAvqlg!sF^Afu2^kjs!?w*|o-;O{`szX#k4d;;|RHQ-L*JK$Z&d&oi9V>^Q2 z0dN+0AJ_xZe&7e-A>e1=Pr!~{ZT?YU2kcQGQlz<|rnLdVcE}H2!SVGr4$=p^y)hyx zkrHL2gHkQhROShd2@;X12}LmYn3i$V2x@Rsqb{!Dk&~jEB(7<^8OJm_a-Ou|%0x+( zrVvS;HDelKF4viDXVo>?j4M9zKQs1_m@dc7iVsCes>nKz5=wYoWNC1k*Bh}2sWT@g zMPhVL3$DsFpI5E-y{XW+lJzai$W2`bIx->{R`Lo4W#=mFl2AI5Nl29|JgLgeh-gS< z*pRM974}=Rs#!^flo`HQVyBeg23&TU8+2047mlz(p5>2I;aJ#PJe)7)^B}SjF&X)s zTfAc+vEt8E=nIeZ9?s)r&U0;8N%2I-+(;GDg{VA1Lwr*42`v9aeO=2Yzf`e@I9rzW zlZZ;HORMm%)YMeg_>9rGnD+c!d!`MD*MoB+&UI&o&J7K2O<&07 zGpA%?uv%8S+Q4{5Oq*OI#uM~YxyF?iW?-~*hV^ane64Yz*kDqY{@Ft68;i_llOc&X zGaNS+kJ%Zi>N=#Pk(zp-*iUVBpevz6161hl&jj|iePfsHE4%Ej*%h~7U%H$2jhnYC zcGb<{+AX+iZjs!Ko3#(!jQ5idA!v`&SlAESo@KBW?Q0)mTV&U43;q^@mf%>WF1HB6 z4L65us5cA26{_9n?jieVBMqFd?IT>Tfa$+(I9hIje2BY_qR-n+tl5>XKlSg~D%$bc zQRgj|^EmBg-oBu8E{uq&Kv*Vs-QB_^y33ONBb{l8hLeZ|a9hS34Jc0h_xu+5i9m literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po new file mode 100644 index 0000000..bef80de --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nick Mavrakis , 2016 +# Pãnoș , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Nick Mavrakis \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Ανακατευθύνσεις" + +msgid "site" +msgstr "ιστότοπος" + +msgid "redirect from" +msgstr "ανακατεύθυνση από" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Αυτό πρέπει να είναι ένα απόλυτο μονοπάτι, με εξαίρεση το όνομα χώρου. " +"Παράδειγμα: '/events/search/'." + +msgid "redirect to" +msgstr "ανακατεύθυνση προς" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Αυτό πρέπει να είναι ένα απόλυτο μονοπάτι (όπως παραπάνω), ή ένα πλήρες URL " +"που αρχίζει με 'http://'." + +msgid "redirect" +msgstr "ανακατεύθυνση" + +msgid "redirects" +msgstr "ανακατευθύνσεις" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..eb33e60 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/redirects/apps.py:7 +msgid "Redirects" +msgstr "" + +#: contrib/redirects/models.py:9 +msgid "site" +msgstr "" + +#: contrib/redirects/models.py:10 +msgid "redirect from" +msgstr "" + +#: contrib/redirects/models.py:11 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +#: contrib/redirects/models.py:12 +msgid "redirect to" +msgstr "" + +#: contrib/redirects/models.py:13 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +#: contrib/redirects/models.py:16 +msgid "redirect" +msgstr "" + +#: contrib/redirects/models.py:17 +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcc2fc51333228a9617e09ba1058373d60eaf7f0 GIT binary patch literal 486 zcmYLFO-lnY5LNWFN6#Kc@X(^uB%)YTD}Gf_EEZY4O6;cF$ab z*`uv}NZ601EAVn!M$Em2Z19ldRj?+p7OzdR8V;m7La9(4gHl=^?@1*k3-QsuyLr!* z?hutkdBi1JsXfWa?oCXX2Sc$k$p;O0hR8*@x2~`ioU$8E&#Oh+ay0U1Ttns5looSq zCK`HFRxXaAaWRc4n97+ZG{z~_T8P#!&}`V-uoH-KYEp+bi9C(a;x;N)7E- nm;Rk=Sj@@>)szk6jSrKkf$BvXy9XUuhTR6iP8U?Oldb&%5k-%V literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 0000000..f2eb088 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c36274666408f3d5d47d1710f6a246bb99fc5634 GIT binary patch literal 1053 zcmdr~!EVz)5Dic$7$GFMau`l&R5o^^LW@HXYDrNc5mn{D5pC>=z14cx+Fd8%!UrIZ zAn_C2;b-^;uH2YSN+R(IjP&$o*7Ig&XZ`ce)|Up^HsKy2A>1TzLLhRyb>sx5RaGhg`MiVpx6sjM?ErIwKCk_!cjm)M5Ef|r%V7@8r@P&pe~ zq~DVLpO> z7%Sm0gIBaP+E)v9F4jGt&)d$o5K~;VQ(cCuOa3K!Q7=UG?!{r)3PvZR!Db_!b`%_G z, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "redirect from" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirect to" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." + +msgid "redirect" +msgstr "redirect" + +msgid "redirects" +msgstr "redirects" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..82950c4e347cd89b1cbde913b18a7f78a065450c GIT binary patch literal 1138 zcmZ8fyKWRQ6dfSE7ST{sT&g5WygM5K2@`^VJR~F{!fFB~I6HTDy*p!%Y|kc8((wTl zw3G-WK7bNv_y9TtH9x`ez7nu>bgsw8$M&7`^UBhRIsY`R+S*gJ61-AZ;@q%4bswq40kdP577wjUlI)@PgR zZBsPH@0?OTF=()9EY@}(>~0@-q*;$^n?`%ITcj^aJlXS+Z2fr68!PKHE;kl5UE84M;(9H* zm#dJ5^$}OkeG~l!QteAA literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 0000000..8d613f0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2011 +# Baptiste Darthenay , 2014-2015 +# kristjan , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Baptiste Darthenay \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Alidirektoj" + +msgid "site" +msgstr "retejo" + +msgid "redirect from" +msgstr "alidirekto de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Tio ĉi devus esti absoluta vojo, escepte de la retregionan nomon. Ekzemplo: " +"'/eventoj/serĉo/'." + +msgid "redirect to" +msgstr "alidirekto al" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Tio ĉi povas esti aŭ absoluta vojo (kiel supre), aŭ URL komencante kun " +"'http://'." + +msgid "redirect" +msgstr "alidirekto" + +msgid "redirects" +msgstr "alidirektoj" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..68de418d6e8273a3ffdf789d9bd0b0aa8179e860 GIT binary patch literal 1143 zcmZ`%O=}cE5FIsst%~5;LwQOF&uU@ppLe z7;l1t;MH5ei+@2x&;AKt?`}R2Yx`fHSgz*v9}S{W#A@|0oQ)_|$ zP-g=i^eOl}cpHoogW4euy~8>STpa9%{YKjeWuprrSmjJvPQ8oTJ>@8snmSCZe2*<5 zkR508$}^SH_h>>ooR}S+B!kbiS>-vctuB%C(t4%4)JGDMBW_l zUF4MKXvLZ>JX9=ZVx6s1MkkbQN!>NIRW6P7V%c?7CZ1MZC)y^V+RBTzn71rFwBnic zxXE@ zYFW+B8=Biu`QZmg>xT#X+ZFHAqkd17rBdoi7X!)bsVN>KU3V+lWzl9?B=oYBS~>ib z(X{*he%*)SYLjtqnkdR&_~+GEP1y;tI;o_Bqt%<(s7 zDD6q>*w3!D7sP`TUFfyRRFv!X>23LFi_uXK1*c zozQe^mYS0@wIeU47$du=6$VpQoH03gv7=a1r6t+Q%OhJ#n!q~^Y~|U(lLJBUBTnHQ z2r*6KqEwtR4)tkkqQR(I#vQhYpX8v?$nkPy%{|tcA, 2015 +# Ernesto Avilés Vázquez , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Ernesto Avilés Vázquez \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirecciones" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto puede ser bien una ruta absoluta (como antes) o una URL completa que " +"empiece con 'http://'." + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redirecciones" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c28b2a3ebe8d4a867cbe7c2326741e4cf389d6b GIT binary patch literal 1127 zcmZ`%yKWRQ6dfSE77!9O#ihzF!TTan!bB-T*q}&>h&CG#6?kXv?mC*W2iud!e?UP? zO@Ty9heSie7a*wl36A%XL`YaVI=1KdTwl-md1vljgmE3X3#7m;;3E*mFCcvT4eSGd zfEU2}g($iPeh&`%58xZ%PvD^c0-ghZ1HT2n13~xtQWQzB2EPRV0N(`Phxj&l8613` zf`fh!d>Jgkuo!!Xb*LT2Md0dqHmNtAMzD>pghiKAWjXOK>W!46L~80YvGOCfgoW%o zla-#SkbXo}>9AuCxkd(`X;5Yv?RU4yd1<}ULps7qnjd*z#Er&$ed6jyrp(e{{IBB! z;^QPM({L0eDK)uNnzYQhPMu?!7a7Mi-{3>m-ZdOcn~Z|5o!RR6J+vl+iJz2T~7BrOSn}UhKG`O2y-H=tR%NRM~yj6C0MLhgLk19ye(> zTT7zV6wOD}T819UQ z)T+Vm)q1y4tL$v;bj})Y)ti+Kqdjaz@1#Iyo{xQ_$ng5Bl#HZx?AP{tn_}fm7s?IT zijGc9_+v4x^p!uobxh-0mEEjFJ7Uw=+{L7e@zSleS7|a`t7^KpMy=XvWfs2#FUKzG zIB%#ZIc0K)Uth7NQcJR>m$M{Fs-jy%(puHWgP5@*WDwg(3zTn4Bseb=CyY&fK8~m` zwM!Xs3{|EHm(wVouucteM%v_ki$sn?skAZ(, 2011 +# Ramiro Morales, 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirecciones" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debe ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto puede ser bien una ruta absoluta (como arriba) o una URL completa que " +"empiece con 'http://'." + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redirecciones" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e591305e66ed78b1e8c33a1deab61d06172920eb GIT binary patch literal 1147 zcmZ`%yKWRQ6dfSE77!9O#idFj@V*2}GGQZNNu-EGiNXd7gphaU?ykd(J=mVSYJP!& zmJ)#kqNR&O!#|)<^AjBJZXQCy($Vqt9G`1@&aWF2?;?!Lz)c_pt^uEbFb;w6?KiLq z`~jW=56?u=CGdN2(0>450e=Ap{de#L_y_nS@Dm8S?Q>D|0{j;I5_|~03SNNtI`|1V z_`CoIeII-tT!LXS^bU3C9mZMU;&3+VH=ahYjV^>@gHvTW@h<8Nl%qsy>N2tN1Ga=h zcAd#e&s0c1pegCFVzzmj3_eq@%re^CSRv=7^-A|?2RmtU;C&I-YLnHGs~eayOM~&h zj(3Q6ldMd`Rp~I-GNasbzO6@Y~jg6@- zZDt&;mIq(WKHX39((I>7?msZ4&y0CpO-#OkZMt8|K8p^^Jf^3G)XL#!v`uF6u9DL< zHGc4&ot>%={;J2jVRLPC!z0SZPBnI~+H1Ax%Ifm!;>mL~s`X0SXpgrRoxKA0^}OqA zMTUPePsu=9$G)}MSrW4+y3nr2RxIkog#Q@RY*+c?L&r4iRawtUD>JcVZ0=&x#jtd( z<~)t2ttm~nTGW`HuN;Lk!F#fc7M(X#l$pq6X3O?2yZ$AY>A& zNDqW>N+dcj6eo;DeL9}-9=oO7Wqa^h4ttDKFURrRW1Sk}j5OZcBBjHiDy, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 22:02+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirecciones" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto puede ser una ruta absoluta (como antes) o una URL completa que empiece " +"con 'http://'." + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redirecciones" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..81eff77da55e708b95356198fae4652071bad380 GIT binary patch literal 1136 zcmZ`%%W4!s6m2!WMn!P#;<`#gteKu6n%FU7%mV@$jB%nOh}3l7%v9*EYOAV~N&dry zOI^DV+`1Fo_zNPs_9r|wGkG9ba5(pNpE|dz`uw~x@ixM`4BP}V;2Q7|2`%Y2mJ@|74Ro;(0>6>fWLv?1K)wG=!II(P{j ze4c=V{uTH{i!)_8^)Bl4m7`Q@>N2tNeYS)~ zcAd#9&s0j^rzz?1#O(1j8N8;QD$i+qYlEDZ)+^nkee9&kzV~I)XiU~euC8yYJPXGE zI^HH8q8C$1}PAJ=zx@T%zTpH^|+x1i?9#uUjIwqmo=Hrf7wk$ogVnup< zNh@yN5zSb{_oz9S%(iCYRvbepws=nk&lBAoM4}1Z-DEbNiLq)M(s|LbQoCGwV-s4+ zc|a?NRZjOMO58>3VGlQu*HcqGfL`}1*<;aRStRtdlv+9bg*FdVYNlywe9!y)`*j~| z)eaBB*2d^yN0g6!8th)TUo@s`?e+HR$t^VNac$XXk1H0PgA&K|Jn)S&$FEqRv@fk= zzqs956Z0p!Fm8vfSk7)@%FClvN}9r94M}TNS0a-`MaUx_BRNpM zsgUNPRGcy%>eJE0gt1-5h-R2FPP-h(@_=<_h;!1W=vt%`B@(K%GDznxd~@XFf9X^` ZWk(?l6*jw!PxbOBpebS_Lq?T}{sJpXMcx1a literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 0000000..3e4ea83 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011 +# Alex Dzul , 2015 +# zodman , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Alex Dzul \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirección" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "redirigir desde" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Esta ruta debe ser absoluta, excluyendo el nombre del dominio. Ejemplo: '/" +"events/search/'." + +msgid "redirect to" +msgstr "redirigir a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Esto puede ser bien una ruta absoluta (como arriba) o una URL completa que " +"empiece con 'http://'." + +msgid "redirect" +msgstr "redirigir" + +msgid "redirects" +msgstr "redirecciona" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32f6e8fd6f68cc26000df003f93a77c87967a3b7 GIT binary patch literal 486 zcmYLF!A=`75T%0C9yxQEN*of=iR}nPaGI)u1}Rk{BG~4NOm?y{+Sn`GX=wk0zu=qt zEuBpedD4?T@|!nr{O|ba^?>n-dBQwp9x}f$8}yiO{CLG@qxrxz_-C3Y92GdD5UqC_ zif7|WpWRdKL&8ZcZGqS8GGgvEWYfDGZvvUbTKr)WY3NFIfl{Hm1f{gRJd;XF7UDhq zwvFdrcaBP;yx{b=kyPcr; zI2(#~HW^KZ`wvkancaAo$Z^m=HE*2gC5gH+*7ae&G$B$N{K{{!x7Rfz7Zh;l=Dx75 r)X;mf=_9#@?W}BCt%IrX)`wNp;OcD|2i-pGu7j3?&jV2Hes=I5Eewyi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 0000000..392e5d3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2c78dd7424136da613ecf8e17cd17e0bc16c324f GIT binary patch literal 1122 zcmZuvO>Yx15M7{r1tB30oHz`prnF8rQK4l^5T&G2Q43K>;ea?e*~!L@*IwD)B>WJN zkT@ZZ9Jp}nEfN@Vf#!FTq1r??DZdsuMmGB_WEPuCE{`-kL^>8($QP}6!v6kV= zO766Y;0aes!@dv$-iP~?jM7qwhY1~mEOm7HfI?J~^8{H7c^X08I;{kqVsUoF!{M;x zyrbyi$cL1tHJy;0#h1~QR|*Gv2lYkul~P#P(aO=$veui7%5yk!_EqP5LJT_>pkU0G?t<-Yig1=L6M+pD` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000..c82aa5d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janno Liivak , 2015 +# Marti Raudsepp , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Janno Liivak \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Ümbersuunamised" + +msgid "site" +msgstr "sait" + +msgid "redirect from" +msgstr "ümbersuunatav asukoht" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"See peaks olema absoluutne asukoht, v.a. domeeninimi. Näide: '/events/" +"search/'." + +msgid "redirect to" +msgstr "suuna aadressile" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"See võib olla kas absoluutne asukoht (nagu ülemine) või täielik URL algusega " +"'http://'." + +msgid "redirect" +msgstr "suunamine" + +msgid "redirects" +msgstr "suunamised" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..40debe9196e24f3c394c17e3c0c72c43beca1428 GIT binary patch literal 1119 zcmZuv&2AGh5MH4C1%U)-4%1T-HO_8AtClT6v?Wz5wNOQA5ywe(lDOH}!S*&G@4S@5hTr?iIA#1| zykhKJ34&Y9@0q>+1M?l`Pt0EbnR$iz3$xdJo5$(eEMGIf=KZhCUcbuX`^;<1_n2$U zK7PdP&pBh}64TgqW*_tGD&ywVnw>W{11=lf@J@pgX{haN(CkSIZB)=AAnAH!fE{dE zoo0?;h^_|(v>eeFR0Pf2(8IV43yseK+ThX;7CXU+ KTHQ<$2EPFrGd;fm literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 0000000..528daa8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirects" + +msgid "site" +msgstr "webgunea" + +msgid "redirect from" +msgstr "nondik berbidalia" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Honek 'bide' absolutua izan behar du, domeinu izena kenduta. Adibidez: '/" +"events/search/'." + +msgid "redirect to" +msgstr "Nora berbidali" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Hau 'bide' absolutua (goian bezala) edo URL osoa , 'http://'-rekin hasiz, " +"izan daiteke." + +msgid "redirect" +msgstr "berbidali" + +msgid "redirects" +msgstr "berbidali" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2969ccc7271306ccafcb24fb8f373f4bc9a677ed GIT binary patch literal 1241 zcmZ`%J#Q015Iw%Zhyp5vD5gsStbGna2^WG05F{i5mgRs%gEscsJ~-c++jSB|6HvYi zi;e<`ipCHjnUF|nsA*^@_lSfbEd_spx3*)8ua(}t*}XS!X6NqfvAxe7tV6&_pa2{J z-U4=g1MIu+z!dNUxC4yua-4(U7htP@1wIUZ2e$eT;Jx6F;Ag-m;5hbo_c+dDumVf) zPw-LjJ%~?%AA(PSUxKZE6Kv~z2E(G|y$@{9?Ai?+XhrRMozQ`;v)^vAqToj&ua%Q4 z`-<{Bq-jCI*JTkAHhfyipr!>?xh_*bS2&R~Vt^!GQ?V8VG?l$UO7lqjVTopuNquFl zt6nPAmu$PLvaAIKYy79<84`2(pjNP{C`kob;eJRVuZSc~%<)P!5FYiV#Eb~FN-4pk zeA)U&oxZyP6(d>c?X>L1%2B=+P9~D~aZz@?z;263`7-pVaG!@InaGN&j5M26CBMKf z*Gh`zq(_O&tsJ`&39g}KSGh(fgKqj9OS{ZHPw8QAXz;W<=(-THteEkwXHPc_5gR;9 z=@IYT&}kPdaf2((auE+zz_pA#8V`KB=|2dCDq}Jic;H_OcecsAtXxD&SgP@oU^&4n z9%XFjkoI>bJUcs^)Yi~1iaDE+YF}xGf=+s>$WsG}$?KC7z00SQZsLjzH73h)kE*zx z7IQjP4e$j+!N_IPv0E9kE%BS8%*!nzU8_@`mC? zv%Xa~Yc|-77viVXA1@<@q$RR`@q%d#P`rW+(`cueSEgwz(3dxOzZfr&6?Xs7?fGYY ztrN3hn#pc$NMNyUR{vKUHQ>{XSK=i?c{mg5*aA!Oa?j8<+iCEhf3fZ5w;?$36SHQ` jx?_PE98qJ#I&Ia-yfsZU*L41`asKk%8Lk~Ql2@HyyK~kX literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 0000000..10625cc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Nikneshan , 2015 +# Ali Vakilzade , 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Ali Nikneshan \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "باز-ارسال‌ها" + +msgid "site" +msgstr "سایت" + +msgid "redirect from" +msgstr "فرم ارسال به نشانی جدید" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "می‌بایست یک مسیر مطلق و بدون نام دامنه باشد. مانند: '/events/search/'." + +msgid "redirect to" +msgstr "ارسال به نشانی" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"می‌تواند یک مسیر مطلق (همانند بالا) و یا یک آدرس کامل با 'http://‎' باشد." + +msgid "redirect" +msgstr "باز-ارسال" + +msgid "redirects" +msgstr "باز-ارسال‌ها" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7c1664122e1f8869420e96ed10f097fc475b1281 GIT binary patch literal 1158 zcmZ`%J#QpM5FOxvV-ZMPOi&lu*3mn&)*WZYa&R0rI&l`3wFVKP_D=0idwRM@-8E}F zLE=XckfIF<_yJ@qk&qH2i1`z|UN38~L`hF?s{7SP*VOM1?tPcR-U8kSD&QU9M2k_hApTJ4~Gx#3(7x1^hufTiok6+6&0e=mifPVwO z3*Lh`-G2&x0RC$2TkxCkzX2n~D);N)R6E(LK)O!`$;Oa2dn0+LT$#WViP^X|ktW*F zITIVHIS?Fu9=+{_snb%^wvIUQbKW73Ynt}f(%I=tilT!UH=|2L(pD|fm3h83yvZ7C z-`grBzMJs_;;V`6s}zcoRQXmLM^3jqq{A!Sc9u)p%6ZOCVjfwCNuBbBb>Ev0ng-wA zdg3?VF^fhxI|=>*4^=NJ^#zA$yep}?&~D}jr`-7<>Nw6!r9SRwQH^~`gOkt4>Um%- z(5g?gpp)HV^hAvcReVIFr{&|_N5yVYK&Vc6Zc@%$-BXCv2)Yl;$Hk)pHh8I{sBzFP zS}i`5^h^h5=rbQ1wi?%N*6SIoG3&OZBjcQj82WmemzS4ANx^2ySHp>K^PBenA-fLG zrzYPS9KSd|ynX0sSPY(fCzzrdUw3$k@Rj79#kBWnQtJ>|4$j6$YVTH;YE3z)LpSm1 z50$icZe-JDNmDa8v3<~19r@74l3cfPCPqn-Uhc382s%+A*rx^GZ0 z8!s0zE*In-HOs}du*h;T$H9ef{Cf9#5rg%j&fBKfwB2AE9bH?yT4>dgprdg4K+sO-Cjzr|3@C(zjaj kS~q=KPyY8)W0qd5Y1M-;Bg5SjOy$2ZtMNoLM>(JU4WV{iLjV8( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 0000000..6f9e56b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015 +# Jannis Leidel , 2011 +# Klaus Dahlén , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Edelleenohjaukset" + +msgid "site" +msgstr "sivusto" + +msgid "redirect from" +msgstr "ohjaa osoitteesta" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Tässä on käytettävä absoluuttista polkua ilman verkkotunnusta. Esimerkki: '/" +"tapahtumat/haku/'." + +msgid "redirect to" +msgstr "ohjaa osoitteeseen" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Tässä on käytettävä joko absoluuttista polkua (kuten yllä) tai täydellistä " +"'http://'-alkuista URL-osoitetta." + +msgid "redirect" +msgstr "edelleenohjaus" + +msgid "redirects" +msgstr "edelleenohjaukset" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1120c8b9e9deca7733ea54beb2dc05514c9ed2f3 GIT binary patch literal 1141 zcmZ8g%Wf1$6m0?on1l$iW^s46g=@NJ#Iubph_NFitXS331_1von?GkVe$brkiMkByO zY#{jx_$TlW;9tODya3}D)%b%%t9>3E=0f`hxX|{xyhS&HZ1imi_BdCTGw-6&R5{9| zrZE#MKV?e@3&-AZpH*AukfW9hsY zS*cwqy|F26ma@s2cBM5h=w8-F_lNURjV<>z`wcA7MI#FqBbHT4+m>~PcUWBT!NEb_ z2R$|6c|S8%+@0u{%EjtC_HeGH!w-kA7k75}`tbLDS1b<|x?*3~StW;~k~S6LfjV2ll6WaNmV+%< rThZ2;T($1RcZ9DdAnuB^CRGJ@R#e5&JBZbda{n8c!HdTscTW8ebu3bC literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000..49c98be --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014-2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Claude Paroz \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "Redirections" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirigé depuis" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ceci doit être un chemin absolu, sans nom de domaine. Par exemple, « /" +"evenements/rechercher/ »." + +msgid "redirect to" +msgstr "redirigé vers" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ceci peut être soit un chemin absolu (voir ci-dessus) soit une URL complète " +"débutant par « http:// »." + +msgid "redirect" +msgstr "redirige" + +msgid "redirects" +msgstr "redirige" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 0000000..ecf5b4b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b72f1f18a654699ec7cef42b6a5c327bc3486786 GIT binary patch literal 1073 zcmZuwJ#Q015IrD#8E8^dOoI|DtnbcAlyHgp3W;Qth{!n5(5&y)cNd*^t=;tpB`rM? z1q~7nMQB2m)(zD3{1F=7+Qx>6k)GbX+nL$f-MOEO3-3JGHQ+Yz3b+A$0GxdTt^?nJ zBj5+{5-4Aol%%h_2F>9hfvv*yCPmSW`t*I(*h-J6dpySoVZlG*J!0bruFJxJThe zv{qdSszHE2))4*N)ttv|Ac$30Dcp?K*H!{pX`dU*nwm>faI17gPq~!1@O_adqM&Vb z1NpER%StZW>OOL0+T*EUO~E@6)pc(01k<}63g8=Qti-D0PfqlQifOW+a=%, 2011 +# Michael Thornhill , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Redirects" +msgstr "Athsheolaidh" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "atreoraigh ó" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "Teastaíonn dearbhchosán gan ainm fearainn. Sampla '/events/search/'." + +msgid "redirect to" +msgstr "atreoraigh go dtí" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "Is féidir dearbhchosán nó URL lán ag tosnú le 'http://'." + +msgid "redirect" +msgstr "athsheol" + +msgid "redirects" +msgstr "atreoraithe" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..443c8c96dd2829af45b185e45953ac38699ff255 GIT binary patch literal 1252 zcma)5L2nc{6dnpKbWw%K6%Ox2h`>9u0|=O~AQBRUMARs3+VjhdGh^hjSGFe!5(oYP zCk{xhL@V{yL)A-##BC)G@E1_ka_yh!=glUm=mkrkKELPB@7d4Kf6kqFkzjlcoChl4 z8{k(Uj=zAo_BXHz`~!Rs+&z{gr@$}4QU5deH261g)V~3r0KWxKfcL;z*w2qA$rJET zGd>5=8Q3qtas3zY9Qco!{SJH*_6IOROk;luj=AIb0*LEzKyo+`KKUwI8?sVPmcb{Z zMtLgP(3T{rLL(i);4N=;7bJ~2G<1cUsft#zXRfT~MZ`UF@X!CWLX3 zrt|&%sJ^kCu43R%BVH!CSL&{cTal6~+p;obxRrfc+2eMsWkK_)+>s{u)Jt|{6XUws zxeq6_?QDBw1$#L6iB~};>&`yLMa6?kd?%e())Z7dW>eeVh8$ZL#G0>FC6>C{i;*p; zxBl%&EIY{oT5*p9PLgMXYhsXz>?RGa7gzI3S)OGOiVeA=V$37mb%;csM_qpNQijoc z$UcaXW8*ak>k7KxndL@HTVl!79oJHfB)3>#sa1KI9+fr(5NXHr_U!<~O=Vcgfj#kBu zBVEk3EuB~~rH#*2(2Xq>4$oUqUG>&==U9tX>snus8Ba|=yt+vH)8R!k91iH|Q;IxT zpgWXNLD8EZc=PBTOuclQa=LJV4BbM(qd$lL%3?3M8yew*n!Hv{RgGkmtg@{bbMn%n zA-9^?e;=Q{G)%tHszy(tg;`rwNiI>xmSf|FhN&`f^E zo0iDqNlPexm_5SBXFv9nr4A*7!hLS)_;;*f{4&(LMUU^Nhhfm{ORTk!$QN5)p*N5& q4LCAB7JD|SwysX6neh`3svx;)l22^1|MS${e_gZE;hGNdlYapVY<2(u literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 0000000..00db3a4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-22 17:29+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Redirects" +msgstr "Ath-stiùiridhean" + +msgid "site" +msgstr "làrach" + +msgid "redirect from" +msgstr "ath-stiùireadh o" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Bu chòir seo a bhith ’na shlighe absaloideach as aonais ainm na h-àrainne. " +"Ball-eisimpleir: “/tachartasan/lorg/”." + +msgid "redirect to" +msgstr "ath-stiùireadh gu" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Faodaidh seo a bhith ’na shlighe absaloideach (mar a tha gu h-àrd) no ’na " +"URL slàn a thòisicheas le “http://”." + +msgid "redirect" +msgstr "ath-stiùireadh" + +msgid "redirects" +msgstr "ath-stiùiridhean" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..30a442e717e72faf89412b9568df4489c92b0973 GIT binary patch literal 1079 zcmZuw%Wl&^6g5y@DQu7s8ze4b(NyikPE=@dNrmVGRcaxsQjidvi9NBWvS-Z9xCuMH zfE6r2EZMN;6WG8{u;vHYbDT5@qFm|d%$+&+dLG9=ug$&p5SM_Pz)N5r_ykn(9XJGj z0MCJ2XU5tA_$u-@;7b1%d>Q-^JO};^eg}L3ULfB%=Xp=SAHY|@zrfeQzri=a^C+tN z-2tBmH^C?!MYXpJz*(T`JqeV07lBIebyI06;);5LgmkGegoO93&Ppe!;4Y;)x0un# zVv#hKsb6Lp9UknFb=)|q5*nbA7EZE=U4w1Vbc)(lv1pPH-T zN^2=-1p$QYKpe}e=S;T>5oz3>vQLC;MVpmH6WmO(;95_mj+DtnKga zZ_m!&Yy`DUtsE|vbzc`aoD)Om7a1O4ouZT*D_r}qyTjIIy6RhfVc52cboFQRy#t&I=L2qVVL@dft|R-~Qiv8S{!XDV@V|BiBhKb>%p; p%JBB595-=OB)@%Co;GrbGVFM4!|`k^EdBv~YW{E0$c$2Ze*jfNI+y?e literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 0000000..22e8231 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# fasouto , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: fasouto \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "sitio" + +msgid "redirect from" +msgstr "orixe da redirección" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Debe ser unha ruta absoluta, sen o nome de dominio. Exemplo: '/events/" +"search/'" + +msgid "redirect to" +msgstr "destino da redirección" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Pode ser unha ruta absoluta (coma a de enriba) ou un URL completo que empece " +"por 'http://'" + +msgid "redirect" +msgstr "redirección" + +msgid "redirects" +msgstr "redireccións" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..effbc33efc4c9a8fb3ad3598a6b1842c085db211 GIT binary patch literal 1128 zcmaJ<%We}f6dj7oZeU zP(@o+h()Pb@BwUL!w1X`0b728<0K?43oIR-d+l?NeQkfgGPLDjoCmG~72p!^5wPP2 zVAp;EtH5vIF>v>U*+ii~&=Q_Lfgq4_3{YN7CGI4d?pY;;x&uFAgkRlRff16oru z8e~THW9{g`2xmpfbu`KrE9{X_I*_qPm31ChWvU=*QW>_at3id`t5-EEN{>=24~uM8 z32vZebKKx0<8JN-%el=6g=|iz9=ctppo7MHyVwM zv3|jtXxf5ox1+xl_NueK$fi@vi_7za-g6l@H7jF-i)F=UH8f{L(`0KQ9$<#bK37_p z{AzK5O%HT-uQj3Ad|a0H(L9dlc6?sm_njP&dqv#B?oB zx%5oRN!rQ#WIx$Xwvs~!^cKMmB|Dh!%n=q35pGhlhuId5K(c>5*-2B!+3)!4`HSOU5}$<83}^xVRk51c=6MuJ5E literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po new file mode 100644 index 0000000..4d32ce1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Meir Kriheli \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "הפניות" + +msgid "site" +msgstr "אתר" + +msgid "redirect from" +msgstr "הפניה מ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "זה אמור להיות נתיב מלא, ללא שם המתחם. לדוגמא: '/‎/events/search'." + +msgid "redirect to" +msgstr "הפניה אל" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "יכול להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב'http://'." + +msgid "redirect" +msgstr "הפניה" + +msgid "redirects" +msgstr "הפניות" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..367e4a9a75b9da60d1fd2b0f7d2dbe0a0bd8c5ba GIT binary patch literal 1409 zcmah|ZEI9V6u!RHmo25>NAbf^kYus5dpGzJZ;VJaQcFTZ*tFk-$==z$SMJU%_s%8} zL@-i($1mnfTPV`mB0+2@v?fsWpUC`!{)Ij>H}0ZT9XR`(bLKg(v-i!Rz3Tzae#j9> z6Y@FaA;g_6$RcDL@&n|{T|saF*a3b4>;WDBCh#EeKJdwo90peR1i=RUm-Yt1G2p+z z{;NRHhi4zO-4M`+2dR9YprX+vEvUsMEeR5-PDD;H_)?*=z82KuI-zl1 zz@wH$l@zY2-On;wT$rUo^IWI0Lo0}+u|(@$RIiWK%B)4A`dRD}zn}3d605DOAG=VL zq*!%%DoOILsL{+S@Afhg(O6w93#p5GA$Z-UBZ{wa*-@1R(Nno*b44eO+1LF}!I~)jV30-#wpea zS$LKjXQGo6C&Gy^1d%O><<#XI@y>w68sMFdPKGB!oXRXOG;8Ku78%znkLX)2B^Ev_ z(pY444&A`Kka@F~%C7}@Fbj$lo}yAgep$~dL*o!zditkks2m$t=ft);s4a-z48 z?F848v|g>uU74F1&EBYmm5WMh?36XH_b{9mtGeFHu=^=$B|I;Lo?dKTW|JeHtJM}c zn~^Q$-YcTXrBn}_j3`Mf^I1RV8N00VZV{2}d9#?Fn4(gh9+z}G9}&I(C5{FDjj#YTcpEX8 i6HkQ)!vbFVTn3b_a%n&M)qwo}tewd|!9wiE%l!vVJzlZ^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po new file mode 100644 index 0000000..44b447f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hi/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "से अनुप्रेषित" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"डोमेन नाम को छोड़कर बाकि सब संपूर्ण पथ होना चाहिए | उदाहरण: '/events/search'" + +msgid "redirect to" +msgstr "को अनुप्रेषित" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"यह या तो एक संपूर्ण पथ (जैसा ऊपर निर्दिष्ट किया हैं ) हो सकता है या 'http://' के साथ " +"शुरू होनेवाला पूर्ण URL हो सकता है." + +msgid "redirect" +msgstr "पुनः प्रेषित" + +msgid "redirects" +msgstr "पुनः प्रेषित" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65b8363cf9e5b11b7ff164858a9b75e7638a7b75 GIT binary patch literal 1207 zcmZuv%W4!s6m8!+B7$odS3#4YHPb!DS102uMi2~!Fi~(<(_NXaNq1FKRXr2Mm3zUB z3pawUMcla&S3Va0gXr3y@KnzvBWl6n+*@_-sn`8}Z13{`;}CEhNP#238^DhrfM5Fw ztOLJ*`@r>GL2wZK0_^p#!H2=`z+V3Wychfh{0sO797Xlo%^U4V-xyxvlTg>R8m?Mp4+NkoJ*4OTkb=)|q`ZPi%&1BA%ajP}c9J|^~S9$7< z|8_h}Vk^n3)R$sQN_D}dBE<{Qq~$GMl(~p$rX_|#Ioq;=nTtrcIJIJTgw)skRCrCmp~KFp(a92d!d297L_dq z!tfzi10LKRYAW>SkAiSKNivtj%et`@r?PThM6;V*Q(qf2w-=P!m6eipdvEH2pZN4t zs(~QOryX8f_ar$ZdOYW2|9`yCqW2$>ECjYgiwlMBUNzF6@W0(%Zl7NU(~xxfXQucx Nn_ScS&zA`gegixSS=Imm literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 0000000..75a97c3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "Redirects" +msgstr "Preusmjeravanja" + +msgid "site" +msgstr "stranica" + +msgid "redirect from" +msgstr "preusmjeri od" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ovo bi trebala biti apsolutna putanja, bez imena domene. Primjer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmjeri na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ovo može biti ili apsolutna putanja (kao gore) ili potpuni URL koji počinje " +"sa 'http://'" + +msgid "redirect" +msgstr "preusmjeri" + +msgid "redirects" +msgstr "preusmjeravanja" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e93f11005e014467636bdbef7aa9c0167979a11a GIT binary patch literal 1236 zcmZ`%&u>#l5PncfTcch;YA;lp3rZrg_Op`;c&RBAf`mlWD0P7A+HdW*_P*Vx-E|yC zoN_@z;@AU1LV_~~1Scev3wAG6FZ}~5IQO66Tib~xny&Qeo0HfqTI96H)Xv_z5`ZUx3emUx9=E9rzUZ5Aff>pTIfz&%TJF zF8DS0KKKWSLVO4OJ@^s$JMfEH{4Mx2{J+2`F{%9}IP?zdB=FV5n)aKS5z0^UqAih1 zD_Y(~jZ8XfaZOD@Li$Wtg2S86sJ<6eaG%j4cZirBu|x*j)b1-q+go?Yd2YSb9U35$ z7BcUPq*7TZPpi7j^i>)Pe_nB!#BNLV(~ydml$xANO`7MTOzXQmFO*1Vp(1vK_O9Xt zx2-JHwX<^{8Pv8WpL^aM*)DR@i)hoDE-uP$r|hnYpLQ*jkJy3^+!!5V_+ z32hezKIS(_B;Imy_RxdDpzK3k*%rIymdPvAn;nvx6{%#dSy?J=+}>E9KSH$}mu?vC z@xrVzEO1LNc73H#_=z>b0j(3hzTLRRF3)wLSzB1Pu3IMjUP70f(jT2RA#^Hjs=nol z-7+?J3F%_uy87xGP0jkEzEF+hdc8_NQ%sOd-5T8L++Cpu4-U6hu~oy?%FiQDH0_xI*Igbp4CU|Nj1R)Z_72Baa~eM%Jrv`E9;fDT^pF;Ne0)Hev0c&QOA~Es zP;0!ehhd_Zsb{<$LgNhW%_o}ncwt75rRJDzv>H7f@0, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Dalesposrědkowanja" + +msgid "site" +msgstr "sydło" + +msgid "redirect from" +msgstr "dalesposrědkowanje wot" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"To měło absolutna šćežka być, nimo domenoweho mjena. Přikład: '/events/" +"search/'." + +msgid "redirect to" +msgstr "dalesposrědkowanje do" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"To móže pak absolutna šćežka być (kaž horjeka) pak dospołny URL, kotryž so z " +"'http://' započina." + +msgid "redirect" +msgstr "dalesposrědkowanje" + +msgid "redirects" +msgstr "dalesposrědkowanja" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..808d7b0b4ad360e8a2a4d45d70d1bb613dc41b2c GIT binary patch literal 1152 zcma))&u>#l5XT<{TIy0&pdL94r`RIvUjz|elmkD401*)xr&W(@zp>xO`*y9}eNN1c zQ~!b4hYY6@kd;nere*rIp8vGiZgGh0l`yv=?$MqHT&9Swpw=@%^JwBK8I8%;?!6*G( zc^XPX1144>XGd`4z*}7grl|}$)uqRdopFOKKGUewns$3n$p`6zGGp4uNm|K6n5M1P zN^_Cb=eE>YO#EfWRpNu8F0*(PB`LFoRECT!xJg?FvY2X4X{E(8Ho><%OE=78UbnpW zi9sW0i&HPy6Wb?V1x|LH-9w||aVCCZ=an@nWqZ<$ZLP;s>w?(!W0i?}<=Bh9O{uo? ztS|06mI1Nifeg4wx81oVI&IOuL!H~{TK7h~+ioLJ^mwLX&eOQt2ol|!)LBn&t=(v2 z)t*WpMBho{wG7s!^rSj8)>Dt_k8qK>Y#_vpOF3rIXIZ55s5E2g6rQcVeAE5?{bq?v4)z!N|tg9ne9eG9YjGWMfF>9KQQB3th znLs1-!Gl3#b#XSZ-eVufQN(;FLnvmfar#9z, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: János R (Hangya)\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Átirányítások" + +msgid "site" +msgstr "honlap" + +msgid "redirect from" +msgstr "átirányítva innen" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ennek abszolút elérési útnak kell lennie, a tartománynév nélkül. Példa: '/" +"events/search/'" + +msgid "redirect to" +msgstr "átirányítva ide" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ennek vagy abszolút elérési útnak kell lennie (mint fentebb), vagy teljes " +"URL-nek 'http://'-vel kezdve." + +msgid "redirect" +msgstr "átirányítás" + +msgid "redirects" +msgstr "átirányít" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b3b87bb8ac923495c7b02eca90c7c70cdcc8edf GIT binary patch literal 1152 zcmZuw%Wl&^6g5y@L2TF|vAC?73LHBTsI5y7&X@U@=+?+d}bI;6NAOEbxB~nN{DAm|@Vt{tLGT(l0S;c{vUizoVw*GOZThILWUaqobv6UIq3qA@CIHFvH`qG+`>Q? zD;)<%MxWrK;eHmrWMidP31ufjjdY{Ol{PLsv?G~?&+3s4`#Pb<(Tje#ZCE&P!yVyp zl1|)y7`Edu-lX<=@}P4s?!+;OVUN$G*Ie?}K?>WO)afKKco>ZXVO`iaLfJw%Z4x^4 zT{}^6a{_oFh+YM17cpXA!16Gbc4Wo!kj%nhn-gl~yWD*kdPE))#Wfw~Yz YYF~fuUB5ET<;Z_*3&YM@0MqK=4^16TCjbBd literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 0000000..c4f1b40 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,50 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 22:02+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirectiones" + +msgid "site" +msgstr "sito" + +msgid "redirect from" +msgstr "formulario de redirection" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Isto debe esser un cammino absolute, excludente le nomine de dominio. " +"Exemplo: '/eventos/recerca'." + +msgid "redirect to" +msgstr "rediriger a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Isto pote esser o un cammino absolute (como supra) o un URL complete " +"comenciante con 'http://'." + +msgid "redirect" +msgstr "redirection" + +msgid "redirects" +msgstr "redirectiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9a1c608d39bc85648449474594e98adbd9c2dd1 GIT binary patch literal 1098 zcmZuvO>fjN5Dieif)I!+9Ol+mtvA`FRoj#zpdX^B6|2=2E^u%+-o$NUN4C@5{tGS~ zxN_#e58w(H{sV$De}d=TZMQ;p{|24`{{VjgegYxM2Yv|l zdJAB`zXrYz-U35nr0sqGwqI9)n+Foh=gV%aUztnkrmwZa<6M9d7m59H@cj9PM_O0 zu+oX3ZS)ZeWxFYRBaD?=C6pd$E{;s!<8+#(34}-Q)881+{3br`L z3-e*>ic_JFxs_*=M{`zG0>ecq_8hnK{#%cxu7JWZuLy0+a9q|%oKi2VF3#XfZfbkE p`XV{5@FoV1Plm5Sz9l-pbnL2W&Qp_8Ze(!5KNc4}KYg_g{sF8aIZ^-s literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po new file mode 100644 index 0000000..a999ae1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fery Setiawan , 2015 +# rodin , 2011 +# rodin , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: rodin \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "Pengalihan" + +msgid "site" +msgstr "situs" + +msgid "redirect from" +msgstr "pengalihan dari" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Harus berupa lokasi absolut, tanpa nama domain. Contoh: '/events/search/'." + +msgid "redirect to" +msgstr "pengalihan ke" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Dapat berupa lokasi absolut (seperti di atas) atau URL lengkap yang dimulai " +"dengan 'http://'." + +msgid "redirect" +msgstr "pengalihan" + +msgid "redirects" +msgstr "pengalihan" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..89f3bde0dff47e24bc82f58042fb519e0c7e62d2 GIT binary patch literal 1019 zcmaJ<&2G~`5H?W$3JUjV*+*|n^(78^yPe=*32p)#RIBz{l)k?@Jor@VC~2u_LL5PRJ>Vqf>2_%`v+`TZ|qDp{Os z6kR5)EN+5;B-1&s`n$9g7Ba5j3;~5J(Eug<%xc*1hrp zE~+JMeh0FW8;h=YlJ2wZrOtnAfQId, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ridirektar de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ico devas esar absoluta voyo, exkluzante la domeno nomo. Exemple: \"/eventi/" +"serchado/\"." + +msgid "redirect to" +msgstr "ridirektar a" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ico devas esar absoluta voyo (kam supre) o kompleta URL uzante \"http://\"." + +msgid "redirect" +msgstr "ridirekturo" + +msgid "redirects" +msgstr "ridirekturi" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e415ec17927185b6836d7eb2bb89f61201c8f43 GIT binary patch literal 1065 zcmZuv%W4!s6m2!WMqKDp1h0rBA=XUK5KZhjBIW^s1Vfytpqol}O?QRvs-dcSCPEf| zfjc)MLO_Hplz^_?^hSTePZ3W~Pi8>8a5(o?pL^=j_xIJQcOK#ba2--0iK--D;XpTJ*%Bj6?K7iTFv{;`&uIY5!l)~>4xYFq&<#8^Im4Y=t|Vq~$m7vZl}c`_xwW}BLHa6nb*QyX=2cB$qS zABA(AV&U*UePLvAT#cJei*LwhgjAMvOi6KsQN)Vway3h$IOfoIQN)y?noJ``L}b?0 zPrQpC+;oSn@E;BH$h|mJlom&LRAuY5Qhd(jf5)(2e6hLmDuRD;ILtYnBuW|&r^$`? E7j4o!P5=M^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po new file mode 100644 index 0000000..8c57353 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thordur Sigurdsson , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "vefur" + +msgid "redirect from" +msgstr "vísun frá" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "Þetta þarf að vera full slóð án lénsins. Dæmi: '/events/search/'." + +msgid "redirect to" +msgstr "vísa á" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Þetta getur verið full slóð (eins og hér að ofan) eða veffang með 'http://' " +"fremst." + +msgid "redirect" +msgstr "vísun" + +msgid "redirects" +msgstr "vísanir" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cc265d997c46df930b0c1cff5e94eef2ab19c4e1 GIT binary patch literal 1105 zcmaJ<%We}f6djr^dVJhMHEsHOE+_qxSFv?wkHYw2bL_@ zvSxu;Be6hY!#^Nc^Aj8=p#>zca&oTi>to+L=j)BRR}sc#;1-YoSAn-c7~g=f_Z>I@ zegMyahi9Vb68JSZ{14zc@MrK#;0qA;pPvK341NOs2oCEvk$eq&8+;vH z0f+SsFn-Y<{va{YJ`WCehjA9TIEkitvoL~ebRkUIoG8m(@1o8?IqFJHhfJ*efGuGn z51mO1&y-6)pt5vWF+*M;gKg>+X-Ws}J#t=JuXLYAI7#yZ@AJ4?ov%z)-M|!S5`_O& zTp}KK(;^8+aU~@tlS-488CPg~EVDf2nC7cIWbIwmv9#Sm(6zI7p9IviCOe&Za}vAA zDbG>Mnj;h{b`$ZGty4zFlpIOjH>Eb`#(J^u`YI8RioO#a6H}@6xFa?#OOIT!B|To! zsMS|Qy(Vh+sJhU<7s7_1yMd|E# zRr%^dX@7Tr`?TnKrB>QB+M}bQ^CCx8p2xnLr|A4TbqCTq_RWLNj#xX*3wQO{if!FB z;cLaTcBuTxGh@P}l@?Z}V#nCb#iaAe)HNIHG!2_&O?R49Usx~Ae0PkFsi;+adQa>e zTc$!&&bDi;GbG)_dxpv=kja_cN*FKX1kYg+?(harW>Q)mD~UDzyZg4_oBt^, 2011 +# Marco Bonetti, 2014 +# palmux , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redirezioni" + +msgid "site" +msgstr "sito" + +msgid "redirect from" +msgstr "redirezione da" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Deve essere un percorso assoluto, senza nome a dominio. Esempio: '/events/" +"search/'." + +msgid "redirect to" +msgstr "redirezione verso" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Può essere un percorso assoluto (come sopra) o un URL completo che inizia " +"con 'http://'." + +msgid "redirect" +msgstr "redirezione" + +msgid "redirects" +msgstr "redirezioni" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..37084b544c39b1cce60e035ad896590b3c4977de GIT binary patch literal 1148 zcmZuv-AhzK6u*^yZS*4a*28&IvDv+AmUhjkOuK1CrYDjI}Q5I)vJ|3ehhQqe!rncdCBbl}JDoSAce=bV}O+Su^S!gUmJ65%3_ zBi0aReM6YD?}!n^AH)sBrG1ul1bG43#J@&9hWrNE#D7F?K>mdM2=N8ci2khumUR<3 zsPSiHvkw@20{L`}`;pE5ZDgY-kWr#yA4E2_&DxJRT(PS4YNmy<)*<60nCl6aQqoFh zJP9cpz$gResSFc<4jq-;FDM3isxr__CGPME)&d-lVXWZ$Fp?Mmsi;t1kcLUjgr-8m3fNT2FSsTZOM=UD)C(Y>ITnT9DVods%z>sDn_z*GG0CV% zWsI(<^}TJtnBcj(r}(xlE$Jy{4GW&dK}o+$t}`J$9ys7;X^`fT1j}=w$e>JnF1cJt zOOoUcM23fwq(?BSFqT}Q3Oi}D<7Y_RCiXdqcR1~Bt#+GjV<1Ve3D0QO<2o>i#4+xy z({8ugxFQ2oDv}g5kUmvhIB+fF1=AFU#%aLeyyD~DsHgbFG+u%qP4V0XObOBjnr0-) zXwHGFG*1I288p|fcye+ws*IvH#->b4tUA*_@@x6AERD592Kxtl>(j@hcBF>~3a^$V zr}H?TVpA%X_wfn3AeEs)GSxkj>?57^I8$qk3DO&+xOp}QINJ{`!?$gp1!)F*vh zZzT(R6co$U7Zo4aD>C%cW&FJEyF0JX}hAz!nKi=Q}wfsVd>$*6n!@D|M`MLS7 zys@QAPjvBv4(IhuSpQt0!=>`lybiZ?alX9%pgg;b8I|v-!&MzVHz(nOo+(, 2011 +# Shinya Okano , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Shinya Okano \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "リダイレクト" + +msgid "site" +msgstr "サイト" + +msgid "redirect from" +msgstr "リダイレクト元" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "'/events/search/' のように、ドメイン名を除いた絶対パスにします。 " + +msgid "redirect to" +msgstr "リダイレクト先" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "上記のような絶対パスか、 'http://' で始まる完全な URL にします。" + +msgid "redirect" +msgstr "リダイレクト" + +msgid "redirects" +msgstr "リダイレクト" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..475955eefe14538e42937b7df24177a506d991ae GIT binary patch literal 1511 zcmb_bOK%e~5MH3Xg1B(z;0tP_)|*Xvv}`FLN?R4RqKZ%Yo!2t(;;lP^82nvd#$)bd5`b zfUPSLHZ>;=rfX!3DP+VJ&k})SQfY=ESt~3PrJ2-0R3$Ai$!JaMhM&ugx>i-yL^CWK z;olV}2yd6dX4z12B`J$K3nCJ+I(Nx@o7Ed3_sM9EZ}CX0oZ?KDYDQP~>)zXtiWK!> zq{ZG|Ijd4^phvn?rnk6Mfrxxk-e6HxWD2|?q^2vX8kFg^W>wLm@JVL%W|7WG&NQ&} zI@2g((#xNxd5?M*Nq)*dH#zQ2dLDqZz_$XUImAr?MDxI1@XvYU9=^;nQ<@efi&V(8 zkUqJ=q6hN(rgz=eH&Zj{fqjY_i#N8x*IoKorB8hjB_;C_H7_41zUMF$Sa!AT}m&DJ(LjVepP(b`N1-?pG z=yY+6%boy4#!_Wqkid%54>-jUZbA`A?PQUFS`Q9#K;Tj+cFnJR0!d^50~i#Ow-Rt4 zlNj~bk~_nHfYm`YAOiI^rK1b%cU, 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "გადამისამართებები" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "გადამისამართება გვერდიდან" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"უნდა იყოს აბსოლუტური გზა დომენის სახელის გარეშე. მაგალითი: '/events/search/'." + +msgid "redirect to" +msgstr "გადამისამართება გვერდზე" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"უნდა იყოს აბსოლუტური გზა (როგორც ზემოთ) ან სრული URL, რომელიც იწყება " +"'http://' სტრიქონით." + +msgid "redirect" +msgstr "გადამისამართება" + +msgid "redirects" +msgstr "გადამისამართებები" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..63b7782e9d143440c9302a7d1fd1e450076beaaf GIT binary patch literal 699 zcmYk1zi$&U6vqveUxyfAW^lJwm2*D?v^dI8N-ISW5ru=@xqETl-q|PHA;}7BSEfq* z0qjUHGgaa*U|?isVdt4N7oPOd_dUP&wV!|9-}pcAtAmXw~?>NE#w<= z7x|8axgSXA|3Ws9-^jZwg#1B`konc6?>*{0tj|z`?;~pHe?q;E`WY2%ZG^M16CSs5 z1G8&Lc!!LjR2B;Fh`r3(gifrf*OfPI?ub(!$k3V-w6cE5-hg$=Xim!$p{0pN&=~94 zz)4lIr&H-zZa9sGFLQQaL3o^H&x8j~vm|}Q(u5^XXu8WEW;;oiBsj=M@K%L8*K@n8 zxr}FzcM^=~g>atbR%llVZ!D*;Dpd;&biYfHK)(Tcu@h}I`+QdaXg#N zIzD*S1m>N>)bVorl~kAR_*9JJ?P$;+9Iii_c9Q78Xb&0}STy((4|5+kl~B4%i(_FO z_}=UMi0!TC!ebM#>`)h`R9bSnH&(t~lT&;t8dg&)Dt2US?KsuVztZ)xE?uU*EloFj oG~Mn-q+fuP>f#(U5g~<(bFu*MXRC@jkZp?!OVoc3S3^bq0y2%fWB>pF literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 0000000..437f1a2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-10-09 12:26+0000\n" +"Last-Translator: Slimane Amiri\n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Iceggiɛen" + +msgid "site" +msgstr "asmel" + +msgid "redirect from" +msgstr "yettwaceggeɛ seg" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "aceggeɛ ar" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "aceggeɛ" + +msgid "redirects" +msgstr "iceggiɛen" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fb9d36f3abb89ae00108019d726c5eaa5d332351 GIT binary patch literal 1261 zcmaJ0v@6n%bc#En}OuB*1_Brip+zFP6Cg4kjyse-#{GEJU&c@t(P{SX(nT?PaZ z1wU5e(nSibVryNvaN}lPet;;rbMM+SFR>972hKZlXU?2^=g#|laOWcrV;^uBC;Y*yZ^KhDGYV3+&e1*beMTXPtcAsRvtcw+kjkDO93pv{$Hv znu`-hFs7K-M3zS9d95CafckP`R>Vf;X8h{-Xz%j*te?3gV}s7J!a^Ol zGh*K4>JeUGn2Hsyv@j!6g)8iIPv>&Y2*pO@qI9no(CO*WY*iUhwVIiT8j45kic~cn zP+U(#J(3@$&UC~d&Uo#owq@TYOSVOJ#kSfHlV-By!erTQ;Cs)r585ksgCJW;7VUex zk=%ER^fU6^Awlyg%Fb`~HCUAM0+P)4Gt{`w0=A=b!)p literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po new file mode 100644 index 0000000..91d2a9c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kk/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Leo Trubach , 2017 +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Leo Trubach \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "Қайта бағыттаулар" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr " бағыттау (қайдан)" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "Бұл домен атаусыз абсолюттік жол болу керек. Мысал: '/events/search/'." + +msgid "redirect to" +msgstr "бағыттау (қайда)" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Бұл абсолюттік жол немесе 'http://'-мен басталатын толық URL бола алады." + +msgid "redirect" +msgstr "қайта бағыттау" + +msgid "redirects" +msgstr "қайта бағыттаулар" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e76f40fcc1f619ba698100a9a87cc5fea6b2cdc5 GIT binary patch literal 1248 zcmb7DOHUL*5FQm@Ym5me4<0&RV1vCoOHgnSV?;<$h=eS9ZgzWjM`xxtGrh203>uJ^ zNDwr>(zEg6#iQ|&s0Z}wUodHZiC@p+qJ)c`RKBk6s;|DP>G|2-_Qb+E3_AtO!;Zlo z!p!;zn}mIW-GrUkXIV#pW#DmO6=>q`0*?Zhfvd1hSOfm)1D5q2_zl<&Tx_$flfakT z_zq~!e*lrvT8FUP55sY5fg;g)(46EeZbS+!AXA)hS5|mP;IOGkcs0pMmB|X}WD!op zG*1(OYf`Ft9+{jNC6Q#Ibb~UPK_=;_NLh8V*^W$;HL8f3S2V=C8P5=2FL<@0NkvIg z6h3nU5-^`<$WWd6RgXKQBg?0GAfs%=Sy-qT-jEmFkQZcYLrS6WcRVRt`^Xv(#Vy3r zks`gp!^jnZLyEUpP!_2PUKOFFV^P^H(#y4SMDxNSsqyQ1Iv8>$5lgQy2@&0P?kvsO z)ILvgy-rVem)&jK2&5By+BKXzalHtlImDfFdh9M6D>cd@N%J8KB9BQCI^-$~0t|eV zyG8Di3s3|1l9#v{Hz#zw}5c6!fc?9`wLBxXwUcdBSk^194cJ{ zLpl@`g!x_$>6>z8OQb_?`>AoS7BY_xi_ni85>yj68p!pN=61mDPgz>M*6O`h^I9z= zne<^;WA{9j|RQ@aT-cZV2KBTFq(oEFl2R zvX1X3e5imrn>t?6s##=BtFK99vocb?X!U%n(R#5u-h@D;3B}Z3#ON46K<4mp!L6ggkQ5OX~+U-^=7+eg?Pw&q~leH h-~D?un?Tj(Z04H-MPIv*%&^tRJulXEJio_<^&2{G^zi@y literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po new file mode 100644 index 0000000..75cf301 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/km/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "នាំចេញពី" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"គួរតែជាផ្លូវពេញ (absolute path) ហើយមិនបញ្ជូលឈ្មោះ ដមែន (domain name​)។​ឧទាហរណ៍ '/" +"events/search/'។" + +msgid "redirect to" +msgstr "នាំចេញទៅ" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "អាចជាផ្លូវពេញ (absolute path) ឬក៏ URL ទាំងមូលដែលចាប់ផ្តើមជាមួយ 'http://'។" + +msgid "redirect" +msgstr "នាំចេញ" + +msgid "redirects" +msgstr "នាំចេញ" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a497d71c4134e683f73425ec13bb7e124e8300cd GIT binary patch literal 1396 zcmbVLTTc@~7+n;+)EE<=eV7N6LU7t`qk@az1tCEp5>oVe=uX>(?aXF(3iZWA5>bi7 z2PMQuq7p;YkZmyVg7J@-`6-^+LQ9Mn;v`?rd^6uU-(_}xobOz zco=z7IK-W0qAXKWJdmNH6H(c7>FruMq6O)Y)a3mF9S%8Dh^2R!LJ@g8cZKF`YF{I{ zKId}2*UsBE0_hZ=_l#yct`9*phq$ZGWxLnLN{zEf(L%^XX3T~VJ;)x`_o-mSjZ@&=#_XqQBGR0oqf%uCjrT=?{=%g@qAUgVTjk+TV^dxk@~wBcdqH zi#eo!##5~_9Wp0UlYT8^J{^@|HFAgu5;q#m4Upz`&>l!xI)0|(4c&M`bo@m(;KVxq zrsIz~Uexh>-B`lKPU39p29CCLV@1dBaJs4E4?5n~@t#pI7mGMu((ziNu%+WqI^KnJ zE5Xwiqy1ebTqK0_Mw1RAoX-c+Yl*`4AIdOa{9lr0tiuhi>&9}@=5y0vV+Bmqha;p! zt0)vbttZu^WfWy9`gik(`ZWVwg%Wr#lFs%rzxiWK9+M42ZjKWhWNYs67!di2ThxA} gI3!En%{)x=^~^Bo(Esx>^QEKnyOSqxprsz`C;o44kpKVy literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 0000000..214edc4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಂದ->" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "ಇದು ಡೊಮೈನ್ ಹೊರತುಪಡಿಸಿದ ಸಂಪೂರ್ಣ ಪಥವಾಗಿರಬೇಕು ಉದಾ.'/events/search/'." + +msgid "redirect to" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ ಇಲ್ಲಿಗೆ->" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"ಇದು ಮೇಲಿನಂತೆ ಸಂಪೂರ್ಣ ಪಥವಾದರೂ ಆಗಿರಬಹುದು ಅಥವಾ 'http://'ದಿಂದ ಆರಂಭವಾಗುವ ಸಂಪೂರ್ಣ " +"URL ಆಗಿರಬಹುದು." + +msgid "redirect" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ" + +msgid "redirects" +msgstr "ಪುನರ್ನಿರ್ದೇಶನ(ಗಳು)" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5caeac8d5c45c213a5df29747eaa62a59b2c8067 GIT binary patch literal 1112 zcmZuv&rcIU6kZj7)u@RFz{trg4?Dk(Uz5%33b&@aNdo%BS@4cD%aiMO}z;zmN8IeYu zMU)YG{Y2=qUx*<@hq>B_55o+YtFlZ0I&@faub>zNRAr%oO5EXNEDjuxVWi-BFf`Z)Qc}#$2sgjcdgq zlEk=cc8k?$;fnQ9sYpstUwTw=VZ%MQ#JS%DcPZR(L@7`_BWRE<-OO=6SIC*vF>|65 z^ZZPKW*A8^nz!LT$EJK}IJo8U@o`gWQFnwDO^4?b`(ynj?;tyo1`;VZO*lchp3)iIRnA#K$-U2B91((OB3znl$i!>&5)(uN$5 z4R{4XJ<`KPUfSRXd#>zAw!^;JVYSDM@KZUQ{Sd8w3D=%iX10xJZ9050vHSUJ_--Xy zp3pz5;qWg(Wv*OVT#rMzxgNfphuy7-aOPuWaU-0aMitWt=O)9Ag=lp<+?, 2016 +# Jannis Leidel , 2011 +# Chr0m3 , 2015 +# minsung kang, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jiyoon, Ha \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "리다이렉트" + +msgid "site" +msgstr "사이트" + +msgid "redirect from" +msgstr "에서 리다이렉트" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "도메인명을 제외한 절대경로로 입력하세요. 예: '/events/search/'" + +msgid "redirect to" +msgstr "(으)로 리다이렉트" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "절대경로와 URL('http://' 포함) 모두 가능합니다." + +msgid "redirect" +msgstr "리다이렉트" + +msgid "redirects" +msgstr "리다이렉트" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 0000000..c97c1c7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..294ce4c532e3da50a45af7f7bb0219288eb1b775 GIT binary patch literal 1191 zcmaJ=O>Y!O5FG*pSdG;fd2yi1Y-Qn;Uswo-UfHT zhaigjN8r=oC*YsKPbd4&!7=X@7$tVKN5S#zxPAbR?ONmWCT4>2$&b-lmW6V%7kttg zC{H~$)RiPv7)VEOxa+O1f~1nefTr1F$Bty3EW)%}X-zB33*-a4piG}OkV#X65X!vS zoNA1#`hl%<5et7?@fVVtJzW(s6-QEGhpY@49?AyIZ}PCzGN-Ag97z*=(@S=}L9FX0 z_ue;X)!E^J7wo?66R(0ymYiL~L&g06*C9Ac-E?PV&3#@{BSwVbXC~DX-+!SmUQJwhv+XRS8GwdA*I-APp{ z3{G;7wW99M+n~mStEy08Vhbld`aHePs-%%}JFly?I, 2011 +# Matas Dailyda , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Redirects" +msgstr "Nukreipimai" + +msgid "site" +msgstr "tinklalapis" + +msgid "redirect from" +msgstr "nukreiptas (redirect) iš" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Turi būti absoliutus adresas neįtraukiant domaino. Pavyzdžiui: '/events/" +"search/'." + +msgid "redirect to" +msgstr "nukreipti(redirect) į" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Gali būti absoliutus adresas (kaip viršuj) arba pilnas URL pradedant " +"'http://'." + +msgid "redirect" +msgstr "nukreipti" + +msgid "redirects" +msgstr "nukreipia" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9068f67ee214cce54e500e64cbf990fded626a3a GIT binary patch literal 1179 zcmZ`%O>a|26n&)>imO&tS1h`?EJ|#V@p~`jt1mT_kARR8)k+yL)~qNPlJD1umXRD{1NyB_%Rq3Gw;v9Vec@G0VikCe7{8)!FE;`ZHio4G4L+x zjijRi*VGpzq#p@ONO<2FRe3=r_aka@hZ$3g78xwlcBK?;ZLX8^+FVeH>}_uT6U9roMa_QFR(OW$q$rX%FeHxOIDHuLbfSt89a}4mmp#(bQiPp$+-lh zvCf@mJqi>6(jo-Pze` z`(Put#cq3GigHMcG9?Ew8wk0-op}i@?zJ=rNXB3&y!m>3zFyXHuF z`&ruu-!UeGF)x;hdpF_I8z0(q`kUrdWl c, 2011 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: peterisb \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Redirects" +msgstr "Pārvirzīšanas" + +msgid "site" +msgstr "vietne" + +msgid "redirect from" +msgstr "pārvirzīt(redirect) no" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Tam jābūt absolūtajam ceļam, atskaitot domēna vārdu. Piemēram: '/notikumi/" +"meklet/'." + +msgid "redirect to" +msgstr "pārvirzīt(redirect) uz" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Šis var būt vai nu absolūtais ceļš (kā augstāk) vai pilnais URL, kas sākas " +"ar 'http://'." + +msgid "redirect" +msgstr "pārvirzīt" + +msgid "redirects" +msgstr "pārvirzījumi" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8353fbd02ec4a9dcd084ff48b5e6b84a1a8a70da GIT binary patch literal 1353 zcmah{&u<$=6keeGa>a!UqT=v4v`JLPyX&@U*kCA>R4Qsj6glNQ@lNbbc4w@au@i2= zl_(P8h*S_12_#M&Tu2}yiF4z^W%kCYf?hfD5Acnh#04rb(%bL7H}8G#$L#&*PkkET zJPUaVl0u$?dF- z51#VIl1MWxn$`r3c4nx_C9Mb&nQaSAF!+j5dDjZ+aNDM7Zs1WpF+&R1wA#&cT3)(A z#&T^l*`f_((p1~pP7;Pw)iJASt8Sip;(s%~LSnO-cT=B=l9Z}~XObi@M3v?@dC|#5 zLQ|pW329Ae1lP^B=ha7jpD47dRWY%wI?+vFGAn{bt=2FoyPmR}LYqvB^3 zrYc@Xu55LAOR$FEMM4X_DN-dfEOh#4+Z!7jRqM&KRk7)l!tr>=kRLIG#dmJE9F5J0UWOgd&>Iv{Lh)QB za9@>MZpR(CLHU6jmbc4W?tAE;yFuXYdX?P18@eCe4!Lb_-E+H8VC}j+w@Yr|4t=KE zD{qy3&qMAI1bvYH3}f1VAw%yTx*t#j^=6LK%MTH^=aU9*+uwj|K;=isA7_-e-NCpg z@@443*4?9rd9d|G^|;5fKbqp6C;DfX|I;4E*>OMlZuU`oRCF}LHhT4*JD6x#_N(N+ z^xTK#R@Ju, 2011 +# Vasil Vangelovski , 2016 +# Vasil Vangelovski , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Vasil Vangelovski \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Redirects" +msgstr "Пренасочувања" + +msgid "site" +msgstr "сајт" + +msgid "redirect from" +msgstr "пренасочи од" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ова треба да биде апсолутна патека без името на домејнот. На пр. „/nastani/" +"prebaraj/“." + +msgid "redirect to" +msgstr "пренасочи кон" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ова може да биде или апсолутна патека (како погоре) или цела адреса што " +"почнува со „http://“." + +msgid "redirect" +msgstr "пренасочување" + +msgid "redirects" +msgstr "пренасочувања" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3cd3aa5ff34ddd4c1742f05d9ae079eb83d76428 GIT binary patch literal 1331 zcmZ`&OHUI~6dn~{HO9oXi-Q~5;BBWw1qU%kgakt)Aw}1h_O=}|Gq;(!<*_l+g%1=L zMxw6NKn!7_pwk358vP-7<1g`>X=zQto1FRPyuS0@Gwt5_o;3sKBU4vWq% zYzFoXb{}@`h+&)pmVsx1RbW*A0C*a>0(=8|1>1(tjv2;J;2y9S_`at(=NIrI{NF$m zc=Whoprw6IL@^lB?E{KfCrTl-Vh2><9?c38wyFr9;PBZ%IyEJz%2kDuJU~Rwixf$u zsZ?_unwg%YKyhE$UYQoqNqrTis#Ye`mu|8K6ghhQBF)ut7WCFqcLM7t$MbY*}LA76~uh1y`tLx4D9d0W*7rWld&YqwJt{ zd7$4MFijM)X)$j{oSnKs6tOJou3DGPeiJ7#$pgjmKKBBLE9qNwhkG6tJ}K;?aOgVJ zz`g0jZrb)r@&=aTHIu ztqP>Kbff+c<9b}QjszzDz|eT$Zfi~wzw8upkK#0x)Qx??s|bIHbwkmU<^*U&bTg)a z@;aQSI{bx;geECLH?5Indu+ q@=mN}r+LRM9fmsm45qHNL<_(Tu+oiqU;ioT>gt-X|7G@9WBdi&c{|$x literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 0000000..cd1f260 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "പഴയ വിലാസം" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"ഇത് ഡൊമൈന്‍ നാമം ഉള്‍പ്പെടാത്ത ഒരു കേവലമാര്‍ഗം (വിലാസം) ആവണം. ഉദാ: '/events/search/'." + +msgid "redirect to" +msgstr "പുതിയ വിലാസം" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "ഇതൊരു കേവല മാര്‍ഗമോ 'http://' എന്നു തുടങ്ങുന്ന പൂര്‍ണ്ണ വിലാസമോ (URL) ആവാം" + +msgid "redirect" +msgstr "വിലാസമാറ്റം" + +msgid "redirects" +msgstr "വിലാസമാറ്റങ്ങള്‍" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ecd0a04025658303ba13e87c4141add4c306c8c1 GIT binary patch literal 1274 zcma)5&uP#VB+8FtFI;Bw2UKw8#DCCl){ZSIAu-ms-8)oB5lG}JJr8I?*y#jdJu$W~JG!v9zNj>KX$Y1MoxN>WXxJkBWNsVLIKB2Sx% zh-j!J=0#?7Neiy34X>+uefJHTQ!*XwjO^Pw(6JH0l#=&wPnWe-dM?!@Zd=EG!g_FA>j)MW0jZ9`cBi zoW;;kwKWX3Z-1n>eo#i>A~}a3^C_ZE&T98K0@#WS0kVzSf*j zY$B^le~%Geo{dev(TLKlFqO0vPuNYVQXNs&%(r@cbd0*@_;5z&#;H6qRtW5KyKOh^ z?&133y4`iFKs&d$0{b_{wMuyWO2c-`t>X6p^V_yNcHg^K?Ir-TW4GYl9r4zNTe1gG zS#xc&FX7lDx8@(qZh7#jQl9#PAi0tkUFs@r9Im@|Zu;-sUloeI@CG#PzC9??dwrqs zf!#yGQA_?_I}k@TB;aoCCJwgqfzG-G+zPqh-I8lVYo|!|vE6nL{c-cNf8-wmgYnh& c{nIV={|?mkyNBN2_p-ddtpKya0bM)z54G0g`Tzg` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 0000000..3f474c4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,52 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2014 +# Jannis Leidel , 2011 +# Анхбаяр Анхаа , 2011,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Чиглүүлэлтүүд" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "redirect хаанаас" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Энэ нь домэйн нэр агуулаагүй абсолют зам байх ёстой. Жишээ нь: '/events/" +"search/'." + +msgid "redirect to" +msgstr "redirect хаашаа" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Энэ нь (дээрхийн нэгэн адил) абсолют зам юм уу 'http://' гэж эхэлсэн бүтэн " +"URL байж болно. " + +msgid "redirect" +msgstr "redirect" + +msgid "redirects" +msgstr "redirect-ууд" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..38a9b9f26f0da513875b7a3701aae82f7feac242 GIT binary patch literal 549 zcmYLEv2GMG5M2-{*piyUWf1t*y8h41;t6C$gQn%57kXrhSrSoM8?T9|-Gc zZiKRxaN2P4PADZUIRIHeMYeDov~Q};_N1EW*Vv=VxhR3=AZkvw=cWb=Wc|pwh9}8l zvFN#WqMX5LZ>sC$?xz2x`q!S+%j8)++8^z%u1|X`-qFf|!mXAKp6B4yB~2xy8j$Ic zFc#eKL%v5hSGo4D85p{&rn-=-xp)E`$HliSNN*2Y(g3@9ekWe|GjJ`U}I#vb6vJ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po new file mode 100644 index 0000000..dd18026 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 22:02+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "ပြန်လည်ဝင်ရောက်များ" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..44bd686b61194fef3a4848a8a2772fd765335f5b GIT binary patch literal 1147 zcmZ`%%We}f6djShW%x{s947euCp9G*u-m9UWiK@v*Px{J1prI>9&#Tm}l@Jn#{S<0lZm{Q|at zKfrU~{;?!E1AYUJ`nTY7;7{PF{|cT0e*?b)z5^Fgzc`U34s5}j;NRf5{|3Ytz$;_k z1V?=X9M5rJSPZ>Sg5z2o$AQzs+339SG=Xh$Di#}DD96pnohaTCiv8|bj?omb>n*tD z3&-BGgBiPIg#)6tgH~}ZHq_sL?~q0_44TJEq1worq8V>XLJr+55~MY, 2011 +# Jon , 2015 +# Jon , 2014 +# Sigurd Gartmann , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jon \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omadresseringer" + +msgid "site" +msgstr "nettsted" + +msgid "redirect from" +msgstr "omadresser fra" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Dette bør være en fullstendig sti uten domenenavn. Eksempel: «/hendelser/" +"finn/»" + +msgid "redirect to" +msgstr "omadresser til" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Dette kan enten være en fullstendig sti (som over), eller en fullstendig " +"nettadresse som starter med «http://»." + +msgid "redirect" +msgstr "omadressering" + +msgid "redirects" +msgstr "omadresseringer" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b2c18631d4391daef7835e4ebefd69e999327f71 GIT binary patch literal 1420 zcma)5QEOC36uxS#c3WTiEO>lM7Bjnd7p?Keh&DzLjD~b$AIoHSvU}z3on>Y=NuR2P zVnjrI2qFrlb#4h7(@-cV6n*PM`ya~atAC>3+)Z{#Y)J>s{m#t!&Uen4d+*<$4Xp-P zAH$Bq8n7d=^dq zKoI;1{2urKI0KSDe+MiA_a6*`DsU9&&%XwK3j7ubiCi0QUK zH?yJPbJ=hu9_jRCSBZ3(vZ(vY%xxuarrDK^!)VRUZrYy{g zj#P$C>t@_wUv!(A)nr74nQJvRsRTFRvWwiHlWJHw#VR2S&rs!bbh3IPtcD?oY*sAB zUUR@Z4HBz>_jz()dwzA8qC>IOUm#3!&7f>mM zg-Mwj+%Btq)4_yBESqvC!CM$7^rN&e6LYmoY;3^uwHAb8Q)ylLHy6>^d~Et%MwE)e zOwv_6VV9(8YaDd)t)8fkQ_r0kN$L0mRf^+<3XIPi5P|?|EF8gj<;#Biif(D$jHAjlGomm-TDj T(nGw, 2012 +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "बाटो फेर्ने" + +msgid "site" +msgstr "साईट" + +msgid "redirect from" +msgstr "बाटो फेर्ने फरम" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "यो डोमेन नाम छोडेर, पूर्ण बाटो हुनुपर्छ । उदाहरण : '/events/search'" + +msgid "redirect to" +msgstr "बाटो फेर्नेको लागि" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"यो कि (माथीको जस्तै )पूर्ण बाटो हुनुपर्छ वा 'http://' बाट सुरुभएको पुरा हुनुपर्छ । " + +msgid "redirect" +msgstr "बाटो फेर्ने" + +msgid "redirects" +msgstr "बाटो फेर्ने" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..332d1ee9ba598a48796dff2074f3a8c6e9ceb4b1 GIT binary patch literal 1114 zcmZuv%We}f6dj zYZiO}Yc_~qK(OW~I8M?Q0ai}Vz4r0(T>E~%zVJ4|xD4C?3g8;>5s2dl5Z8VJ2f#1j zCGg}-l3W762S@z}@D=bUaMXVWFMz**-vM8NxSpR&l2>30egXalj`~{=Uj;Y8(Qh3b z^&K#N$pQXgG1Z<2$Ft)&3tXH=Gu=E)V4GZs$vzj#aUOiq9Vkz^G}L2a6$b1GiR^i+ z>%cUUVL(gLW5$konJkv6Uu#VV`_IS+>4GvPO|X*|2O*5IR%@|2bM*sT>mnNe?Rbay zFxPbvx8g`DY$cT;BP(vw&Y`SEnloB#@t95UEzi>BgXrt#-+dBL-`VOk3-%=TiC2M> zJ!gj~RCEgQf}K~^WK;~LDQ#n)N7eq}LL&ARlWYcp!>J@1Mw$1*@Gwq?MVtfcLG zqMeHL0kv1NyDPWTl{AG=?DJSf&r{thM4}Dd{p@afJH==`lRk*9lg4WqtjnmQhmv+B zZuOx;SRr~`;KXWr>9A`W{RrDkS<8||7b_WU*CEGK%CsH!8+vw={$#xgYHwYcB+eK_1TFX zliT=i8LjnHIQhtojBf1d+DR>*T32~YjHapISXrl8xUppD<_5Kw*Bi<6O0$YaY?5si z=rwwT`MC4yfX*vu>Bvg$X`tA}_A|?Lq=trUe<~eYt, 2015 +# Jannis Leidel , 2011 +# Sander Steffann , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Ilja Maas \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omleidingen" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "omgeleid via" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Dit moet een absoluut pad zijn, zonder de domeinnaam. Bijvoorbeeld: '/events/" +"search/'." + +msgid "redirect to" +msgstr "omleiden naar" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Dit kan een absoluut pad (zoals hierboven) zijn of een volledige URL " +"beginnend met 'http://'." + +msgid "redirect" +msgstr "omleiding" + +msgid "redirects" +msgstr "omleidingen" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..239487cd087a455b2e82a26cb1e404c2b17d0279 GIT binary patch literal 1072 zcmZ`%%We}f6rDnO1p$IJi_5BsiZhd{rDaMGq7SL4DOHui+R5C^xSg>h+j(@u2OyTP zXVZTu>;4Bn!4GgIDM>-X($Vp~b9{Y$=lp!K_$|P?13U%VzO8(J>__Qm3YJ#C>DEXt`7+ z;_V=HqHSWT9KLUhEz8nFE4HOa6Dv_;O*A4Ay`;u^yt=X+twa%o;)sW;tU1@MLnIo| zy@*$%uSp;3=2TSj}# zSG3Ric&O*G5BoX(!zOhzX&w9KaeG&6%ys2mJ+@*;cTM^4V%q2^KWjK9tt*H5z{*_g z8e2Fd`jgN#S2k(7ZB{isYf_`OSqZk;!(yj+8ron@L$;*}^~7KfnM9@Vn4+pP1;Kx| z2Iu5CJj&`Xkwzt%Say!7)J}{kEft*1ZFzNH=kmh-|EhsUJMbfG)^e!pw0(I|Ow5>- h{peKMu%|H50G^%RXpy}Z!IGEf*JH2pYvH6s@EdBaJ&6DS literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 0000000..73337b7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "omadresser frå" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Dette bør vere ein fullstendig sti utan domenenavn. Døme: '/hendingar/finn/" + +msgid "redirect to" +msgstr "omadresser til" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Dette kan enten vere ein fullstendig sti (som over), eller ei fullstendig " +"nettadresse som startar med 'http://'" + +msgid "redirect" +msgstr "omadressering" + +msgid "redirects" +msgstr "omadresseringar" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f80ae2ef808e25995fe7242cdb6d63e3ecc1b052 GIT binary patch literal 1150 zcmZ`%T~8B16kQd+YSe@`qYu{?f#7u8Mg$izMuY?d0ZGy4p`Esi+nu^I1$;5`VPe1- zAFMyYXV98Zp!|l}@a}K%Op9$KI?35Hcjnx4@667x-kzF+aS^x$WPvNdN5GCfU;$_V zFM;c49On|a2)+ugfUW*5_%e74{1x~Dd_X*S&T(FY>)>nPJ3Wqb6FdaI0e%kd1-}9# zr86#Ib{4>LXTYM>=Xtx5E%}OaJfuZI!q+7c5dyxbWKh+DDqNSSpDV1$Widb!+f=9q z0WHi=lhQoWepsXxWKv&A>x$>PeaW_~D#>b)x5lR(?~+)}1=YMwMM=ubGWSCYd08ZB zVwIOGf$*r$70V*j%2k3#xsvsbMBa}?PIo3$h-A4NY1x@8XD*UU(6XsKdm$p_%h03z z5)X?qF)u1I(riW*{XBb8Eh?6k9wp{xvur#PTtmyAa*ZZ3sq_#_r&#I%rH8$HnZZ;h zm4cAXi)G(>c6GxLu{3n|y`ho86h>m2E6uVI4^_amj68bA!w?rfE&RL)=pnj6_&8{V zNk1&eN5~0_RbCV=%FWZ7+>=??`b>8@1nKw@TU zW}t qE3x^{=WBN2cUBay+ak{2A, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "арвитӕны формӕ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ай хъуамӕ уа ӕнӕ домены ном абсолютон фӕт. Цӕвиддон: '/events/search/'." + +msgid "redirect to" +msgstr "арвитӕн ардӕм" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ай гӕнӕн ис уа абсолютон фӕт (куыд уӕлийӕ) кӕнӕ 'http://'-йӕ байдайгӕ " +"ӕнӕхъӕн URL." + +msgid "redirect" +msgstr "арвитӕн" + +msgid "redirects" +msgstr "арвитӕнтӕ" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0481d7e5a896ba0639e62c8535124ac0885a4f7f GIT binary patch literal 748 zcmah_&x_MQ7>&B3M!a|y94|}DGEGuecb!@h_Xn(Ou`E^3v&}R+C7lVA>2|%T7gxLq zdlOVpNI^se#gl)5e}l}Q;!9TBi|7Y0@4e)G-+Ysw7Z;8^)M?-nunwF7QlP9u;4JVA zxB$EW&I7N3bHMvjpYXh|;IjY0NzV(x7Q6_42fhsc0Y}aoD@m<8u0);G_N>iV z5KJbMhAn5yfjDUN^(Z*L-5*MS4+=6K)cwv@XJh^!qDJViX=R1Neh)KT)QSTeWGR=b zMf!W(l;$UGc^h-(B&v@`tWCa>Xlrg#Sid@zzbByW$Dd2RD7}rZ4~3 S@Wo9(x#BY#{yz8LV}1dp5(Y{D literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 0000000..a82e053 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,47 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# A S Alam , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "ਇਸ ਤੋਂ ਮੁੜ-ਡਾਇਰੈਕਟ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "ਇਸ ਵੱਲ ਡਾਇਰੈਕਟ" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "ਰੀ-ਡਾਇਰੈਕਟ" + +msgid "redirects" +msgstr "ਮੁੜ-ਡਾਇਰੈਕਟ" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..aa1cb21ec9a2b6bf70eb28acbe1f62c945706b79 GIT binary patch literal 1279 zcmZWo&u<$=6y8Ehsrhl>%;ELWCZ?>t>n3WtiBn2RrHTfu$bkz7Cc9&M*W;Ph%xpGZ z^;D^U0*8o8#F+zsKu*Etg2X?7gy4v{BaVEtapF=&divg*_r34U+u8Z;y{q4NST|tr z!xGp#uy z->-Y#*T8E?egzx=8^9ldZv%e;I=x?kj{hg{4d6dONYvWbfUdV&koK!D3u z=k4(%)jYPw>yJ`HF_Uz_iKlkNH6dUJMv205%9$O}Dl^zohrCG&X&Mwl(Ei?2GL~tZ z$|04gq?M7idDL#Nw9Zw{NEIS+!mlcRNc<=kMdC`)k`gsxsU*oJyhS@lY?2Ee(Mp>i za%oN5aHivt)76V}Uph3%bRv8BMpCtYlT$@zMh?0!Sp=#{$Txsj? znqivw9~VR8_f<>T>wm&5PSOd&bw3RJ;68=-qP5PQpc4cj`g{B^b(%}w zJ&^p)T?#j%^|d zup#&RoJ}I?DUll7#o{BEW!bV$Gac}wR;(uN^QkUCEUMeNXg3?XPj+{f^M|dV@kmLF zkL&lRIR>=+$byMW*ra&GwBfe9-+%0HEP1ZifNOt8#>!n>L>mXGy*y<^xoGr6p_%X> zD?Kq0$-E9tcWo0%m+7v`Za1U{6i`H~@>UpZcRO_ZHaT~zyVi7my&r6a9eVbxP6XQ_ zG7l(3k-Ule3(|HsSQdv($6tu9FZb^+_t6cii+1RDF57|Z-R5Qkze>f&Dc7oGGG$&* zB`l-)w{gnnr{mc%e&njGhGKS{$k~gtlhurkDOcrme#)~ZiQ<5AK7Y<-{WP?yauruo z$+FptcuFRPf=XU~B(F9&JNZusDyL&n#8oYTw^5a|$lFl3hlNk&V>~yZ-|JvUR2a literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..7ca96c9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janusz Harkot , 2014-2015 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tomasz Kajtoch \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Przekierowania" + +msgid "site" +msgstr "strona" + +msgid "redirect from" +msgstr "przekieruj z" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Podaj ścieżkę bezwzględną wykluczając nazwę domeny. Na przykład '/events/" +"search/'." + +msgid "redirect to" +msgstr "przekieruj na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Podaj ścieżkę bezwzględną (jak powyżej) lub pełen URL rozpoczynający się od " +"'http://'." + +msgid "redirect" +msgstr "przekieruj" + +msgid "redirects" +msgstr "przekierowania" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..46be519c0f7740232e1d20ca63b38b68959f3737 GIT binary patch literal 1129 zcmaJ<%We}f6dj5~<2-N`h=5DL2f&RVfcy3n z*a3b4Pk?(TJntO%4cOJc1784t0=xRp;5qOY@GIaeFpvECDbITbHejdo4SW$?L-A$s zP4E@)CfMmc1>@&M_=Chq`!v|??Z!#q>?j)7O+pW{-WiwlM3ia~TI2PT)KJJJ?Ftg9 zO@t;SeAlR~w1Nt56RL898MQBJr0|&rWtP!SZ<~ze+NLt5Ay(2tVr>yL8VmKYs!3Ft zMNar{#p@&v!mNzkQfx_)%6TeD@?6wu6NS>2bxfQ_?0y*=)>i>lx{vy7T?=ke z%N}rxleGNiGHd$GzeUZJV5zm}w|pOktS9zUr#Y)zK@n@+pyq0@ytL?JRJOUXtgpE= z8MjIY^stnQI$WnO>9))r-;HqrSv^$w9hA$sTbhbJhv)-F^zp}2R#l^DzivrDAabO!oh6h-qFyYz=+urGK zvej9g+iM^++mNAhj~3ACZfcKC8c<;?-K^9+W1C9nCLmdiQqyj&(Ku{ZC0%P%v$j^5 z+AqY-;mM^{#@jMhQK2HC58sl33(Fj~%u|`DsT&nl(JRt0%{i=Cx*BIg%)&5Ok3by0 z=aEy=$Ne}`k6@?&s839pN-S5-l7}B, 2011 +# Nuno Mariz , 2011,2015 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Nuno Mariz \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Redireccionamentos" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirecionar de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Isto deverá ser um caminho absoluto, excluindo o domínio. Exemplo: '/events/" +"search/'." + +msgid "redirect to" +msgstr "redirecionar para" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Isto poderá ser um caminho absoluto (como acima) ou um URL completo começado " +"por 'http://'." + +msgid "redirect" +msgstr "redirecionar" + +msgid "redirects" +msgstr "redireciona" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f363086d01c88302fc4c1a3e71df5e5852da3d0f GIT binary patch literal 1162 zcmZ`%O>fgc5H(P~f)F2P4s&awcH<w*VN`4~T%9zzN{iPr!Zq z1sno@fak!Y3!Zlk`~mFZKZ0+7zkpr*SMVJ88~6nH4%~r1xa4^+!0*5>!N0+`!J7!a z1%3*4aeT}MjK_P67g7v!Uk1C{Ze0Yf4y{q#*z}OryW*Udh!QPAYrJ-x7z(+hjv$fP zSZIR7J4U626_j%uQ<)p=sAEwfh0oM2(v%Kc`(!NFHjzE*<0Q?;*5-ll&sRrTO{|JE za*6-VxJY6UrbXnAq9jEsK+zGGJymLnTxrV=OfQMpR?#!8tpX}FpS0Pw7ThA1 zJ?0iSY1Hb=tX^Za2UK4PmKqDSMy-ZG))L2w%Q=f%K@e-)r}}EJytGimD(!P)SzB{y zQf`$FFpfxzzRA#x?NWEGsZ7XRpZq|OCqh%`w*3VP? zmNg1vu8pwkhwWXqI*W7VxdpK!w@<4|US7(SFGwjm(P z7YUX){e%H4XP#B)o-v9d2<(5^#~MxCSw#|w5bl(E`dKE*$yA^U1T&VYGJdBpAwMJ2 YX&)0&x($sq=lz^(es*Wv`cS@q0UjAsYybcN literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000..ce75c08 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# semente, 2013 +# Jannis Leidel , 2011 +# Lucas Infante , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: andrewsmedina \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "Redirecionamentos" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "redirecionar de" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Isso deve ser um caminho absoluto, excluindo o nome de domínio. Exemplo: '/" +"eventos/busca/'." + +msgid "redirect to" +msgstr "redirecionar para" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Pode ser um caminho absoluto (como acima) ou uma URL completa, começando com " +"'http://'." + +msgid "redirect" +msgstr "redirecionamento" + +msgid "redirects" +msgstr "redirecionamentos" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..75ed62248f5bf0276071bfaf22b697181639d3b4 GIT binary patch literal 1222 zcmZWoO^+2t6m11jpCK3$cP=gqnb(1O-93Ew@Ib^NAz|X=`9>G6YP#=xuO{79O;z>G zNZ6S94TKPPER7m}fN{gbkP!ZYfwg~vQ}1gKZ*p_$R^K{Rb?Wp#r;k615FaByN0!Kw z$X}5mULnJ`*T^m8zsT>Ax894QkAP2rq5moH6W|}f(Elg!IPh=aOXLgWr>LJCi=rQZ zzW{fDC(v{Xcpvx~@TWOG28RCMfFA_ zXgE=h3aM$EiItzQB@}YonX2_njr0@hN{1P<%P|>zrcql}v^BU#&P(f+9@8FH(#pj9 zCQp);-i*~vOk0(K_+7^H#QR0nmSHKjq|($ED)9jMSQjuPx>`H!d^<27|rf3uc-c^C~sP77zM25c0`Ni~H zis;;v&WoXy+EvmUo6|r(*o7qDdLBv5u4w7Holf=Ka_Y-5B&m9Zsc(Qlk6SrrF=Sa| zIn>e$1l_sddwY95ANbXX_rsE8cEbf!^Yw`}N!;1EyRm+xMb=9@w~h7?S`2?|a9Pj$ zK4~gE$Ql(BX&w9i*6@zFdej&88nG4Yx-j7pbGo{%{PLVRS<~69S}QAY$JpBCq?>8! z`WMz{HtctGzn|Sq^KQ4RzsS<`Ms_WJ_;6nI`)PdkY*(KF#_`S7Jd5MC&ce6Pe}?9V z2UbP53WmCp8iR+Tks<>#S8&|Sz=sFaEhIroa;=NW$(C9@^)6(B%lvtI_PZ{)dG=J7 zgqL{B#0zd|$y?rT!2!OJ;{R, 2011 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Razvan Stefanescu \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Redirects" +msgstr "Redirecționări" + +msgid "site" +msgstr "pagină" + +msgid "redirect from" +msgstr "redirecționat de la " + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Aceasta ar trebui să fie o cale absolută, excluzând numele de domeniu. " +"Exemplu: '/evenimente/cautare/'." + +msgid "redirect to" +msgstr "redirecționat către" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Aceasta poate fi o cale absolută (ca mai sus) sau un URL complet, începând " +"cu 'http://'." + +msgid "redirect" +msgstr "redirecționare" + +msgid "redirects" +msgstr "redirecționări" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dc75420cfcac2becabdaf65eec0e143cee851b76 GIT binary patch literal 1456 zcmaJ=OK%%h6uv-t86hFoJPwOCvC^?;Tt`hOnG`6gR8)(|a_IWTzOkp8hjs6rBuHJ< zVL?$*yF!9hB{m2NB)4F2OVjMwu(|UG5Ug485BTobi7OOxrK9gWzw;Q)AFrSKlHt7! zc>~gcybAdqV&9(-8~Y2g0r?wp4f5VIjJ*W>8ff#s0loqp0&V_d;3?p5z|+q%_B-$` z*#A7o*jK>U5F7x%16u#W^NhU-{1Esyum`mMTR_|ATOcS3Zm5M1z(CDjvclgkT zy)2AXq)r<1FrkFUqC#uCJnl!r zr@5-w7Kv6>CAe(&EU%o-eWcKqOyilQ(<5Cm6>7oOWqKWpI#)W*$3m(wO?>KH=Sep$ zHAO#_+G(h6*m2&^y2@##K9$x#YB`sr;2OEk2V7&4n(Hk(p6j?5$UE=XYYT48b&=>a z#dc^pXL;w5H=cUp zN?)d{C``H;?+T|SchI%`QgwcpOCrOi+u zjp>ujO6yT3dE{J9WvqNk`h}^2`Z7(_U_LqRxk2F3nKNWn_npA==pwm, 2011 +# Алексей Борискин , 2014-2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eugene MechanisM \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Redirects" +msgstr "Перенаправления" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "перенаправить с" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Это должен быть абсолютный путь без доменного имени. Пример: '/events/" +"search/'." + +msgid "redirect to" +msgstr "перенаправить на" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Это должен быть либо абсолютный путь (как выше), либо полный URL, " +"начинающийся с 'http://'." + +msgid "redirect" +msgstr "перенаправление" + +msgid "redirects" +msgstr "перенаправления" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..92ad19f45af40e6454d83f91d8c872d17560255a GIT binary patch literal 1160 zcmZuwJ8u&~5I){u1W42rQ{^F8`)m>=T;lLdBqRb+xPU~rzMI$=@9my;_ng=r6&0eQ zpbQcP5|NOgiV)3V8vX-NEcaRA+*z+Eu^i`{c-0v6DE>k>3nCvD$U0&IZ#{SAANg z2i#Z|YA%i7R_Oqi2VH}(_(WZs$6k^q`c{)#Aj*+S7brkBbKXQ2B2NQ&EL4ZLVPe0% zo12?u>(r8U+;RbxVLg9I>_=BjyE0i?zQ4RUs=QkEOLvvD)K(UDGb+vEmaSxh+CK+T zi)(|nz7{UA*^!^iwT_xC%1F5<3t+a9*n?XJVA`b>k!vp4lG3ROKxPBe)UVIMa9f{{ z^?G#@Zh{X1Ovr_L4aUYm&ex~hVU-SRb0vB$G%0GTS0>yGl~s@ypZi}C8r}XoXyo5s z4QI31wUR@GG=VgpZ3Ufff4je((1>z@4F$z+CS>t`Fs42J?Pake`9`rDAx+tlNzF+b z42P5p4w=gPUlYnS_yG, 2011 +# Martin Tóth , 2017 +# supowski , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Redirects" +msgstr "Presmerovania" + +msgid "site" +msgstr "sídlo" + +msgid "redirect from" +msgstr "presmerovať z" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Tu by sa mala použiť absolútna cesta bez názvu domény. Napríklad: '/events/" +"search/'." + +msgid "redirect to" +msgstr "presmerovať na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Toto môže byť buď absolútna cesta (ako vyššie) alebo úplné URL začínajúce na " +"'http://'." + +msgid "redirect" +msgstr "presmerovanie" + +msgid "redirects" +msgstr "presmerovania" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..41e11af8cd1c19b8a8988a6a615d82735f8ab802 GIT binary patch literal 1173 zcmZuv&re)85PnT)er)L_=N{$~0SexIyMUmNY|@s3gaj(3OLIdq`-Xi6Kl{n{TgWP> z+^d{&=&kCxk@5#bIkmm?+H;kh`%m;UyRfLj(x-36^LcE~%s&riUME=hfiHj@_#F5R zi0cCoV;_M7;9uYw@bxE2au577IO=}|e+GUFj{0}t8StOrzk$DiS@^%)PLf0L8}Rqw zS%{+k5FF#hgzE{v1b>SCS74;L&_+Mr9oH@3?u9kJZ(=4$pWKPgKIh7DKlr3qC{KN9 z=!l6`DA*AkdE~9G15+hKLG#jM#}0XcEW&hLYfT6HJLH3OL74%a;Uvu!AyiqbHP;+x z^@Xi<9uxmR<0A2SU)Om&iYqC%rBsHDEV)UW=d!FcXEfL1A)DY^o~7#-F|V7v`^unW zXUnM@t*LY+^AD}T*Zx1b2#?D8lW1w*|+5roHc`54p{V9mKpt^(FLPW z&-qEQ&(6-8A?8-cd>+rV#=pBHJxS2=y0y^Q-QL}t)}h@@8ynUH6j}71SNLe)^U$g^ znz2s(LORc(d(hhwYg1jk>zJL`G<_Qzn9yKQ<(DM2!JJ8;`mcZpuSxC|{L)In%zVZDK-a_viYDh$zK8|Z{d%i`2x zgod26k(U!}EX|)nFdA4VPZmgOg_)+fRoTkwICLIGjpMvXBl-JJ4Dt0*j_FGrCj3&} tlplk8, 2011 +# zejn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Redirects" +msgstr "Preusmeritve" + +msgid "site" +msgstr "stran" + +msgid "redirect from" +msgstr "preusmeri iz" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Pot mora biti navedena absolutno in brez imena domene. Primer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmeri na" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Pot je lahko navedena absolutno (kot zgoraj) ali pa kot popoln naslov URL, " +"začet z 'http://'." + +msgid "redirect" +msgstr "preusmeri" + +msgid "redirects" +msgstr "preusmeritve" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f67f508a2c7dd31dab7f449bb37373147650e6d0 GIT binary patch literal 1125 zcmZ8f%Wl*#6b(>b!(+jk#bwo2;7O(eT2hK=OA!bvs?ik04$tIH;%Q=MY^N6YW`W*gK5V!1+mZpgRmB*hc3<(&bE99(Wh^3gu`ZHT9WT`GPGWk$q>% z#xvE@7c?UszL;&EC4*@iHf2eh-RI=Iv|j0)cCeDB3-9YRj;GrPuC6dmnFZtj9d8lu z4$3AAOR*(orjkmNmKC>YZC6%x$tg|8yv^FX*s-*OBKX?Fa~}sZw5B@Ayg80tnUq=^FM49tvh>i3N7CaYb4llp z=p-V!N1gff_T0^6E=eF1UEWr~^F%ifk?25oH@%(QOfXu{rSqa^rFNzC#-_BwPOB}t z-=FZq+M3*=bXSa3-8MFVfF(L_WX__;vPx;W>`Se1i!+B;ytA{@_Q6pNdAB_ z5tWDQV>gaxTkB8P*G{VMw3F7V(H>VTdT(o#=Xux1b%|fFNP|LJ$9`$E_gE~P=)zt@ zwqi{WO!#dnE%cQ?K4(g9+}bD`D@*a%*vh4(>q+XC<`(H7T$<5zV~IMmi>;`uGRq^c zDvqALrK-^x`Tac_ad^AJbAHr=G~*Oi;j60m_bgh_@ud0CoTUl!F)&nRX*5;*cNfAr zGZWveDR?xAR51T{hg;}!;>w}};fX!ABy62>`+IHLKn^)qeKdXONu7_R9dW!BgsPf! Y(^b literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 0000000..9e94e49 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,51 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011 +# Besnik , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Ridrejtime" + +msgid "site" +msgstr "sajt" + +msgid "redirect from" +msgstr "ridrejtim prej" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ky do të duhej të ishte shteg absolut, pa emrin e përkatësisë. Për shembull: " +"'/ngjarje/kërkim/'." + +msgid "redirect to" +msgstr "ridrejtim te" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ky mund të jetë shteg absolut (si më sipër) ose URL e plotë që fillon me " +"'http://'." + +msgid "redirect" +msgstr "ridrejtim" + +msgid "redirects" +msgstr "ridrejtime" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..00985c837d6f0e547367f0a10d761f0551ea10af GIT binary patch literal 1350 zcmah|&u!ML7*O9E0x3wWA7STl1(<0K#-ym5e0{y$M(ctvfi;~#z`un zDx`<1e?X;x1W25FFl|#JewZ5Z-7PMU*LP-{0E+Q7<>!t^!LF>z#XvDKLHPcpM(DaUH~WH zKlsS=egVG({|LSYk&FKgJ`Vm5d<>lXxF7!#?D|Atl<3ul*^7a^4}n9@z;XR{56XL= zIA=lBVkN3Zd*w!~smfET2okYr2t{ysMa!gZ1hu$n&XxT+>FiFV|zGi{X{Ba7-hG$Bne#!SCWD8;? zb~OjOG3E!XG*13_So&tv$H`sh+OV?XsZO|&Dx_)H%aXp6%RH4Uag`=3y~wxAyODxa z^(iE#^){~yRu;S&(p8}lj{$jh7?4%d9D&})@vvV_p zCkP6D?t)AW-j|hsXkkYq)=aUL;5$rEwZWAZCR!|CVq*iH>$M~ln@OwEeY=pxDzVuc zGbF8Y^GRFrgk6%VsY6OzJy%DkC#Y{mBk5OxA4LJ3JW0;&XG@$!=H*uyH}IZ z8E5t~{K>$l8#nqX(D-@e1js4nCvu*>m#y2a?5FIeeF9#$9s9fOWVda{vv*;33GuG| z%Wjczd^E5}~qBd;b9> z-E7kpdj{iYG`NjUsM^{8Q|z0>O}KB8{}}-zZ`p^gFP7_1_$LP5aSCMb^oL&WE3), 2018 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2018-01-29 09:26+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Redirects" +msgstr "Преусмеравања" + +msgid "site" +msgstr "сајт" + +msgid "redirect from" +msgstr "преусмерен са" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ово мора бити апсолутна путања без имена домена. На пример: '/events/" +"search/'." + +msgid "redirect to" +msgstr "преусмери ка" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ово може бити или апсолутна путања (као горе) или пун URL који почиње са " +"'http://'." + +msgid "redirect" +msgstr "преусмеравање" + +msgid "redirects" +msgstr "преусмеравања" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ef08ca2e3111ada559779b2dbdd9955c1c538a69 GIT binary patch literal 1132 zcmZuv%We}f6dm3WUJ`2-mqpt|#mP)sUeg9pODh$%v??jASUAZ|;&jFy*`Bl@#0T)$ z!N0(U75oMp{(&`Tk~TqrrK5ANeeT2d{c-K|rvU35a2;p@7lHRcu|5NPz!%^-aP>qG zoCo*7m%$mh(7yp+0KWzQ0zLwT{@tk{*arUuUjZ+i9>=YKFTvjd7yB>32$`(2uucNl zo-Cvo^?9b)Y4(+)w$#*OV&(g6365+zljNQ$lfF-7>9AvlTp@#F>gGv8d%K(DytH2F z9vvW(=K9`eajiC29cOiYlP8@b@!uJ55+AmcyiXv($02MtXh^HTJcDFG*J(uTOtZYc#onx@nU^GtcM|lVwZ=i$T`*Bfk;Hq z-HsQ-`4FqLDV-NhE453cH#VlnQfoZ;CaVr7w2W@xK1@b#Rq3v|j~Ly{WsgOZWg62{ zwk?GREN`MMU7_;PD<2#jRDF?Ib@{N`Hfe2qw_{3<($t)tSqxEL=~|_~H};zA;_g&e)aKlYQBGELR*SdqDW?=an_Qu+)F)>RNj|{dd6a; z3qh9a(LnE;0UYz~gVF;gC;y!3ab7FOY5z^x;#Z_nMiGoNs7g;z&tePz{-0USEawh~ Wa)^#NICfd1?!;5HKXpb*8T, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr%40latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "preusmeren sa" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Ovo mora biti apsolutna putanja bez imena domena. Na primer: '/events/" +"search/'." + +msgid "redirect to" +msgstr "preusmeri ka" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Ovo može biti ili apsolutna putanja (kao gore) ili pun URL koji počinje sa " +"'http://'." + +msgid "redirect" +msgstr "preusmeravanje" + +msgid "redirects" +msgstr "preusmeravanja" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c72a5e70d5d9269c9aa779acff9fdbe441f84b78 GIT binary patch literal 1147 zcmZuw%We}f6dm3W#6zrETvlxb&LrhMrHImpgw%>Eq_B1}w=>gv?5XWZ%7?H(VufJG zf>l@SBC+8g5Qrr|!EqCs3Ss5wT#t|M^|epFUpxIK!ngoj2U6e?@CgXx2N2eN0$adu z;1#fRB8tv~--3hwJ@_K{GdSqKfKP+Jg5Lq(fXkTYr=n;VJOp>ZzrYRfJ&3P@m%vxR z9dOY1z#-or7%2|pGvH7=jFZ5*!)RP@5=KZHoeh%?r-kLdcTqPl9QCE99upTnXG@sK zo-?ZUOqKLG%}R$aX25e~uuR*vQnb}sC+DU0h0bV*oivksUnOxo(;R1Yxv5ne691d= z7V&;x)oIv@l9ZZK7Mipyxk;=0vaA#*G!yfHwRf>&Y5RG|YbWPE3TWG!ays+oD0Y!6 zJV%?>?4VKcEEO-=y29v$(jBQY)97$ztQQ+DD^l^a&Yb9)gc_UAyJFe0^w5eG>2Z?z zR{O4Kw?yk9weKf)=5Myjtm?iAkC)JcUg3|9nUEVaHdSq<5^KhmE+JhVPTk`C0*%APSxq+, 2011 +# Jonathan Lindén, 2014 +# Thomas Lundqvist , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-15 13:32+0000\n" +"Last-Translator: Thomas Lundqvist \n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Omdirigeringar" + +msgid "site" +msgstr "webbplats" + +msgid "redirect from" +msgstr "omdirigera från" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Detta bör vara en absolut sökväg utan domännamnet. Exempel: '/handelser/" +"sok/'." + +msgid "redirect to" +msgstr "omdirigera till" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Detta kan vara antingen en absolut sökväg (som ovan) eller en fullständig " +"URL som börjar med 'http://'." + +msgid "redirect" +msgstr "omdirigera" + +msgid "redirects" +msgstr "omdirigeringar" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1a37f4d20f87aaa66ec7e9b8a65ec5143723d8f2 GIT binary patch literal 1078 zcmZWnJ#*7Q5EYQ{VFrp+6ckJ4c*0q>NhU$T3`1~+F!7K{6liER*4jE-y3^=Rk)4i~ z9)^O7q2_l$P0!DuX3sV;gqwMK_oUsoyQllPvh?2Lb)9jS@rH4e@rmKqH^vRdcg8W} z2jexPc4?OLmiZRzcg!yDBeRSD!u)~pm2sPO=ZfcbnM39y=FiOT{V(Pf=H;cCzBA`4 zGpA1bV)CvrIMloB#C&mxx6HWe^dUtur=B%l7)t{^RB%E-(#Dhn3p_D8DJ(&THilI+ z{6?Qr4K#m-evu?_e7FzBVs51xK*^a=qZt|rz+5;^0Gj`xAay`+d-Dwl*v zrzjODOsNi?F{W8U0aSfDC1s6o2=iX-eDitV=NstfI$bEM&-cbV$n}tC6nl|)MY)k$ z1rQBU4Rqy@GM!t|H3J!mr^UdCPzO*sco~YFoX~Qtc!rjnXf>J}qS+9QhtS*%)>~_h zR-?gz;*d_I^IXJja*${}faX@PvA)*eRoO>lMVO;930j>8@B)?M1K%eZQ38*+8iJCq&;sl z08>^Dk|M`M?CLx<0jO*$O}n)Xvu%4-!M!##YugpCic=28N#S2 z`5_DbMKHp2IyN&xjG2aEQA{tOyLt1k6H*iU`{K>rERLkJ`rj`@BiTzK47n;KuHHyv s9lCu~I;i?7+F~TNZ?RukbeAsux8c2%W&=zMSUo~-rrD|_72(B%-)|5%t^fc4 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 0000000..55fbf69 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "Maelekezo upya" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "Imeelekezwa kutoka" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Hii inatakiwa kuwa kiungo kamili pasipo na jina la kikoa. Mfano:'/matukio/" +"tafuta/'." + +msgid "redirect to" +msgstr "elekeza kwenda" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Hii inaweza kuwa kiungo kamili (kama hapo juu) or URL kamili yenye 'http://'." + +msgid "redirect" +msgstr "maelekezo upya" + +msgid "redirects" +msgstr "maelekezo upya" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2a9b43eccb99022d43149ecfc1aba05d86bd572 GIT binary patch literal 1502 zcma)5O>fgc5H(P~f)Iim5{IFeHYyuC6;N;+gn(88wW6w0IB(-kV&r%ud()H)QjwtL zqZ|-9zy+c9034i_4+$>tPmuosN3J}t69=Ily3+XV?!1|KGn@Q6HPkV%4#UpC%CKXw z=dfgbgDt|o!|uXP>@$obz#8y4unA1~4}eF3Pl2y`_8aH?0mJwMJUwI>W5AOK4PydW z0w(7ca0>Vih_GxO!frndVc9||trJuTt-B#rxKB%hgsbWzARPEoD7}^v)a0s8qddfo zTo!qfa8tGAd9=7NOQGU{a{U^$5lJI;rJA;Bjug_YVO_R7CrSK&#&aZADqhP;LQ#?& z+2F2EK5vKuO|S4q(-St0m||J@Dl|jEgGxQg8wke@L`7vAss^$#I4PO!Lt{RW_rPU0 z9d<_qp(}lxoO|4_$=rfy%0RKXu;x1KTB{bava~5Tf4j`C2ZAeb*$u8BV%#cTU`2~r zm#H{mpC2Ey#w`m(wjh?>B9+itfDD#_Q93RPMx&#+4aUQ(+n0ygbe zWb$4%U0QNgCK5S#Zr*DJ++#B`XoNQTO??bY?`fS2R++5 z48f=d5(=UV#B3CdfBSuzGP8Vp?|io^UonI@+SEngX1WWhB3!3~LxT{trDufUV2|%( ztsjj*=I$-@d+9#Z(*ZAevm`l&j%>I<_-5Lry~{sUvoNQ0G|4Pb8R2-94_a&{X4TLW o%ee1*iuF$frQmp@yNPt!9qq<9iA&vktFdRUenV8<={Ifs1$5f4@c;k- literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 0000000..156ade3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "லிருந்து திசைமாற்று" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"இது ஒரு முழுமையான பாதையாக இருக்கவேண்டும். இணையத்தளப்பெயராக இருக்கக்கூடாது. உதாரணம்:'/" +"events/search/'." + +msgid "redirect to" +msgstr "திரும்ப அனுப்பு" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"இது முழுமையான பாதையாக (மேலே உள்ளது போல) அல்லது \"http\"//\" என தொடங்கும் வலை " +"முகவரியாக இருக்கலாம்." + +msgid "redirect" +msgstr "திரும்ப அனுப்பு" + +msgid "redirects" +msgstr "திரும்ப அனுப்புகிறது. " diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2c234464d1a5f2265b7026e202f8273402b21653 GIT binary patch literal 467 zcmYLF!A=4(5Y^~ukDfi$!~;f$wnPFJF-C<11Cfx`du4~UW@$HVSM)yuRu0(c$+VVV`(RJS83wFNig|#2>o6qO;a)G4<{p=MhF3yr2)pS;ewnOdQwsMUbtEl3=!lB7glvP5AUjM-B|7Iq3PD1c;fJX`ce+cE z0z{ielx&>~LNeANLh7{*g^tcE_Nc8jfsN5*Sg>nKL+x#`Zkxs~+zrjxywW*Bih8M7 ziba)Itnn6OsW@M)R?S!&ngxC~=WfZ%&6m_@Cikyiv literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po new file mode 100644 index 0000000..dd102f2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/te/LC_MESSAGES/django.po @@ -0,0 +1,42 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/projects/p/django/language/" +"te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..247f902d821249605aac63567fd0d7291d9fbb1d GIT binary patch literal 1331 zcma)4&rcLF6do0St$Oj`$wN;9!S2qYz&eOg5fUOqvRU+8cFWG->~zz10dHbVz^FG- z(ZocI(L_nm_@kS6)`S0psb~KOmVx(yPUjd% z?mPkdz=yzo;J5bqZ{T6`aj7UtDx$`sge0uSvt(p})#@=1NN0}E@kFbf;!Ku9 zrz_iiZ#iT}irV&0i!EPyD$?AWlwuYarDGL(l}iFCI-#mjg_sG)IUS=1HtLu9>3T3L8L`K7dg#sUV-|3)bA&L zAviVA<6~vUnbNc*S)yX5g$&4Lfq9YPkV(N4$#gknnoWn8(%I`SlvUaC`6@;dXUn2? z4gyKF!K$2=II9Ju6takPwTC@FKcCf3JDTAOj-G4XZWH2mZcc}}?##s4#K`s>@>xGK zEE0_&)6$JPE~@#0&edZ)#vnmgQgJ;rRT`y*ZJw(&!zCR_%ECQhKnl~5-s%w=VP-OJ zNEXvkA!{liNj=@Fq5L3exkLV7#7`YnD7~ zo?G)SjjdaQBT(^ewDX%wY3NxRdTh-bYhGCM*_!qA7q!hrYo55zm0Pin4n0(96}@H6 zC)>P}Y9QKj9;D7IwDk8+ZOvwp=4~h9dPXVG;6n#lC;{wDb-zu{O7OU h`5<;Suyi^owzyMa>#l=`XwPJ)Y2YF6ZaUO^-XG)@ClCMt literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po new file mode 100644 index 0000000..78ba247 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2018-05-06 08:37+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "เปลี่ยนทิศทาง" + +msgid "site" +msgstr "ไซต์" + +msgid "redirect from" +msgstr "เปลี่ยนทิศทางจาก" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "พาธไม่รวมโดเมน ตัวอย่าง : '/events/search/'" + +msgid "redirect to" +msgstr "เปลี่ยนทิศทางไปที่" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "มันอาจจะเป็นพาธหรือ URL แบบเต็มที่ขึ้นต้นด้วย 'http://'." + +msgid "redirect" +msgstr "เปลี่ยนทิศทาง" + +msgid "redirects" +msgstr "เปลี่ยนทิศทาง" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..320e73c0e28a4db75a183a6944d7ad10f5dbf519 GIT binary patch literal 1124 zcmZuwO;1xn6n!dwRgH~C$L=X}Z2&5?(S7!R&v>iI{O*1o(w)_uG zT#>kT0UKBDsBZiZM%Vrc&$NXqanjQ>cjnwPGq<-t9!$LpFm3}+fEc(3d;* zKLtMqFM_>(2aHef7GJO!dS3_ov;DXV+#JqEy74rCZE(W}RS`=gB4>kIOInI}N_9a( zx|T46fY+^7nG@9Eu0=E4VnrW{JZWrGBU6g@s#|0oH%_Ka>LQb-Th4XDVsW}KaaAAJ7gpu3g*0Gx5 zsa4!*6Vj^Asyb?8BW-59DOgSLB&1qq+R~!j<2rV`-GcLJvLSkfNGHY7#m`BN(~Hg& z^SSNK?e)nM%Y{;IO{Wg^W3_$UN^a&U}eFRhOXF>K5~j8IIG literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000..e30d562 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,53 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2015 +# BouRock, 2014 +# Cihad GÜNDOĞDU , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: BouRock\n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Redirects" +msgstr "Yönlendirmeler" + +msgid "site" +msgstr "site" + +msgid "redirect from" +msgstr "yönlendirilen adres" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Bu, bir tam yol olmalıdır, etki alanı adı kullanılmadan yazılmalı. Örnek: '/" +"events/search/'." + +msgid "redirect to" +msgstr "yönlendirildiği adres" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Bu, ya bir tam yol (yukarıdaki gibi) ya da 'http://' ile başlayan bir tam " +"URL olabilir." + +msgid "redirect" +msgstr "yönlendirme" + +msgid "redirects" +msgstr "yönlendirmeler" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a1635b6fc95880bc41f61aff087e56af6c45307f GIT binary patch literal 1178 zcmZ`%T~8B16kQd+s>Xz8A8w2Z5SVsLP;e1rL`X0Y30d^XhoPOeOSU`B?v#%g14RQ7 zKVqT}B>n+?0U{)5#osUk@BS9gwAdyFCpkTH@7#Ol%Em`PUx5ED__K{f1h1I-m#g&woWgbKn z@v=zM*b*;SLg7(YMl6U(C7DFueJZjlQo;?+D z63ED-{5+3}GBqPAGFEIVDF%7=uv$!*FFi_4Kk?aUEVx1~d&Ct?^t;*HEbB7&E@cP3 zf&N~%-*r*QX2e2ZHQRNAC}LUE-SGz8UKcAh$rHu=m`6#-m5e=l%%cbcpAN#5o%=CA7?}DI(t_^#B40eN&A0! zG&C2emPu%+)O1*ldC10PTuwZSDvdB1$qrLl6j+tK>2sFAIs?9gs^%!aN*?hsx0B~vqNx^6Zb zpC&G81ZKsa;!GdteY25n`p|nY@Do=+=m2i^n}I%TXhUezY@F)!f3l=MA8(mev^VUX z`tjnaR=;j)N864SBHLhI!NE)9_nLRNieMMskGH&2YLT{+JCSQwwsS|@)`?kh{s2Wu B#`gdK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po new file mode 100644 index 0000000..d06da14 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/tt/LC_MESSAGES/django.po @@ -0,0 +1,48 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "бу сәхифәдән юнәлтергә:" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Бу домен исеменнән тыш абсолүт юл булырга тиеш. Мәсәлән: '/events/search/'." + +msgid "redirect to" +msgstr "бу сәхифәгә юнәлтергә:" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Бу я абсолүт юл (өстәге кебек), я 'http://' белән башланган тулы URL булырга " +"тиеш." + +msgid "redirect" +msgstr "юнәлтү" + +msgid "redirects" +msgstr "юнәлтүләр" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "redirect from" +msgstr "" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca77d244d8eed054e7a7909390c8b866e3066973 GIT binary patch literal 1414 zcmah|OK)366ds_wjM%VZfzYWCO{`|@d)-tGH*tBCRH|r16gg#AX>3pI+g#tVX6ELB zibPYPQVEd_AhDqm3sx+WsG(__v^zFzX8r(z1uK35JHD~=00d#A7~9`*{X4SNyxJuIAGVBzgo*gWia*axt;pJ41c;Mc&w{}%WHa03|lyTB8`AA!HY zeuBMWn|Jw*V=wkt&UWNs-~-otQ~~^sW?V*rIi)!kcyJjRy~pCl#8CM(DaJv z^)s2!NL4P$+?uM9Lbtj>SMT?I=+J^zy`#vgL*FoyTFGX$x`sjdr8d7JwMkW;Q2Uz5 zJE}A%`$}6rV>)S@zf*J!Z>WSyv+p$QWYsrq%WBv=j=0Ec{{5rXNfBjm9?F|J2 z6Jz|n$^YyQ<i_kgT)NUnBwlgeqU(!*gYQm VjH%f10)vMBhr=-JhP&_A*q<93E)M_z literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000..8851897 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,54 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Jannis Leidel , 2011 +# Mykola Zamkovoi , 2014 +# Vitaliy Kozlovskyi , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Vitaliy Kozlovskyi \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Redirects" +msgstr "Перенаправлення" + +msgid "site" +msgstr "сайт" + +msgid "redirect from" +msgstr "перенаправлення з" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Це повинен бути абсолютний шлях, виключаючи ім'я домену. Приклад: '/events/" +"search/'." + +msgid "redirect to" +msgstr "перенаправлення до" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Це може бути або абсолютний шлях (як вказано вище), або повний URL, що " +"починається з 'http://'." + +msgid "redirect" +msgstr "перенаправлення" + +msgid "redirects" +msgstr "перенаправлення" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b302db69ce3771d87e6f104ebb00037433ba7cb GIT binary patch literal 1138 zcmaJo9_=`|ik9TcI`;w! zcwOXabb;3!zHq3oAm&7%!$K&yD%Vn7C0tL5vhEsGQL^6iwCviUHKpV;Jr*kT zWZ;ndj0aVjnHCMHG@A^op3Ck<)sU5>Lz$^ZC3as4u93?gaE(I@*u@*HXfyj36$hQ` z1O4`ZZ6lFQi#adV?Bxw2i4~D|)46W<+gOSU=jZb}mGdfMAzzmDLT8}gDfytG$EC^j0DW%|1u z8k+TV_lyojDl_Friu-I#s(R>9(Aaask%3|Am?PPMu8dGIH=MDOX7ZZiC9@qb#&0Oz zH7&Ez-lg_#yi8`Ry>2#43tqB9S@Sh%nk`tS6)z)mb1$AFL|c$(ug6RABD}P+6@S3K zX~A2hES_eL%xARO={?G1^?%Ldw`pH|+Ph{gSusu2n;&R}uFGh@1m(AsX2na?UQbq% y)pU$6@ggGc4?b1PY$i>VV!pN1#A$b|&NTnpI2gk)<{O!9vl+ksQ>-Ipwya+@z^0P` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 0000000..bf3a9b2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,46 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "سے ری ڈائریکٹ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "یہ مطلق پاتھ ھونا چاھئے، بغیر ڈومین نام کے۔ مثلاً '/events/search/'" + +msgid "redirect to" +msgstr "ری ڈائریکٹ از طرف" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"یہ مطلق پاتھ ھو سکتا ھے (جیسے اوپر ھے) یا مکمل یو آر ایل (URL) بمع 'http://'۔" + +msgid "redirect" +msgstr "ری ڈائریکٹ" + +msgid "redirects" +msgstr "ری ڈائیکٹس" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489dc1f731115f76328ca2df8b6051fa4897fc9e GIT binary patch literal 592 zcmYL`!EO^V5QYtu1B;LlXAW}&Ro?XmP=nJTL}{f60#UT(#Kp}z8#lZ5V$U{hcmgim zIP+#a3*&SlBYhgr%s;lr{`2JE7b80$o)X8zec~$-ttB21--t)VcOq(k5Wnv*_LKZW zBE8GlWAc)GtbZU+<(Ut ztz0tKt@FsIp)w_Z*HwWRPC_#KT<{aG6_S>}SEwZnME;8Bf{WLXAIX=4LopD7gnX{A zOx$y?J0cMuya18Qe0V6xl8-7NFTAp$R_MHhPo3||(pZ=@#=7;Yv+fFxZJ$j|%x%|w=@28b>EzI+w6HV zolH;nuaT!BIdK-XrCZ*#G%o6E%-UKRJA%bZ`Ji!pUYzmaUKh_=YR^yY!qFs^gyDt3 y|Cf}|ZIfBuc~$c>=bIqGw!1Kl^AX%G$6}Q9pSQ+Z`TqOX2uo^F!LXoiko^VYVW>R- literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 0000000..91e1e0a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,45 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Nuruddin Iminokhunov , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 01:18+0000\n" +"Last-Translator: Nuruddin Iminokhunov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "Redirektlar" + +msgid "site" +msgstr "sayt" + +msgid "redirect from" +msgstr "redirekt formasi" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +msgid "redirect to" +msgstr "" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +msgid "redirect" +msgstr "" + +msgid "redirects" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ae80abd0dbd74f37d9dad0d036982773a4956270 GIT binary patch literal 1106 zcma)4&1=*^6pvcJRz&JSFCHFV+S1N$c5P`*trTkug%(Rm*Yj+4Hkme=37N@$Tm1uUe*E71<$cX$eqA1TWuTo!TtnE13y5ck z%)TSm5I+$25tmLF#yMmc`66X#Z)>fB5X&PxRTxeh=40&3IR-rJIKj^AF8T-|&@xL9%fHfUIu4bh;5~?zw zT!5ef%foz=2BFU^7%H$j6IvA%qmkofeIr)o5p#6Ufm$Skexzm3SH?;t*D;qYR!Nyf zic4WZb)5=V=2lrKBTbf-%d6y0>?&eQ3vw&>Y%&)ysxg<`r5cwgnZ*fGG>Lf=ij&rO zY1Ay4CMJ?qR_9sIe%>S|k`oMe;lsOaG#YuG_2V_x#Im4paH7BDA9g6zd0`~C zytq8yKYKB6=H{f(c&Ef}g?Kp4nz|7Bc=yxbcr;Q>&#c)CWU8N+&8o48%nL_m|I31@ z3fH|&EvWO{iXTVRCkrwPlm#N}hH9ob4F~RwIh`~1Uv%EK!0CL!Kb|I=;CJ4@{?^aW zY4RFhK{ajf3D9vXO&)2~(`1W-C)4&fryD(`xL}$*&Vu%CtE=roC2fD|X18}^sHe#e z??1xBfuWbS-|_#LHU=AB=PRyKp%UCQ*$zN=J_rbSnmiPFD0e>MmdX2L-{qW_ZN4eM W%MP?7T;qrWI!*SDmv{J4-S`8JBy>&y literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000..40e3ddb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,49 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "" + +msgid "site" +msgstr "" + +msgid "redirect from" +msgstr "Chuyển hướng từ" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Đây phải là đường dẫn tuyệt đối, không bao gồm tên miền. Ví dụ: '/events/" +"search/'." + +msgid "redirect to" +msgstr "Chuyển hướng tới" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Đây có thể là đường dẫn tuyệt đối hoặc địa chỉ đầy đủ bắt đầu với 'http://'" + +msgid "redirect" +msgstr "Chuyển hướng" + +msgid "redirects" +msgstr "Chuyển hướng" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7dafbd9ee8c1b3fa685e623b53e2504bc143c468 GIT binary patch literal 1093 zcmZWn&rcIU6kZj7RZWaX<6&-v;Iv!BfQt~NLP7*3wdm0d?X?7VxE>j~!8zn~=AG z??@f6)Sm_MY2fp9_5#a%C-5=gK47q@=8gi(-f|rV9Ir;Te)UiR+iIN>qEW-45y6$P zZg3PK78<9B8bYTIf(;qx%uEW3Y$9~jN;qWLByB?sKBHLDG|^aS7;!-yVOVjLf=cAo zg|Ich-|MTna-Aj3s5Ji9@gkz>h?$JaQfP^yEI|wlStLPyXdq1zwn;VQ_0vge3GU~V zI1yd?I`wlm0u*ytqPY{S5p#tbf-0j9n}Cbrp(wsf9d0m7L(vIh#hE8WZRQ9(!sA91 z_b1~Vhna>vqqoC2=ujd+i*FDCC+ScFmvKPF>J=2|(mFfZ)ecn!Ar8?=LwYuK-B=Ca zKqpeWv`c|@6_#h1aDl@PvA9VDb2QXXxnR~5x|%i~zzCQXpEj<=VFacx!V-N@V8xRp zPH~u$goc8;VNp&|s|-jRYOT*Xl}h=9v^8QhEi3)Ci~S+9ZsVWU?+0)B+dLyfBLmGT z1bnI|$SeUP#^EU&t|@3*_-zw@MGuPT#Nkx*j)eztcT*?Z#i)Y^tO%38Pea|~hG?8v zL)BiMQ8Vcf6Av;c!8K&r)h+K0^q^YUtM+)5pYu!ZR@Pm9s<=;b#l6?17rA17rkLL- z@4a+$yOo`syFYhOSa6p!#r)%g!lTl{bC5NjS>@x7`*yLMopZM`rIioxAb-rvDy8@9 z?)sej=~*S$bS&nV+|0w$;-, 2018 +# Jannis Leidel , 2011 +# mozillazg , 2016 +# Ronald White , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2018-01-14 07:31+0000\n" +"Last-Translator: Bestony \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "重定向" + +msgid "site" +msgstr "站点" + +msgid "redirect from" +msgstr "重定向自" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "此处应该是一个不包括域名的绝对路径,例如:'/events/search/'。" + +msgid "redirect to" +msgstr "重定向到" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "可以是一个绝对路径(同上)或以'http://'起始的完整URL。" + +msgid "redirect" +msgstr "重定向" + +msgid "redirects" +msgstr "重定向" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/redirects/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7dadb1ea2d8b1f32eca26e68400cc66889d31e5a GIT binary patch literal 1096 zcmZWn&rcIU6kZj7RlVp{ley7~)7=sjT*Qb72?-6PS>$MjcG_Ls?re5uY2`$S2DG4Z zfCv|iQ4XM4-puTLJK40Lz&Hvx4M+h_ z09FBVd_zUm~;A<^^^MIlZLf!|C z1AhjV`coi24t%D@XMttD9rzG%H!xUKatDEBZ#nh@4p*XTzgnn(ZKY00(3IuTq~MBS zS{x;bgGMQ$mN2P@U_wSYvwcC4ON5ESghPgn(+Fa)jMBbsqv6B=;(~a>axy3fm8jVi z!qru^Ia+n)CiCr-H2&A|9HRN8?WbfZv_vVEC6YK%A;7D`Z;c>>3I#!BI< zeuiU%=_oWbXy6`?5&>F#jR@FDs}?(tV;a^jqFB4$*4m=AY8nV}f{t6#v!QDT5srcG zg5IXJXfQ$pgbQqV#Njp(%+rxE;bT{xy~p(7d&!42pO1N0GH?xcG|94;p~%VjBtx-5 zNmd7?@=TpVadl6KcS%kG, 2015 +# Jannis Leidel , 2011 +# Tzu-ping Chung , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-09 17:42+0200\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Redirects" +msgstr "重導向" + +msgid "site" +msgstr "網站" + +msgid "redirect from" +msgstr "重導向自" + +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "應該是一個絕對路徑,不包括網域。例如:'/events/search/'。" + +msgid "redirect to" +msgstr "重導向到" + +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "此可為一絕對路徑 (如上) 或一個以 'http://' 開頭的完整 URL。" + +msgid "redirect" +msgstr "重導向" + +msgid "redirects" +msgstr "重導向" diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/middleware.py b/env/lib/python3.5/site-packages/django/contrib/redirects/middleware.py new file mode 100644 index 0000000..26a49f3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/middleware.py @@ -0,0 +1,50 @@ +from django.apps import apps +from django.conf import settings +from django.contrib.redirects.models import Redirect +from django.contrib.sites.shortcuts import get_current_site +from django.core.exceptions import ImproperlyConfigured +from django.http import HttpResponseGone, HttpResponsePermanentRedirect +from django.utils.deprecation import MiddlewareMixin + + +class RedirectFallbackMiddleware(MiddlewareMixin): + # Defined as class-level attributes to be subclassing-friendly. + response_gone_class = HttpResponseGone + response_redirect_class = HttpResponsePermanentRedirect + + def __init__(self, get_response=None): + if not apps.is_installed('django.contrib.sites'): + raise ImproperlyConfigured( + "You cannot use RedirectFallbackMiddleware when " + "django.contrib.sites is not installed." + ) + super().__init__(get_response) + + def process_response(self, request, response): + # No need to check for a redirect for non-404 responses. + if response.status_code != 404: + return response + + full_path = request.get_full_path() + current_site = get_current_site(request) + + r = None + try: + r = Redirect.objects.get(site=current_site, old_path=full_path) + except Redirect.DoesNotExist: + pass + if r is None and settings.APPEND_SLASH and not request.path.endswith('/'): + try: + r = Redirect.objects.get( + site=current_site, + old_path=request.get_full_path(force_append_slash=True), + ) + except Redirect.DoesNotExist: + pass + if r is not None: + if r.new_path == '': + return self.response_gone_class() + return self.response_redirect_class(r.new_path) + + # No redirect was found. Return the response. + return response diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/0001_initial.py b/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/0001_initial.py new file mode 100644 index 0000000..5acf8c9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/0001_initial.py @@ -0,0 +1,40 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sites', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Redirect', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('site', models.ForeignKey( + to='sites.Site', + to_field='id', + on_delete=models.CASCADE, + verbose_name='site', + )), + ('old_path', models.CharField( + help_text=( + "This should be an absolute path, excluding the domain name. Example: '/events/search/'." + ), max_length=200, verbose_name='redirect from', db_index=True + )), + ('new_path', models.CharField( + help_text="This can be either an absolute path (as above) or a full URL starting with 'http://'.", + max_length=200, verbose_name='redirect to', blank=True + )), + ], + options={ + 'ordering': ('old_path',), + 'unique_together': {('site', 'old_path')}, + 'db_table': 'django_redirect', + 'verbose_name': 'redirect', + 'verbose_name_plural': 'redirects', + }, + bases=(models.Model,), + ), + ] diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__init__.py b/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/redirects/migrations/__pycache__/0001_initial.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d4b97384bd70f3bb0cfdeae257673d4067a6e03 GIT binary patch literal 1349 zcmZWpOK%%D5T0EX&Sdl`q(}drH$pLry4~O!-(A_0>IL~i}LvHu`-3ODs-~Vm_`~z!Glj(;%>~}mN ze-UH=^9V!)^B6=7(N7oyHsB8yHh>~HZNRGrhz4L2j)$$+YzV`+?#}hpD5s0u*6n$L zl-Y?Ft)A;lJmg{95deV?!0|W$-i0a0W8Y0UZTTSV7@24Twc&IFkiQOK0@wxI1ndF! z{rn1=Cv1K#sIkHp;5&fVy&=9Em~6tf*H)T00+XG*2Y3^38}R+0@B!ehHHWv?)b6aQ zeF*r`mD-d+ehl~t;1DncyazMR=u^PYg3r$ZzX1FaG$-;^aJUI4kw@Z_v!co{9aF0ERE=$sRgO}x`%Ow0ldM9WPg6Ie6pOji zdFpZQq>nGuyv%4X9gOIla%V@Dl$p#%gB@-nbs;m#r*8K8FK(7a-@M5@Ju$^xba2e2 zLAt0rIlTi@NnE#lqRE<=y@<_&&>BztNi_}6N%py84t;-#?qOj_PxD{s zQfwUTA0O;LdMuKInKDaxE11>YqNF!x{!cKs*h!fFJsP=rIVyE|e_ZJd@8_rTdwg)_ zM$3wfL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m!Ez~Zh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rYWD=ErM(l1I)$t+4uE-BW}%}g&!EXmBzE7p&X d&& %s" % (self.old_path, self.new_path) diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__init__.py b/env/lib/python3.5/site-packages/django/contrib/sessions/__init__.py new file mode 100644 index 0000000..0382f95 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/__init__.py @@ -0,0 +1 @@ +default_app_config = 'django.contrib.sessions.apps.SessionsConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67ae4150164035085ea60cce112c5ffc63ff2313 GIT binary patch literal 217 zcmWgR<>fL;wu*6PU|@I*#Bjg}WH|tFF&B_XVPJ>?l8g+&noL#NDOrhm>G^ue`FSNp znMr!Zsl~;a`FX{9i3J74dcjbhbADc0X1bpyW0X)zYFc7xPDwmaJ|3tED7=!P2xLB( z_~oQul3So(kXfLcRGOKSqMMf$Z<%70U7`=M2S!1y(}!87A0MBYmst`YuUAlci^C>2 QKczG$)edBAF%UBV0C=80ssI20 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/apps.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/apps.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9d5c837fbf0a1006b80bb63859a5f1275e948cc GIT binary patch literal 511 zcmYLFy-ve05I#3<)t?k~0%o=jO{8vAs48M$W9eogS!r#m6z2!qL9}am8D4|O$jZbk zFmcWgSh@3e-<|Ki%lUXboNpJ8p8)WM_ID_v6`EO~6ZjEO00{v`fVj8=sso7!i~_kA z9taBWNK=pmPDpn_bYVU1edBwWl5%jH=XY896z?$bchXwwUC&bv_!~V29TT5f&EH!oa2~3k_{kHI7+AI5< zr%@s~FNd5bnJARQKIbn*q?!zMcS$(&U!~q;MpjQgKo3z{<$ji-P4Y00^Vz0|m6)Y_ zel6zDHmpUoSED6twS-Zgn;<`Eik-S{T?c&9BNc-J*{E5=RciNF*k!{MHdZFEI!cX- gEN-qnOzVMjuFb!^8jX-E`#1HHOM+1~Z9*pAFHhlpbN~PV literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/base_session.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/base_session.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7506c9afd13c6c6209c1915eada57d093f37876f GIT binary patch literal 2319 zcmZ`*OK;pZ5GJL4YUTLVG)Yr5%B84Kc#Y=PqG;_p4+Mx8LG4S00D@Lz*V<^MEh#&; zU|;I~m!f~CM_qf$U+AgdP+Di3Yy@+5IHZO%A7?)K)3r6{QT*MjzuS!c!F^gRsy z3PLazKyoH5mU1?;SYR9!af}JoDt4 z%$zqTGV{bV$|m_R&a*-#~UfJ~$=U{XnxCZ!Z!lnGB}F%pHYy~qQUz;t-y&$p|#!J)bX5W>b=sEb_5Fis<_ zt4{3zJ6l?&zgF&I6CGJ?FJ?=x{KeD&dHwrzx0ua$=gE9$e43U~Dk+eF z8PcX&ylT-@eZwwW1U%s9nPVnc#sp?u!^m$b@@nD%7}1%mIw&DoNWZOmSg8gJG+xUK z)i)M-K2Lz9hzeP8ZGfqTORm-+HZe5i$M_e#!`Cc_mv>eqNC%GmcGU~RESkwMteh~c zy9T-&hQFOgX}w}XG|ra}q&rdORKkU#Gl06>?JBaw7&lJ`+8&1f6JojYrOl=-Cfn2k z01%WQO#P$juelX;7;QkGV*?1l>mNEhg8QfaMlV;WyY|0+tQ4y2->Qu4t>;UcnaS;#NG|O6AO=^Dvd!q&Rs? zT^$VODw&~gLaZK_i|Y1pVNp4#Z;vK2=!tQdWI~?*4=8HoJq$gBSOyCCfE*+^!BiS3 zl5`Xl>>xxcsdjmHMZCj9SwzQGx2dJ7w`h!!-&I>UMQxM#1S04~4Lepm4BRuR#yNV2 ziXhlto`v)DR7L5kYN%Rt-a~lPbm=Zi(BA6jjX^5Xeyp30fb3Mrl_l`BxW z9j71k7-i*S)B#xK*Q)~f2>aaxM8VTA5WHh;RPGg6#Beu}iXm>?u!+)EbTn}UG4K*` zqO^Rg28?ohAGHAmQ@!qet_#$Efn-WF~9d25lr>2)g-rD&s<%qEMg1R1M6xVJ3@{T$n5s70^;5@5tsh z7U)n-4qg6`-{$wNzO~(U?X8xg)sgQ|rHDKZ!=T@M(Z#q9{cbZqEs|6Z@t;7Z(}+HG q%EqfEovPb>W9x9+hxB1Lo>v7_^}er3^9M>!6K{9;2H&vnZT<&Sw;3D& literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/exceptions.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/exceptions.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..717097a353e96d4d81e2e8ce0be2895d1c70b9bc GIT binary patch literal 643 zcmbVJyH3L}6uoZxqM{NAsdE@Rw2``j5Mn^85E2Y!s*o(#wx~;9*a^_C@H6~URwjOd ziF=bi7?`kCfOi`_dYF=@86+es6sEKwC6|VJib-bp0ITu#QOk3xh*mu<*{-a*r^y@{N^H@Zh z^P4xdjdZfz3vt^SDyV#v}m7I OiJ#LYm&ylTukiy-*pSx% literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/middleware.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/middleware.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4badb982676242e2efff8094710648e727135d82 GIT binary patch literal 2708 zcmZuz&2QsG6n_&Zj`P*@W7}Pd1O^E$(JraP1%VK3RRUD7DQvo57Lw)K)5fj8c4o5M zROx|*GeR7=B5~vY;IHr%ap2C06Yq_k1iI_g)0uhW_ulX4_u;Khr}?h`!8gBl0RDjg zTveRk!CU@}Lx6t_A^@kDS0G{#SHP(NBbfn_0dW%?!SJ*F;UI69 zE{s$vc+beIl1Im)Nk>hdoP-Jg4Ftvu{PW3SR! zN$3CkG*Kcv+K~k`xf3r)?Pt^6a@{ZqmFtpDY2pB^!Mf~X`vorg^P?~4w5MleK5MhcNT+`T&xEmWS@OAI|jwDnr> zClfAJ-YNy|8J}u$ieZHgbu*Frh#kq-hu3jaR&fBf$u8b_5#^QhKD{Qo8hF2fw+?`x z7{K(_67QukpI6`#!4^DVNB~^c;9;^3RaJ$vCWw!LG4?n)V2@M{PECEZ4reBaOPJO4 zhyi3lA;tKm31(qMPnt+#g(YijW`Ot+REu~GFfp+h%&H)N(WlxVeqgAqP5%m4I^>G@ zoigAO10TmaBntp5+EEi!7f!o0pP6v|5}jCunWf{puH$-*(&r3K|G=hebCm1!0DG9c zh8Q@C8*}71 zJed^b$PT5gQd@dYISCi~=1TZeE~d5$V}5&a$o9vWb6nb964+S%Y!63WN>F!t7IHEc z@QACWJ~DjeQ0dNmcZ}{Hah}*b&J?=bU-*(&v0#pKGe~1EOmcHi8ySXwV_051KSa$X z^qX>FgTNOq1gP~G%ZtWd9z;LmjQk7wHa$PVDrLvs)E*NLQF?O113R54J4_H966Q~Y z;E9?Wx^1IIo1c56rJvVh@7(oHcwXn{S%`HnHzmhMcy3VzPm^fsSkjBR3>CJFixNR^ zTWny8<(B7D&hj9)=I_g~Lg^9_(|l!DQAwMWZAF(2L3u4!ad0{XO1EI%xmr)Y+CBW- z*}PI@J~_C%yFV0E|D5f)Y_$7e;0_)P?mc$z4ZglV7#%vVQW-BGxt?;5MEVSga{VZk z+*w%&ry6^ef<#yZs3n!BCK7!LIM#IJR8S2PH4-*4VoGntCV6nxyU}3p{=I>7eePIU z89zTf{OVx%<>MCwBP^Mt{lh`8p$nzBMpmpv_j!#hzfOBKO{mzWjaPAS+U4tVwd>Rq z{!>a#Pg-e4y7kOu1*Ca$-zo8Y?AWvi@hbeX}{aMxff zRTKBuQA+)$%bJyoH%CR%Ecz;7Ei1vuaoxP>mLDBBZ@cc3i5C?T(IwBxJ#mwU zB@jKM#vrJkQybAuug$u(c2)27Rt1&$yit7CMB$Nc*G{YGt9>dKMelxVxkK?dFEg@# zTSSk9iS_H~uFGcqX{7znMgx ml&<|xOo^qVO~ZH@=G^+Q_(=N*>jX&3mNr|htm2y~f5yKpfU-FN literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/models.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72fd19323c3120d23ff2e70f6ef007a91a71031a GIT binary patch literal 1854 zcma)7U60#D6dmV#)7@2D(DH;BEj$pZaiqS15L#%}s)**HS%efJS!2&lG8=ow%#2f| zf~V!r@R$6`Q~v@_+&gyI-O@@}@!0cq?m6drZq80l#*eeFe|g(u>@Rlf!alpe+dacZ z;xA%3V@1T45i2@u*)Ojm1|GjXq0Oyp^^}}18mqLp**o@X6t_WW)@OEd|03#yE3yB~#jEiIzlWu+5 z!nFvO^GUBBC5aXVBuPC^lETO;r}yI|`Lz;xGqZe9IY^XF3bnSvBOmuCvm=ZYn!hh* zz9?sCxfw=-+{NYIlA!~l-@)cM3jI6! zXu$<7_yL>$>VqD;M!D$efV4KoU!(NlJC={w)lqQ$sCB&_ww{PVm$5O&>uF%kOKWyY zg5#?y&$+A0(pb+|#&V&J-WR5F{2(Rfmm4_r0?5jusjrRQ@*KS5dsA`ejRo8+xdk)= zcG$70!d%-um%zCm&SuJ<9X-GSu}*%Ev}5ba0g zc(X!FrPpon4AhQ#X2mmOwh9pWN%MjO+6#5y(dy$bp7QCGYvTi2;HtcXd=-yFG*aK% zcCdusIG`K{?UjXm-v*qb9*{wgG~faTp|1p5or-MBz2Rl$J<+@&;W#q;>D7Q10auN`rFf5_9Ir|yXAafFj$&9KAU341heuB6A7#pl6c)Xfg_j|;m-y*6jb4wd0 zQGMKsSkRX~=`25Q3P9YR{J8ba#gt;u(#0~h_h@gY?q<0Q?>B|T9^q8|$r^mp?o7fN zO0rxy_bE;~stc@hKYH_78#?~L>O0lse^tvj2Q~3a@M3w|XgM&!(rNn`+fv!GLu{5K znI@hbzNH`($snUgDCfBDP~%SVeLfk#gHjKZ1XG(Np$0C8CcT2pyZTYx15ViLsDIuvMBK5r2J#-`WR)kPRRka|LRBSJ-kSu3yBB%R>y(>h-t(^EL z{3TyG@fSET<4vGNFj|k_j_vnm#=A$8$>=11`tB6qrjXG`&6`H*i0itm zMAW#=QCmkV8FfaANL7(h>q=GYM090iB3=ncu#Xls7bbC`98*QZ8GCdN!_2_7gls7J zOdasB6KPBrv2O>xq75CnonF1Xyt+tl*!7#`&GLNtI`(W}Wbxkm^=k8t=tn^I^J3nX z&Ad^~@v2jWIIcGARGi$lbFtyoy53KDUA0=R=0+N$>dFAvH`pZ2CmjOUW6aQ{O}9sX zx2muBK~=cbRW$+dyQ(|9O{mAy0fcSndIE1ldfL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m$!aNZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rYWD=ErM(l1UeF3!x)E7ng+OwLZtODWcmkI&4@ aEQycTE2zB1VUwGmQks)$2ePCXh#3F@DkuH` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbf333f3c99ea93614022b47b1fbbe34344756b6 GIT binary patch literal 13052 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 F`#+x3M+X1^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/cached_db.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/cached_db.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d85e52c1e249be15ae3a0c4658e31a844ee2c3a GIT binary patch literal 2476 zcmaJ@-)|d55T3m|pMNGzQqr_lA6yj)ozmJ;5eO=TC?SQ2Dxg||_Jp*$+-_1k_Sx*7 ztHx@dipnET2=OQIFCC9O@h|YiH+!~Iw^dKx_3W>?`R1FMy-RCrjoay+pZ=~A{X?%j z0pu^x><{P^QH)-Y@@Ob%3Q1Mz7o4w> zuFwmg;(%0*dQp9Lqp_EykF~nlR!N>5C05@$O43uU+E!cJA7{4H_!kCHB#N5VdEU=X zEaXKre^}6?!HZl7J_AkvNP(6JWRDv+>2=ey?}%-J#sOyZ6n$ zynFxPZm$TXv!$rm=|r2NCS^bC=Tb&q5m-GuE}C;1GXVPdV6f6;&UyZLC+ zo%AQSj;8&gx|I#&r|R};-YuD2{LKmNE(q;9w3)KqC9|E$nL!lO7Mf*~No9<%ja(2v<=3UZ%L z8)QBtA(%i+Kgt9>1f>|A*2w(s&N!-{d-TjB^P8Ii?H&!nxvtU+gX;VRIL>f78#UKu2H%tgX9c#{hljuo?mZWpbL5;42DVqvM_-inbN@f<7mV|2)E zHUw;yxy(j_Hy8#Xa6Jfz48pM$Od>p-xz*Chz$Q<0X*B0k$zg2~{3TvNJFk|s z%A5(MhdS4WDJZcrRqrN-L+Lh}WtzCcw8RAwi2Cakm8zFnyi#XAz)7~yktA3uEq0mA z*D9t^kRc$aW~nRuT+AQn(fEmO=Z|$eof^Zpz&u&p_1WfBa;uBWw4G$CZS;xGv_Y=$ z+EN)xS!X#ojDn()4s~J-19TpVTMN3&y8YIgRyiI{?c+N*V>!5~(%_=IwGypvOSH}x zLzaxRltn|z(O6A~EVrcmd72F8D^)4gIOQ$h?mv>>KiI!_@UToEF6~8aV#c^*@-r8Z zhEv+5is3LTO~1y{vhpqh(j^s#6$_R_y5)x=^tOYoptZT>ZwK2och4S1b<@Uj+&ur3 zI4&>08|O2t9~X6WRa( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/db.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/db.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca6c8e5f3010c0c75781af34ada88abee26ceb9e GIT binary patch literal 4216 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 O8+V*7aZhZCE$4ryOu`WW literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/file.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/__pycache__/file.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..110cb0ab3858a8f0fcd4b7d47962d97c69a7cefa GIT binary patch literal 5824 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 8 + + def _get_session_key(self): + return self.__session_key + + def _set_session_key(self, value): + """ + Validate session key on assignment. Invalid values will set to None. + """ + if self._validate_session_key(value): + self.__session_key = value + else: + self.__session_key = None + + session_key = property(_get_session_key) + _session_key = property(_get_session_key, _set_session_key) + + def _get_session(self, no_load=False): + """ + Lazily load session from storage (unless "no_load" is True, when only + an empty dict is stored) and store it in the current instance. + """ + self.accessed = True + try: + return self._session_cache + except AttributeError: + if self.session_key is None or no_load: + self._session_cache = {} + else: + self._session_cache = self.load() + return self._session_cache + + _session = property(_get_session) + + def get_expiry_age(self, **kwargs): + """Get the number of seconds until the session expires. + + Optionally, this function accepts `modification` and `expiry` keyword + arguments specifying the modification and expiry of the session. + """ + try: + modification = kwargs['modification'] + except KeyError: + modification = timezone.now() + # Make the difference between "expiry=None passed in kwargs" and + # "expiry not passed in kwargs", in order to guarantee not to trigger + # self.load() when expiry is provided. + try: + expiry = kwargs['expiry'] + except KeyError: + expiry = self.get('_session_expiry') + + if not expiry: # Checks both None and 0 cases + return settings.SESSION_COOKIE_AGE + if not isinstance(expiry, datetime): + return expiry + delta = expiry - modification + return delta.days * 86400 + delta.seconds + + def get_expiry_date(self, **kwargs): + """Get session the expiry date (as a datetime object). + + Optionally, this function accepts `modification` and `expiry` keyword + arguments specifying the modification and expiry of the session. + """ + try: + modification = kwargs['modification'] + except KeyError: + modification = timezone.now() + # Same comment as in get_expiry_age + try: + expiry = kwargs['expiry'] + except KeyError: + expiry = self.get('_session_expiry') + + if isinstance(expiry, datetime): + return expiry + expiry = expiry or settings.SESSION_COOKIE_AGE # Checks both None and 0 cases + return modification + timedelta(seconds=expiry) + + def set_expiry(self, value): + """ + Set a custom expiration for the session. ``value`` can be an integer, + a Python ``datetime`` or ``timedelta`` object or ``None``. + + If ``value`` is an integer, the session will expire after that many + seconds of inactivity. If set to ``0`` then the session will expire on + browser close. + + If ``value`` is a ``datetime`` or ``timedelta`` object, the session + will expire at that specific future time. + + If ``value`` is ``None``, the session uses the global session expiry + policy. + """ + if value is None: + # Remove any custom expiration for this session. + try: + del self['_session_expiry'] + except KeyError: + pass + return + if isinstance(value, timedelta): + value = timezone.now() + value + self['_session_expiry'] = value + + def get_expire_at_browser_close(self): + """ + Return ``True`` if the session is set to expire when the browser + closes, and ``False`` if there's an expiry date. Use + ``get_expiry_date()`` or ``get_expiry_age()`` to find the actual expiry + date/age, if there is one. + """ + if self.get('_session_expiry') is None: + return settings.SESSION_EXPIRE_AT_BROWSER_CLOSE + return self.get('_session_expiry') == 0 + + def flush(self): + """ + Remove the current session data from the database and regenerate the + key. + """ + self.clear() + self.delete() + self._session_key = None + + def cycle_key(self): + """ + Create a new session key, while retaining the current session data. + """ + data = self._session + key = self.session_key + self.create() + self._session_cache = data + if key: + self.delete(key) + + # Methods that child classes must implement. + + def exists(self, session_key): + """ + Return True if the given session_key already exists. + """ + raise NotImplementedError('subclasses of SessionBase must provide an exists() method') + + def create(self): + """ + Create a new session instance. Guaranteed to create a new object with + a unique key and will have saved the result once (with empty data) + before the method returns. + """ + raise NotImplementedError('subclasses of SessionBase must provide a create() method') + + def save(self, must_create=False): + """ + Save the session data. If 'must_create' is True, create a new session + object (or raise CreateError). Otherwise, only update an existing + object and don't create one (raise UpdateError if needed). + """ + raise NotImplementedError('subclasses of SessionBase must provide a save() method') + + def delete(self, session_key=None): + """ + Delete the session data under this key. If the key is None, use the + current session key value. + """ + raise NotImplementedError('subclasses of SessionBase must provide a delete() method') + + def load(self): + """ + Load the session data and return a dictionary. + """ + raise NotImplementedError('subclasses of SessionBase must provide a load() method') + + @classmethod + def clear_expired(cls): + """ + Remove expired sessions from the session store. + + If this operation isn't possible on a given backend, it should raise + NotImplementedError. If it isn't necessary, because the backend has + a built-in expiration mechanism, it should be a no-op. + """ + raise NotImplementedError('This backend does not support clear_expired().') diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/cache.py b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/cache.py new file mode 100644 index 0000000..860d3a4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/cache.py @@ -0,0 +1,81 @@ +from django.conf import settings +from django.contrib.sessions.backends.base import ( + CreateError, SessionBase, UpdateError, +) +from django.core.cache import caches + +KEY_PREFIX = "django.contrib.sessions.cache" + + +class SessionStore(SessionBase): + """ + A cache-based session store. + """ + cache_key_prefix = KEY_PREFIX + + def __init__(self, session_key=None): + self._cache = caches[settings.SESSION_CACHE_ALIAS] + super().__init__(session_key) + + @property + def cache_key(self): + return self.cache_key_prefix + self._get_or_create_session_key() + + def load(self): + try: + session_data = self._cache.get(self.cache_key) + except Exception: + # Some backends (e.g. memcache) raise an exception on invalid + # cache keys. If this happens, reset the session. See #17810. + session_data = None + if session_data is not None: + return session_data + self._session_key = None + return {} + + def create(self): + # Because a cache can fail silently (e.g. memcache), we don't know if + # we are failing to create a new session because of a key collision or + # because the cache is missing. So we try for a (large) number of times + # and then raise an exception. That's the risk you shoulder if using + # cache backing. + for i in range(10000): + self._session_key = self._get_new_session_key() + try: + self.save(must_create=True) + except CreateError: + continue + self.modified = True + return + raise RuntimeError( + "Unable to create a new session key. " + "It is likely that the cache is unavailable.") + + def save(self, must_create=False): + if self.session_key is None: + return self.create() + if must_create: + func = self._cache.add + elif self._cache.get(self.cache_key) is not None: + func = self._cache.set + else: + raise UpdateError + result = func(self.cache_key, + self._get_session(no_load=must_create), + self.get_expiry_age()) + if must_create and not result: + raise CreateError + + def exists(self, session_key): + return bool(session_key) and (self.cache_key_prefix + session_key) in self._cache + + def delete(self, session_key=None): + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + self._cache.delete(self.cache_key_prefix + session_key) + + @classmethod + def clear_expired(cls): + pass diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/cached_db.py b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/cached_db.py new file mode 100644 index 0000000..453d390 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/cached_db.py @@ -0,0 +1,65 @@ +""" +Cached, database-backed sessions. +""" + +from django.conf import settings +from django.contrib.sessions.backends.db import SessionStore as DBStore +from django.core.cache import caches + +KEY_PREFIX = "django.contrib.sessions.cached_db" + + +class SessionStore(DBStore): + """ + Implement cached, database backed sessions. + """ + cache_key_prefix = KEY_PREFIX + + def __init__(self, session_key=None): + self._cache = caches[settings.SESSION_CACHE_ALIAS] + super().__init__(session_key) + + @property + def cache_key(self): + return self.cache_key_prefix + self._get_or_create_session_key() + + def load(self): + try: + data = self._cache.get(self.cache_key) + except Exception: + # Some backends (e.g. memcache) raise an exception on invalid + # cache keys. If this happens, reset the session. See #17810. + data = None + + if data is None: + s = self._get_session_from_db() + if s: + data = self.decode(s.session_data) + self._cache.set(self.cache_key, data, self.get_expiry_age(expiry=s.expire_date)) + else: + data = {} + return data + + def exists(self, session_key): + return session_key and (self.cache_key_prefix + session_key) in self._cache or super().exists(session_key) + + def save(self, must_create=False): + super().save(must_create) + self._cache.set(self.cache_key, self._session, self.get_expiry_age()) + + def delete(self, session_key=None): + super().delete(session_key) + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + self._cache.delete(self.cache_key_prefix + session_key) + + def flush(self): + """ + Remove the current session data from the database and regenerate the + key. + """ + self.clear() + self.delete(self.session_key) + self._session_key = None diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/db.py b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/db.py new file mode 100644 index 0000000..7c905a2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/db.py @@ -0,0 +1,109 @@ +import logging + +from django.contrib.sessions.backends.base import ( + CreateError, SessionBase, UpdateError, +) +from django.core.exceptions import SuspiciousOperation +from django.db import DatabaseError, IntegrityError, router, transaction +from django.utils import timezone +from django.utils.functional import cached_property + + +class SessionStore(SessionBase): + """ + Implement database session store. + """ + def __init__(self, session_key=None): + super().__init__(session_key) + + @classmethod + def get_model_class(cls): + # Avoids a circular import and allows importing SessionStore when + # django.contrib.sessions is not in INSTALLED_APPS. + from django.contrib.sessions.models import Session + return Session + + @cached_property + def model(self): + return self.get_model_class() + + def _get_session_from_db(self): + try: + return self.model.objects.get( + session_key=self.session_key, + expire_date__gt=timezone.now() + ) + except (self.model.DoesNotExist, SuspiciousOperation) as e: + if isinstance(e, SuspiciousOperation): + logger = logging.getLogger('django.security.%s' % e.__class__.__name__) + logger.warning(str(e)) + self._session_key = None + + def load(self): + s = self._get_session_from_db() + return self.decode(s.session_data) if s else {} + + def exists(self, session_key): + return self.model.objects.filter(session_key=session_key).exists() + + def create(self): + while True: + self._session_key = self._get_new_session_key() + try: + # Save immediately to ensure we have a unique entry in the + # database. + self.save(must_create=True) + except CreateError: + # Key wasn't unique. Try again. + continue + self.modified = True + return + + def create_model_instance(self, data): + """ + Return a new instance of the session model object, which represents the + current session state. Intended to be used for saving the session data + to the database. + """ + return self.model( + session_key=self._get_or_create_session_key(), + session_data=self.encode(data), + expire_date=self.get_expiry_date(), + ) + + def save(self, must_create=False): + """ + Save the current session data to the database. If 'must_create' is + True, raise a database error if the saving operation doesn't create a + new entry (as opposed to possibly updating an existing entry). + """ + if self.session_key is None: + return self.create() + data = self._get_session(no_load=must_create) + obj = self.create_model_instance(data) + using = router.db_for_write(self.model, instance=obj) + try: + with transaction.atomic(using=using): + obj.save(force_insert=must_create, force_update=not must_create, using=using) + except IntegrityError: + if must_create: + raise CreateError + raise + except DatabaseError: + if not must_create: + raise UpdateError + raise + + def delete(self, session_key=None): + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + try: + self.model.objects.get(session_key=session_key).delete() + except self.model.DoesNotExist: + pass + + @classmethod + def clear_expired(cls): + cls.get_model_class().objects.filter(expire_date__lt=timezone.now()).delete() diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/file.py b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/file.py new file mode 100644 index 0000000..fe34dea --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/file.py @@ -0,0 +1,202 @@ +import datetime +import logging +import os +import shutil +import tempfile + +from django.conf import settings +from django.contrib.sessions.backends.base import ( + VALID_KEY_CHARS, CreateError, SessionBase, UpdateError, +) +from django.contrib.sessions.exceptions import InvalidSessionKey +from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation +from django.utils import timezone + + +class SessionStore(SessionBase): + """ + Implement a file based session store. + """ + def __init__(self, session_key=None): + self.storage_path = type(self)._get_storage_path() + self.file_prefix = settings.SESSION_COOKIE_NAME + super().__init__(session_key) + + @classmethod + def _get_storage_path(cls): + try: + return cls._storage_path + except AttributeError: + storage_path = getattr(settings, 'SESSION_FILE_PATH', None) or tempfile.gettempdir() + # Make sure the storage path is valid. + if not os.path.isdir(storage_path): + raise ImproperlyConfigured( + "The session storage path %r doesn't exist. Please set your" + " SESSION_FILE_PATH setting to an existing directory in which" + " Django can store session data." % storage_path) + + cls._storage_path = storage_path + return storage_path + + def _key_to_file(self, session_key=None): + """ + Get the file associated with this session key. + """ + if session_key is None: + session_key = self._get_or_create_session_key() + + # Make sure we're not vulnerable to directory traversal. Session keys + # should always be md5s, so they should never contain directory + # components. + if not set(session_key).issubset(VALID_KEY_CHARS): + raise InvalidSessionKey( + "Invalid characters in session key") + + return os.path.join(self.storage_path, self.file_prefix + session_key) + + def _last_modification(self): + """ + Return the modification time of the file storing the session's content. + """ + modification = os.stat(self._key_to_file()).st_mtime + if settings.USE_TZ: + modification = datetime.datetime.utcfromtimestamp(modification) + return modification.replace(tzinfo=timezone.utc) + return datetime.datetime.fromtimestamp(modification) + + def _expiry_date(self, session_data): + """ + Return the expiry time of the file storing the session's content. + """ + return session_data.get('_session_expiry') or ( + self._last_modification() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE) + ) + + def load(self): + session_data = {} + try: + with open(self._key_to_file(), "rb") as session_file: + file_data = session_file.read() + # Don't fail if there is no data in the session file. + # We may have opened the empty placeholder file. + if file_data: + try: + session_data = self.decode(file_data) + except (EOFError, SuspiciousOperation) as e: + if isinstance(e, SuspiciousOperation): + logger = logging.getLogger('django.security.%s' % e.__class__.__name__) + logger.warning(str(e)) + self.create() + + # Remove expired sessions. + expiry_age = self.get_expiry_age(expiry=self._expiry_date(session_data)) + if expiry_age <= 0: + session_data = {} + self.delete() + self.create() + except (IOError, SuspiciousOperation): + self._session_key = None + return session_data + + def create(self): + while True: + self._session_key = self._get_new_session_key() + try: + self.save(must_create=True) + except CreateError: + continue + self.modified = True + return + + def save(self, must_create=False): + if self.session_key is None: + return self.create() + # Get the session data now, before we start messing + # with the file it is stored within. + session_data = self._get_session(no_load=must_create) + + session_file_name = self._key_to_file() + + try: + # Make sure the file exists. If it does not already exist, an + # empty placeholder file is created. + flags = os.O_WRONLY | getattr(os, 'O_BINARY', 0) + if must_create: + flags |= os.O_EXCL | os.O_CREAT + fd = os.open(session_file_name, flags) + os.close(fd) + except FileNotFoundError: + if not must_create: + raise UpdateError + except FileExistsError: + if must_create: + raise CreateError + + # Write the session file without interfering with other threads + # or processes. By writing to an atomically generated temporary + # file and then using the atomic os.rename() to make the complete + # file visible, we avoid having to lock the session file, while + # still maintaining its integrity. + # + # Note: Locking the session file was explored, but rejected in part + # because in order to be atomic and cross-platform, it required a + # long-lived lock file for each session, doubling the number of + # files in the session storage directory at any given time. This + # rename solution is cleaner and avoids any additional overhead + # when reading the session data, which is the more common case + # unless SESSION_SAVE_EVERY_REQUEST = True. + # + # See ticket #8616. + dir, prefix = os.path.split(session_file_name) + + try: + output_file_fd, output_file_name = tempfile.mkstemp(dir=dir, prefix=prefix + '_out_') + renamed = False + try: + try: + os.write(output_file_fd, self.encode(session_data).encode()) + finally: + os.close(output_file_fd) + + # This will atomically rename the file (os.rename) if the OS + # supports it. Otherwise this will result in a shutil.copy2 + # and os.unlink (for example on Windows). See #9084. + shutil.move(output_file_name, session_file_name) + renamed = True + finally: + if not renamed: + os.unlink(output_file_name) + except (OSError, IOError, EOFError): + pass + + def exists(self, session_key): + return os.path.exists(self._key_to_file(session_key)) + + def delete(self, session_key=None): + if session_key is None: + if self.session_key is None: + return + session_key = self.session_key + try: + os.unlink(self._key_to_file(session_key)) + except OSError: + pass + + def clean(self): + pass + + @classmethod + def clear_expired(cls): + storage_path = cls._get_storage_path() + file_prefix = settings.SESSION_COOKIE_NAME + + for session_file in os.listdir(storage_path): + if not session_file.startswith(file_prefix): + continue + session_key = session_file[len(file_prefix):] + session = cls(session_key) + # When an expired session is loaded, its file is removed, and a + # new file is immediately created. Prevent this by disabling + # the create() method. + session.create = lambda: None + session.load() diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/backends/signed_cookies.py b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/signed_cookies.py new file mode 100644 index 0000000..1ee7790 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/backends/signed_cookies.py @@ -0,0 +1,82 @@ +from django.conf import settings +from django.contrib.sessions.backends.base import SessionBase +from django.core import signing + + +class SessionStore(SessionBase): + + def load(self): + """ + Load the data from the key itself instead of fetching from some + external data store. Opposite of _get_session_key(), raise BadSignature + if signature fails. + """ + try: + return signing.loads( + self.session_key, + serializer=self.serializer, + # This doesn't handle non-default expiry dates, see #19201 + max_age=settings.SESSION_COOKIE_AGE, + salt='django.contrib.sessions.backends.signed_cookies', + ) + except Exception: + # BadSignature, ValueError, or unpickling exceptions. If any of + # these happen, reset the session. + self.create() + return {} + + def create(self): + """ + To create a new key, set the modified flag so that the cookie is set + on the client for the current request. + """ + self.modified = True + + def save(self, must_create=False): + """ + To save, get the session key as a securely signed string and then set + the modified flag so that the cookie is set on the client for the + current request. + """ + self._session_key = self._get_session_key() + self.modified = True + + def exists(self, session_key=None): + """ + This method makes sense when you're talking to a shared resource, but + it doesn't matter when you're storing the information in the client's + cookie. + """ + return False + + def delete(self, session_key=None): + """ + To delete, clear the session key and the underlying data structure + and set the modified flag so that the cookie is set on the client for + the current request. + """ + self._session_key = '' + self._session_cache = {} + self.modified = True + + def cycle_key(self): + """ + Keep the same data but with a new key. Call save() and it will + automatically save a cookie with a new key at the end of the request. + """ + self.save() + + def _get_session_key(self): + """ + Instead of generating a random string, generate a secure url-safe + base64-encoded string of data as our session key. + """ + return signing.dumps( + self._session, compress=True, + salt='django.contrib.sessions.backends.signed_cookies', + serializer=self.serializer, + ) + + @classmethod + def clear_expired(cls): + pass diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/base_session.py b/env/lib/python3.5/site-packages/django/contrib/sessions/base_session.py new file mode 100644 index 0000000..1d653b5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/base_session.py @@ -0,0 +1,47 @@ +""" +This module allows importing AbstractBaseSession even +when django.contrib.sessions is not in INSTALLED_APPS. +""" +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class BaseSessionManager(models.Manager): + def encode(self, session_dict): + """ + Return the given session dictionary serialized and encoded as a string. + """ + session_store_class = self.model.get_session_store_class() + return session_store_class().encode(session_dict) + + def save(self, session_key, session_dict, expire_date): + s = self.model(session_key, self.encode(session_dict), expire_date) + if session_dict: + s.save() + else: + s.delete() # Clear sessions with no data. + return s + + +class AbstractBaseSession(models.Model): + session_key = models.CharField(_('session key'), max_length=40, primary_key=True) + session_data = models.TextField(_('session data')) + expire_date = models.DateTimeField(_('expire date'), db_index=True) + + objects = BaseSessionManager() + + class Meta: + abstract = True + verbose_name = _('session') + verbose_name_plural = _('sessions') + + def __str__(self): + return self.session_key + + @classmethod + def get_session_store_class(cls): + raise NotImplementedError + + def get_decoded(self): + session_store_class = self.get_session_store_class() + return session_store_class().decode(self.session_data) diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/exceptions.py b/env/lib/python3.5/site-packages/django/contrib/sessions/exceptions.py new file mode 100644 index 0000000..4f4dc6b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/exceptions.py @@ -0,0 +1,11 @@ +from django.core.exceptions import SuspiciousOperation + + +class InvalidSessionKey(SuspiciousOperation): + """Invalid characters in session key""" + pass + + +class SuspiciousSession(SuspiciousOperation): + """The session may be tampered with""" + pass diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..15a649ff06426b26cf99c041b8ff87a3f3d05cb5 GIT binary patch literal 470 zcmYLF!A=4(5XIJWI_U6K5A{7GRXXn{r-TBS^B4CbQ90 z71jk9`%EYBu*y8dR*-1&5<}l98Bhz4GAKcsjJJSs;BCUWVC_2NjG+*w>Qk4V2i+BL z2CRi6g0nh9M9q#5*\n" +"Language-Team: Afrikaans (http://www.transifex.com/projects/p/django/" +"language/af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..027a0655684ccb109a11c71d4c615475ce9d699d GIT binary patch literal 846 zcmY*VJ#Q015M3ZZbkIP95ER=Gfuglg;3eSV z6EF&V23-FO;Jjafv%ojN^?w4+_XqfOjF7)z5BPDMkW1j-V5g6sAmk$W9QXow9PE4x zV2t&5kAPjAEQnyVAE)qzt%!Tlm^f92$Zk85mxX*nbMz$^=#ct=&S7m;U@fzjR!K6R#BfJ%1EQ_>ICJ{E(0lg!XiValm zlK<0Xq0862)#cU2;p2J9_ZCuRrNX6l+jyOoU0ZG^B384szA3bkHoPA#v6-RIoz;|@ zEvkCjh*c|~GaIozxMe_v_STXeEfThr>TMHH)$W%joSvmc8mch#>2>N;sA0&F@*=Gu zt+@0Ge(QWVLC405d@kf}Vq&Oqen_m, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Sessions" +msgstr "جلسات" + +msgid "session key" +msgstr "مفتاح الجلسة" + +msgid "session data" +msgstr "بيانات الجلسة" + +msgid "expire date" +msgstr "تاريخ الانتهاء" + +msgid "session" +msgstr "جلسة" + +msgid "sessions" +msgstr "جلسات" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b363bffb415392337f08f9179feaeeec5a8fcac GIT binary patch literal 702 zcmYL`&u$Yj5XKiMf3$D_&K!nYtIFARP?gpp2q>*ol!&NWxSQR{*6qe#*-n#4ya7kV zfg=(JIHMjp^~M8mgjZplO`4H@`aI)rJhuGz;l}5P;ui6U=o5E|4@8LXM96;-w}}hl z9`TC^_20xD;t%oVS`_^weL&2wH~x>L_bLCh)NiE0e?dz2#oQaDA#OGjZ7eki*_yyv ztt>(zJw^_lQ%0{e6y;TNhV#|hMMG;&G574KVDHd|CIQ8%)TN1!u{PGTfh$$PUQSBK zG9w@!zRB3WMd``QUePoG?Ue7Zlr!D|&PCeUPI;P=ksaf?3TLi;9hUB~_7mWHVux?1 z6mefV&oV2utE4wpz-y_sa?nRrUvR+g~*rBmwCqUPW)b-k3 zXqLTA4Uc=kx4Ll@{tOC)To#jD6_;Pbr>V=II_wx1wpN9_lIQgE>q6Kt8eQ}saD2gK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po new file mode 100644 index 0000000..57d8681 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ast/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ḷḷumex03 , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de sesión" + +msgid "expire date" +msgstr "data de caducidá" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b488a330382682101749d397ea0dee7acf255a4 GIT binary patch literal 731 zcmYLGyKWRQ6g3bY8la(|qHwxIk#}YmP!=zXfUuDwv0@bldS}O(IGOQ`Y)^Kx-#|fw zP`)4)MLK9<8yX4@C)$zAHe(m0v|6C@^4p&U52ld`wc_(`0m zheBs%uq&(5IM%b7O4;)|vn(k&4f?MVwq>Mn@Uj=!jnifnKV(tN;!PUIJlfod;wXZV z?aE{2XD)p$7Cm51`0n%g(ME&_UJC12VuZH2aHZk2TPRI?P}NwZf&bRwFBoW9)`o=u;KhjwJ)b#;p|ci%I70OF%H**-cGN( zynft>f~`_Jsd2263ioqz, 2011 +# Emin Mastizada , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-04-27 13:19+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Seanslar" + +msgid "session key" +msgstr "seans açarı" + +msgid "session data" +msgstr "seansın məlumatları" + +msgid "expire date" +msgstr "bitmə tarixi" + +msgid "session" +msgstr "seans" + +msgid "sessions" +msgstr "seanslar" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..83069e23df9311fb5297b7bb9f789eafdf5a1051 GIT binary patch literal 895 zcmY*VO-~a+7#oedQ;0wU&-vQS918@WI6JYh<0PFh$xO)+yzrYS)@>1rT2DW_}coKLC_!jW9fo^~= zKyR}r0Jbh?gdnb8SKte_teyz1WfW>8y0KIOx402VXX22p$VbhdI2^7us;g*MG!0pA zkxij&l8alrJoF=HL&T9Xq^5n@BFi0LlSbrXr~bG>R+QidyyPLA=Hen{WkMNYvzRfL z&dyLqDHzFy*q1hQ?3*QYp0Ih$9=IhsL!q2UTpQ9*Jk$XQe~wajIhCo=TW=W_f@^}czixL(jga)8J=13 zAYl;~A>e*)!9mHp, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Viktar Palstsiuk \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sessions" +msgstr "Сесіі" + +msgid "session key" +msgstr "ключ сэансу" + +msgid "session data" +msgstr "зьвесткі сэансу" + +msgid "expire date" +msgstr "тэрмін" + +msgid "session" +msgstr "сэсія" + +msgid "sessions" +msgstr "сэсіі" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..574320d8f59a4b34932641c24f5129fe346eda0a GIT binary patch literal 783 zcmZ9Hzi$&U6vqvOA3B(r5i(n=%DKA=NP8g_YH6jSMnvUccXH0v<>EWpPLqz!!h%2y zNDM6e2N5b#pb7&M6Y?#LEDVgSj6B~pjl`2a{`$T5^|Sr+dgTp*xD4C?Lf|U!0}&~KpjzTc`wCyvv5wPTF(JU(F;r z9pJWOchPBXH#g`1_p6?>kqXTOyz4N74{A2lZkA9k>bSE$8UjxE(vKq%Ubgwo=(s0Tx-2s>X61m)pjIz_%LMU#vUGyf+{7BQr4* zWRA@^ADJ;WQ@eaHV{-zHV@SW`NBIbWukhxt3NO^BW`dzP!t<7$fXruelE2KKm!tk` I&QiGY9|83L1ONa4 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..d4187bc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Сесии" + +msgid "session key" +msgstr "ключ на сесията" + +msgid "session data" +msgstr "данни от сесията" + +msgid "expire date" +msgstr "дата на валидност" + +msgid "session" +msgstr "сесия" + +msgid "sessions" +msgstr "сесии" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c029c760cf6b1db183901dfcf4f343cc26a441bc GIT binary patch literal 762 zcmZ9HPjAyO7{&vPKMI`S0ul#v+cddJCZL;35!%?Kp;lB=;O;hV<}I}&+g&?}6Bj`})kD2XzU!4YYu(zze|DA>jNw z;4<(LxCVR$-1-mT3h)cqKj(RWKm%ase3i4Hx4?e@y#e|Y^d{(EP>7f3UI2ArI@H&q^D+^?N0u+*HLnd^$cE5@N=eI6G6!q6{++$ST2>p zZJqK2FAr0VV@Z(Tc^cyt#i)TSehjA(v=B!3a2VmJj-rT!_4zOgLkQvxw!_`bX|9gL zB^)iG=svj{&WBKbi)w>oMTO3&k&2)vR0yt7i}8eI=mFdY?4zu-H7@${A@qoJNK=Mm zMh65fGm+AaquEVkauNii(WqwJMBZoPT2Bsw>P-{LPTGU62cMms4M(VHdHjj zYf=p~K_V}$ZZ0%X_1l~k=uQ(wa}D1s?EB*2RdMjTu-^)6QDKjrx1Y-I5%{;|&QW2% l7j_@=pUa)&!XBP6kbF}n-K76__MrRBnj7Ozep%Qr-ajV+|5^Y5 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po new file mode 100644 index 0000000..aa4a335 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bn/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "সেশন কি" + +msgid "session data" +msgstr "সেশন ডাটা" + +msgid "expire date" +msgstr "মেয়াদ শেষের তারিখ" + +msgid "session" +msgstr "সেশন" + +msgid "sessions" +msgstr "সেশনসমূহ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..504706351e09cbc4dac5048f90c65e8c26ec7d2f GIT binary patch literal 536 zcmYL^&u$Yj5XQ~l!X7wq<}f!}Rg<-=LRyDZsHK&P5)oAkXPn*1#?{7N*$yf10T08O z_uyHW-3Bt!PoKyBW<2xf<>Q}%;}P?UIcAMY9x$_NCo}xMh^;RFtL&=d%OiWk= z<6>iy4;nri=WK)t*@_x?$J227zUk9}bqjySHLhNpny?_V(r_Lqc?bK;lvqby6O^B4n zpNlIz+4;J^78LN(mAHm}(<{_Ik>tGtZ@?jM{Gf)Sk QOjM>RUoW@ffBzDH0gTs`zW@LL literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po new file mode 100644 index 0000000..7735bba --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/br/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Fulup , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "dalc'h" + +msgid "sessions" +msgstr "dalc'hoù" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f167bc89eb7d449a1bc8f0abae923361c2476a6a GIT binary patch literal 759 zcmYLH%We}f6dj;EG{A;6i_3zlQRR#sO4B--f?8UsC=pQ=*gF|#>SSV%#tuoP`~pk< z0X~2w5(`#H-Bm0B@dbPW*O{cb($Tr+`W!zr^Xt*Z#{laN;xVFyxR014e0@TA{TXo= z@dfb!@fG3cKM?m2KM{X!1i^1)zy9rJx#uPFL)2GG{=1z2Lq_}J+*`=LZkH5nEZGy< z%968O6%rERWMHMW%IFpQp|}V)nSwhwHV z@6c_E6}E(Rq+1AWGvQ3Z;kD3OS!hX>$PAiz8$F_&g_P zF3K~ZbOZY5qOj7%Z@VXCZ|(DE4P-%%b>AdPryTZr%3WWRL(hhtY*L7foS0&4Ip};L zZTzeOWgBnlr;NrigUwCwEqxL*1}}gD+EE|GwbfEH-tp}sL7R-id|pP-Lo1kJn5k77 mVSt~0G6rRx94&qUH55T^646(He~B8(V3Z9f-#@I>a`+!<&&jy} literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po new file mode 100644 index 0000000..2ba36a9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/bs/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "ključ sesije" + +msgid "session data" +msgstr "podaci sesije" + +msgid "expire date" +msgstr "datum isteka" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesije" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..480400c085a31281977f688792af162351bf3d45 GIT binary patch literal 738 zcmZ8fJ#Q2-5H%1!w9pV*3a3jH`F1w~F7f3M;z*>RoH&Jr-mK>~PWJ4T?d2~20f`F4 zZ=i$*T97Cyk!Wc60ko8ickgl%BfWhy<2PfEW`C`&ydh{;5w{T;;yU6LBG@OyHN@Wg#4YyuP+jE6a9C{q3%8ME#wc#tH|GwL)}kgENe6? z$iXhRMDVDwEBL)M_sLUmP8sb8%qnGpO5uUHHo4%C6z9PyoGpAuM%J7_?%9E4&%uUH zoXQiS3lkkdWvpjIS18FI)`er4;WQdO$=JYx@Tg^v@HS4jlJqW1QkHgUn)0N(nWRaA zLUsf%Rp`0Yby>2*(jA)K<9CwH1T8ug&a=!4?MmT|<@B-8S~+?MNp5=N!-q~Ak;SHaW3MGXm~K( zTTY*Ll4xMG2aT^ft8hFIGapx_P`XF+V__Zm{S6~1gw{JuDtN=>b`y?Qb=&& Us1&r>H|FwE)c>XCzk(zG06Lw@H2?qr literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 0000000..cd7ea3f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Carles Barrobés , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "clau de la sessió" + +msgid "session data" +msgstr "dades de la sessió" + +msgid "expire date" +msgstr "data de caducitat" + +msgid "session" +msgstr "sessió" + +msgid "sessions" +msgstr "sessions" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fef76759fbed178e9eb9a9796a7413c770bc1a5e GIT binary patch literal 747 zcmYLGyKWOf6dfQCv>*yh_?t|pAk0^Ul88^ zhVa>+h}($Y2=8AaeC{ve;}t^wA^Y5itAyM^{)FuHS7hJ!W9I*w`IpGpHp#3Y`?@|Q zg1;tp1Had1Yw|)`tBkfpj!RWZ$b^%`PR%)cQ!K=ZJe{vC=~m`grj8zD^p&jqP8_mh zp>q=)$WKPBCOz0SVxmeXj=$pDh|(t*2==6RGBPb2XBM&aWRo~rF&)< zdvrb&xul5{0}kyonf9U9cdq1NI2w)W&hMvsa$HZ%Ae_EvPQ|P_Ol`OxbPhUu%eS+7 z6ts%RPp2kRI_I$UTDip~Iixn| z7Q;#ubl+41%R!eDY2*7Xm@ea*j$^hCk01gLHN6`*U~LWbPQ2+&hGwG`;JDAEzBng1 b(cu6lGZ(2J_`()27bnHV`S*7VIk*1, 2011 +# Vláďa Macek , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Sessions" +msgstr "Sezení" + +msgid "session key" +msgstr "klíč sezení" + +msgid "session data" +msgstr "data sezení" + +msgid "expire date" +msgstr "datum expirace" + +msgid "session" +msgstr "sezení" + +msgid "sessions" +msgstr "sezení" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4bee0c0d7d63b513d3a2120e61e3221985011cc GIT binary patch literal 774 zcmYLHJ#W-N5M3aA$RG-8ilK=TMSHd{iSDw80TB`ui4&(_pkBOtJ_q00+Fj%Gf1u^R zKnop0lr%^b&_hdu#H`Pk8|mr28NZqR@cy{9@s40zMchWji0g>A2p8`W*AO2NuKp3> zyk8MF5Z@54{tMxJe-NK95c0RnKV2l`Ch9N9SCGFWJO9tF{u|l#{X@pKcJ>Cci_1$Q z_^A!of2q^tnKULVlp%6aW?F*aRuZ!;uGkg%dGcB|D{aU`7iTiD^hD4XQoBhE#2Hs< z;hoB|(3Xx(nhE-_N)3$*2HxapOb@l>7QOTluEwArg!?oIX*hr|WWiu32!jBP^i;md z+|0FaK!XF?--U3<_V;!I4DSgymd2VZlXF{W24k+JsDuDs!sEJ8f=}V@yemFfiC$97 z?_sk_E1pUkOFn1tQs!m`TQh4*=KFPB_pBS7P36M*{pHbCly}X3()ion_+)&vzJ#zB zc!!0uQsL&B5>IL6!un;-Gc|%_#*JT*k>_4Q l)+k;P(Fl=ofg9G-M!A2T)rz<`0G;M}UQ4{-E_Kv){s&)c&>a8( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 0000000..efd21c2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Maredudd ap Gwyndaf \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Sessions" +msgstr "Sesiynau" + +msgid "session key" +msgstr "allwedd sesiwn" + +msgid "session data" +msgstr "data sesiwn" + +msgid "expire date" +msgstr "dyddiad terfyn" + +msgid "session" +msgstr "sesiwn" + +msgid "sessions" +msgstr "sesiynau" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0585f9f0ae244ccc1d8a60d89bed281da47f8658 GIT binary patch literal 722 zcmYL`%We}f6ov;Vw*j$W&BE+jRnB-SAgx0Xq8F*C5m6b~yBTNVGO?-j9 zEO~%*OE;`ovSh;puw}{bOeZAM`Hxe7#=(0u6Ovp`q>@^a1n&8hk&XC|h{epdoJ75@Bf( zxA47jHICj&=akVdlCw%#Npj(309R?a*|Gq|f*hw#g9jk#L@7R%llWZ!9OTh1SZEBdKy(lIOS$rZ3CIw59aWyg-dE zCZdoulVZ%to`7RS)<@n~JV~b0Y0HNV)lkk_12azQCpA)DRVTSfHsao4Z-4dpw8i3G zqrKF))LDhsc{%e*RSKm$WH1ueN#A{!9nkHSFPt@$mhS6;$(1fR**;Nzc}x6K5%RNyU=@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po new file mode 100644 index 0000000..8d1689c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioner" + +msgid "session key" +msgstr "sessionsnøgle" + +msgid "session data" +msgstr "sessionsdata" + +msgid "expire date" +msgstr "udløbsdato" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessioner" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3af914671844a74f6c5668a49072bcd094068635 GIT binary patch literal 721 zcmYL`J&zMH5QYsLUkfzU6sEh=$=P+_l;9AAxDOO`5z*a3Z?cm;-|gBf+e>o%21Iw_ z7f{lJ=xFFDDQWltw3LjKY%2ZQWj_?JrK8OHX538Rh+?jlRGl9<`l-B4Knr`Y*{RO9 zL`P5=>)FudDr3*;+_BUM8jW72Y}bPH=w*BOH9^}6-(d-7yhAw`NoPCZNrFap1aDPX zbM5P}pu8(~9&RTX(V=vnrB-TJNN=p5FQnGW(L+!f6!bCf2Fs_#ylg2wF;8$t z=e5j%r65Z|pMx!>rkf|;S0aw5(`n0x1=R#*t+6TN#gQ5*meX+t@m4e(4ENWE=dC2# zHQIy5O`TVGIuA1+SA|r%N5?19I`I8h=>hAmec@XZuxwwCO{R1%X!nist6kzRg=kdN zRu=5Q*wP8At9j}A?H*mE{Y_2p_bK1%Me9q&JDJF$aCm`rNsg6&SL?jd&;`A!*kG^8 GvHKs7qr)Kp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..a3153e6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011,2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "Sitzungs-ID" + +msgid "session data" +msgstr "Sitzungsdaten" + +msgid "expire date" +msgstr "Verfallsdatum" + +msgid "session" +msgstr "Sitzung" + +msgid "sessions" +msgstr "Sitzungen" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb8a5e8013d76b0711ed5d3e93e0b2a68928b74b GIT binary patch literal 810 zcmY*Xzi$&U6gE(P9SjIokh~zZs+{wsMJX2oh|)@x8WFVtW+(S@b#k#!wvQyJBO@z+ z2@5cSIw3JIz{bMD#)QPk^IemOCw=$%eed)0ulsR*N>7d%qyABEBKK{uAMSzY$;05b_t<>z~gOat--AviJW&zJdJblrNvF^jpX{t?a#m z?Bjez1g&LUz%SaWI0S2@R+hjtmj-Ae91vTHbM~TGBqNy3$Ch-A9zx%-y@Wjj<2%JP z848u^-~e)M9BbQDChSp>TGrJu4LVP{Y}kE%h;uZu z19%~Q&!w-y_+3`tpq$6NzRod%ePJEz8lh|^oHj9S%l?soj6T=dfZiL+tjP64t4;5v z%ra3+;6Bb#X(3WzT@d4#?&}E{dWaS&6kR=XE|0@-GMUtz?<)r|t@ZUdtWGwk?6gUk z*j~66wD;OO%S(uAJlNLCfx^wray+GjsSEQ=NY$jcL1V$So_2TH*3#z}8-QUus;?8N z(wJ`bq+9G3uh#a0PF5I^v0ZJ(Hl`{sQ`_2X(rVaRRk!i}TCIpapq!$mO6!, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Póseźenja" + +msgid "session key" +msgstr "pósejźeński kluc" + +msgid "session data" +msgstr "pósejźeńske daty" + +msgid "expire date" +msgstr "datum spadnjenja" + +msgid "session" +msgstr "pósejźenje" + +msgid "sessions" +msgstr "pósejźenja" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a8ef4cae0b3205f342ab3ed5c647e81e19a2a447 GIT binary patch literal 809 zcmZvXzi$&U6vqveA37LN2PPzpSXx!i-36+I3qgp|qDn+WCDo!GDvl%NAiU2#+yCGSSjB45QeleK8GUq`!cc{`Nl$5KKY9Rw${kqM?w-@+Y zM!8VAl*W|Px==Ub22IjjO*F1U6OWrTW+Y^^5#ZaBu{xev(>e=Wx7BLpv>lkNvbOcR zqc4pm-D`GP>drcq<;vpZ^M1~A76jLf!=pAb_?>2L?Pe)WcnR0ms8mds?}tmIIPuxL zR+%J=ye6WA#{n)rO!WRE1I$vVnl>d($&!!_6=0qXkE)z6;nB7{!|}y3_Ge2DGTVcv z=7Z^(ox!H*nBL$qGJW$NHk;-XXdj9l)5YeUd2K$LKGX+K4zzTU*|GgY`zx?_@nMG@ T`W7bi%r5vk|EnKrvG4c?bk!Ek literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po new file mode 100644 index 0000000..3813c31 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Pãnoș , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Pãnoș \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Συνεδρίες" + +msgid "session key" +msgstr "κλειδί συνεδρίας" + +msgid "session data" +msgstr "δεδομένα συνεδρίας" + +msgid "expire date" +msgstr "ημερομηνία λήξης" + +msgid "session" +msgstr "συνεδρία" + +msgid "sessions" +msgstr "συνεδρίες" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..2ce1872 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/sessions/apps.py:8 +msgid "Sessions" +msgstr "" + +#: contrib/sessions/models.py:44 +msgid "session key" +msgstr "" + +#: contrib/sessions/models.py:46 +msgid "session data" +msgstr "" + +#: contrib/sessions/models.py:47 +msgid "expire date" +msgstr "" + +#: contrib/sessions/models.py:52 +msgid "session" +msgstr "" + +#: contrib/sessions/models.py:53 +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcc2fc51333228a9617e09ba1058373d60eaf7f0 GIT binary patch literal 486 zcmYLFO-lnY5LNWFN6#Kc@X(^uB%)YTD}Gf_EEZY4O6;cF$ab z*`uv}NZ601EAVn!M$Em2Z19ldRj?+p7OzdR8V;m7La9(4gHl=^?@1*k3-QsuyLr!* z?hutkdBi1JsXfWa?oCXX2Sc$k$p;O0hR8*@x2~`ioU$8E&#Oh+ay0U1Ttns5looSq zCK`HFRxXaAaWRc4n97+ZG{z~_T8P#!&}`V-uoH-KYEp+bi9C(a;x;N)7E- nm;Rk=Sj@@>)szk6jSrKkf$BvXy9XUuhTR6iP8U?Oldb&%5k-%V literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 0000000..a38346c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fd83c311b204685c04898de3d1385915b0e267cc GIT binary patch literal 707 zcmbV}&u$Yj5XKiMf3$Go%wf1Cs+_eeAgx0XYDrNc5mA+LMJ7AhxNPi|?T}RB6*zL> z$PEr~%@2B z7V(pa^J3->)%MD{|71ASADOL#<*HbvURRe$W{j~ zEA0?+6)^GWy|!kpv8XPRH+Z&Q`()_sDUJg>%GpbFag&7nRGGr2$5>ex*uWP$XZ!QQ zvyqjM4quGefkPF@%brj-2|HZeXIwDR1|cMGZ*##p8QC$u)$z=Yug&-#6MG;Y$a{R7 zQ>1<60~, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "session key" + +msgid "session data" +msgstr "session data" + +msgid "expire date" +msgstr "expire date" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..258b3703b3f3cda896509332908b1f21d18ce8b2 GIT binary patch literal 727 zcmYL`J#SMn6ow6y4_!bYW(Kphs+@ao1*CNdLX=c0YD82n>?Zdlb$Vl8T{}(sA6OWW zVCWxUV}l6^!3rBA3qOFBk=OY=(yQm3&DeTG8+ zD-^sxpli@CDD?k8!S@$>caE`tVDP;;&)7}yJ$MQH0A2?_f;Ye~VDS9}v2B{Kfgvu= zz_2upu>Zn5XV1wwZH;3zDRo6WSDu)gH5Uv`wJeV5bdfvOsqBEdUhL=MB~@XPRWpn@O4^Fp5Ju z(P8GwR~N~SNOyR8U*1hN6GU{NoEKT8j4PD4mE=#AG1~D1(m56U0d9lxQ86uR+Vt#0 z>@oe3>XXPw4JB{6k}$wqzJBC=DdTuN9@l)Bse3f3b?q>oy=sACJ|HF=Z$$0=c5C(i zw3bA>)_5|w*J+6ddYbsSER;44-aS&4Bj0?H?TPJ`FPzn*O0-PZ=Gycn-+rb2@}iQH zjXK4sQia&F)zC?9%4zAETMa%-o9l+(Y4UWV5#e7ICJpdY=0p`b*Wb, 2014 +# kristjan , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Seancoj" + +msgid "session key" +msgstr "seanco-ŝlosilo" + +msgid "session data" +msgstr "seanco-datumo" + +msgid "expire date" +msgstr "senvalidiĝ-dato" + +msgid "session" +msgstr "seanco" + +msgid "sessions" +msgstr "seancoj" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..20e0a1c6e0d00f5dd546395b9dd0911a1df88427 GIT binary patch literal 734 zcmYLH!EO^V5H(OJS~#GdIhb3k%2{s(q;*JzD6Le~h^Sq-oAqSlc4Mz>r%C?-i4%x_ z;MfaXfipKaa^VBGa%8+onvveVnem&kz2o0&EAI)~D&jsON8CZYMMV3IxQ+ONi21LG zsQrPsi};0z`9FxL`-}K+jgWuy_}z6v*3kcm9P2(I-$TBf^LOM}_Y)b*8qErFw3{;` zxYXD!{N9-R`<}S;9@61)u}Y4 zO^%_qF0h_2wPMf4rDwSnH0i(0*`5O#P|Kd=EM`%i1){1aEKhjB^ySV>s8b z=Tg^Ze1~N_GqzJp!$uqEGNN7(T6H08)TBPY@GHHd_Q4e6+D(ono-DyG9ygUV;ZX~_K-v09TS&Juo z)&wwks*4)07hoFFx{}&-Xfc$|L+HNB57_on7xx-~WBaDCN}E#9?Ke7H9aB*7NxvF9 zS+N7_MqW@;H=*xtb?D6Pt{eKGOS6qm5~qs44LlhD?no8TLaK40l~i$d`rD-;I8^K7 S(jrk*@*E$)G7%S=F8={Y*vT&d literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po new file mode 100644 index 0000000..85241b3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ernesto Avilés Vázquez , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9e3c7f142e14d54dbce74d6e688f1ec83df2fe0e GIT binary patch literal 735 zcmYLHJ&)5s5MAK-kfA_FOEGkbP8-{SQ-Y%u$8jf}L`0M`v}my>&K}OLwY$0G{sVNt zf1pG((1K_wucYAz&{8t%e2w({W@p~ccs%~SyYqpO-6Y&6q=egqw*+rr3AYH}2tNLu z;I+R9cL}WiT%A##P^6l6W=BNN$l@k64SL>vqS9d z`jQx>YP&(tYb&3fqP0>h%WzRigOCe{%r1j#_Cc{ZyupjLZ`si3Gt3-6$@xn(zET4D znNWoeMp$X%_`nu2=TByZ<*7~}7(P$=p+VtD%b!xW1lm!&&!d>f9f;#3>g+{v6p@gR z@Lc+uTV01ok9qqc#NA~7(OyIrJQLRO)Cgru;j~F$B&O167-%C(w3JuHOccmd6w?Gw zE1{&FK;ys^sGL-y35|(!RT75t`Ml+PB{{}LE7Q|(Im?>LRjCl|tAkP43>O%hkjT*@8 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po new file mode 100644 index 0000000..3840a2d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_AR/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ramiro Morales, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de la sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..238fe245c659c47b6b5f1ec06e0acc58fdb6b78a GIT binary patch literal 754 zcmYLHzi$&U6gE(P=wLvd8O)Zba?TeCrF9yFI9jO^QKR-?Medz*aeHT^9&5AOYM3yasst1h@nE z4Dj)<0I&THxCi(F@bTXOuloylcMYL`%k|sq2yKG@9@yu70lp9XZOK1@ecm5nNNY43 zz}{{y2*Flkx8QqY>7!#|t<=gQF{`8zIO9$ry9ln>2l>_FOkAvdi$+GDiqw&VjJy=a zS7JCj~k*KtBWN34lk*9TTNun7JMu!QBjo=Qn>Cqw8g{v@`Ik^-L$OrJd=F> zMAxp+`mB@c@-d{Tyym$eiQpx}#}!x7PH-#Mg)UDdZ{ya)xr&A1bUN)gUtf;J%qNG7 z8?LBWRtklE6(5G}V0bXxTR%tCp+T&b6AF%bQNewkn7ObjxKw?dPPnnc4PGSsWP7di z?Z(28J(cQAs+{5N6X~uF&2ZBz7!|eQ1=-i8v<$1NS=vFjj~DKsrSQW6j@tdePa2+5 qSTq*U6lVgbJgZZg@yyRtUVc;v1`RI, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 22:00+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33f2811643ec54087a93357617f2183fe16a6645 GIT binary patch literal 756 zcmYLHzi$&U6gE(P=wLvFk-=<|BVQ~zle9|2>CZ3pPnaV9rO3dH<3Rg-$4F`d>#2Ga+voA8K=!^ zuOWxHSQEitv$%xc3-g>Df^*7fM_^hh3sedZ#MR=0gD94R*Ko4P9qC(h1i5GXl063- zDsd{0gf2{U0F|+x^<1GOdo(T_%M7Pc|7pf{EC`QY_87Zyx|yVRS(37}P1BSo?TsW& z5;U>{I98$N%GYMeHcPi@dXL{pHWG~JiEy4}R%llWZ!D*8j2sC~@7MgW7ztIjax;2> zR$Yum0W1SC;`Fc*TDc)@^kAxT)1-}|_Z5%h$z;;@`+*w)Gy+6}<6U7Z`LbiwJ? zE9I9<=5*F8>X&0HO15Y0$Z@Kx+0b=2JG4%_4NY%%Y1-^W;coHpz>xu9Q!0VxLXLAK mg(MZ&vkyj^pyGAcKD=k+f>Mf^c=kz?ycEayENWK}mhS(I#nB%C literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 0000000..cb53c81 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Abraham Estrada, 2011 +# zodman , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: zodman \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesiones" + +msgid "session key" +msgstr "clave de sesión" + +msgid "session data" +msgstr "datos de la sesión" + +msgid "expire date" +msgstr "fecha de caducidad" + +msgid "session" +msgstr "período de sesiones" + +msgid "sessions" +msgstr "sesiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32f6e8fd6f68cc26000df003f93a77c87967a3b7 GIT binary patch literal 486 zcmYLF!A=`75T%0C9yxQEN*of=iR}nPaGI)u1}Rk{BG~4NOm?y{+Sn`GX=wk0zu=qt zEuBpedD4?T@|!nr{O|ba^?>n-dBQwp9x}f$8}yiO{CLG@qxrxz_-C3Y92GdD5UqC_ zif7|WpWRdKL&8ZcZGqS8GGgvEWYfDGZvvUbTKr)WY3NFIfl{Hm1f{gRJd;XF7UDhq zwvFdrcaBP;yx{b=kyPcr; zI2(#~HW^KZ`wvkancaAo$Z^m=HE*2gC5gH+*7ae&G$B$N{K{{!x7Rfz7Zh;l=Dx75 r)X;mf=_9#@?W}BCt%IrX)`wNp;OcD|2i-pGu7j3?&jV2Hes=I5Eewyi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 0000000..ccd4d09 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8d9fe06982028079ac5362ae262233d245878e80 GIT binary patch literal 737 zcmYL`J8u**5XTLKhZcl@n!W-X|C#Z4?2&)p+xSS(t|Rx69Jz_SN1}a0ZXn;0nE!#q z+F!^m)3N$S7&^WWqUMxEFSW0j+PurA6V|B@udvb3HnkRqdh$Wt)Qe&@HH4dD`#O%o1T4& zXG}4Y1+X0CP|%hS)@W(yWOUq=-h2?8v39~v#mz5_*NWBkrU_#Jsx>EkhDBMtE$ECS+jC9 Sl|~IgtrO$(v!K_ZBL4v^z{|=2 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000..b7efce9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marti Raudsepp , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioonid" + +msgid "session key" +msgstr "sessioonivõti" + +msgid "session data" +msgstr "sessiooni andmed" + +msgid "expire date" +msgstr "kehtivusaja lõpp" + +msgid "session" +msgstr "sessioon" + +msgid "sessions" +msgstr "sessioonid" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1d92fef4d6043a9704c5d5a042ef6a3b5739c769 GIT binary patch literal 728 zcmYL`KW`H;7{(10iVg6030IZC>&gIW5{q)$+J+J?qf8XAEPq4O;J4lM$K;9yuz983;uSoE} zBO&_(xrzKjg8v5zxxdJVON9JG4Y_xho7_j#YdHUedJFaQQoo^w+)q?&Ta33*LtSlz z;HO1}{wvEdc@EAgqaA^Hr7X})dLXVbR~k&Yo=o9lHFjid%^6HQ8)ob!*szkI*_qV2 ziH@N%*0YhzRmKkL+_BUM8jYW&?9hVrm}O6JH$mGx*=IaqNrxth;GI35aE?KC4CgAW zxyf}Hf56)JXwnt?_xCtf^i(>}QY*D9q&HU3frhD}!=jMZ$`W*@=tBtJW7T-Ai76jp zpU!KU14}`cf*wfsx(2#)>U|~Rcs850d{|VSz&td>&9zoiEW2Z<%jM4q(`i~$%Va6z_Nj!m`v$h(C#bc*QXQ|>S$cl zRu=5Y*wP8AtHspy+dbM0`#YN6?bBqp7lnsaMox(=r2;G0Z-{1iJ`@W&xHX10My?9~ IW|f$d|BpSzxc~qF literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 0000000..aafbe62 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesioak" + +msgid "session key" +msgstr "sesioaren giltza" + +msgid "session data" +msgstr "sesioaren datuak" + +msgid "expire date" +msgstr "amaiera data" + +msgid "session" +msgstr "sesioa" + +msgid "sessions" +msgstr "sesioak" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c2fb6622b418c7530d54588a2aa7b3568d5a3941 GIT binary patch literal 755 zcmYL^zi$&U6vqveA3Bf_EG!HjL6viNg(|^m5TdkFQ6r*qu$!E7b$juhY^O;#gsQ?2 zi3y37DIx7 z7vKyq0&M*&V7=dfbHES4){g+|`wKijhR{FI^T4y?2wehw32M*ZP4f}x1<1dHTHg^U zw2fykfZ8}Y5d=r$I0fs8=^owZT8l(##Cxew9EZ$sq$kBfZIR8AUA|xJHEO72hc^w` z2+2dP>?DfA9VVm1+2U!U45{l#gyeQ7(j-VIb{h8rvZ^>U;3aq9Hj0-#f0=kb@ypov zsaIa~e9r?T+2VV`&Yb(o#JfS3u3^7Im#;5+5Y8skh6IX99W#?CitjQhg~pp)ggnM8 z@ES;O#pARjWGlG|Ju>RBh?9V`HpLD5bSCkYZDUgEy4`NKWb8!I;=NKcX}gm@6%tR| z-4=7NI`xhE+Whx^$#Yf{X}E+}?WgcP!+XX}V!dRG*}Ga?ku}*& zLLnoHE02VkJ(J=Va~g3+v6!qUs;w!O={VIjzltZ@npbsDewcmCK4il`kNf%4Y=E+1 vHpt%p>Su3oHpmb2C)p<`yqftCWS{c`SVzDR7yanx>-+%P-p(tPYeK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 0000000..5e53fab --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "نشست‌ها" + +msgid "session key" +msgstr "کلید نشست" + +msgid "session data" +msgstr "اطلاعات نشست" + +msgid "expire date" +msgstr "تاریخ انقضاء" + +msgid "session" +msgstr "نشست" + +msgid "sessions" +msgstr "نشست‌ها" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7273f8a2bbbc4e528be924083f45c9b63d48ed6a GIT binary patch literal 721 zcmYLEJ#SMn6g5yj^gtjnGnlPaZnUypdzRcL60~IjKp5tqh?s4&ualu5J3L$xWmkZ7@$WCCcgQYh, 2011 +# Klaus Dahlén , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Istunnot" + +msgid "session key" +msgstr "istunnon avain" + +msgid "session data" +msgstr "istunnon tiedot" + +msgid "expire date" +msgstr "vanhenee" + +msgid "session" +msgstr "istunto" + +msgid "sessions" +msgstr "istunnot" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5a0fe1760ef3b9ec2cd5d90cf2eff1ca6a89e515 GIT binary patch literal 733 zcmYk3y>1gh5XTn?A3Bf_&{9lCqG)}05#VHvBSeU$pjcSppkMCB=MCrG)9wa4?*JX} z45XukmQYh6N*W%3mXg`C9W&DJ{xh>P`*HK@=E{3UcA2)ePQfuX4A60=BJfPc9_^@iimeNDB zO+C6ik|pvC;&k#30-%i12ea~s$m<_wNA90X&5FHcbd^QKYTGbRv4{MPtZYuu$XpU Mou2$3&-0G`16#$&, 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "clé de session" + +msgid "session data" +msgstr "données de session" + +msgid "expire date" +msgstr "date d'expiration" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 0000000..6e216b3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cb8eb2e2e7152d0ebaa4531c699406259c2f4f1b GIT binary patch literal 747 zcmY+ByKWOf6owZF7cEqwprJTrqG-H3PAr>o77!tkjBH^=3;nP=UQe=~SwE zJOLCbp|C{dj)IaBB%XvbzKSD#`u}t0%>DQ7&c^`b4)Pf3BKMIGh>y>R&%Ypdk*~-D zzh%BA;$9>({7{F#m@75cTJ({udS77yI5q^>KSC!Olv(VB0dp zw30?Z&YcLXuvTidR$t_s_+PEOtm<0mo5FSsgncrGe!9O>CY=H$h= zuq4$C!v5=&oEX6!_L7&l8-sdG8ziQLHi1$WHxFVO$Jj{D#e3=3-1ap|{DjmGfwoxV z=pe=jyWBdG8m?@~oi+?!aiye%u8_GX;TTVY>GN`t)}$Kfr#MFyV_pc73O-`cG13lU zZ|GdbqG&Ri)SO>W4#c#U=~1-2(OSyYsZ;zYk>I+Bx_#xV({dO4O+jGdrC2$J^e4OD3zZIW*KEsdK b%JBKM&V~-Sf=yjug-i2a%@59JQU(726q(IR literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 0000000..03074f2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "eochair an seisiún" + +msgid "session data" +msgstr "sonraíocht an seisiún" + +msgid "expire date" +msgstr "Data dul as feidhm" + +msgid "session" +msgstr "seisiún" + +msgid "sessions" +msgstr "seisúin" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ef41ac8b9b7a12d9edd66068289ffc33cbef9930 GIT binary patch literal 791 zcmY+By>AmS7{(2huLG6}F)_ST)v7r60Vu6QKq9oL5)n~zu)BB8oy)~O*$zpi{t2w? z{25eYA`&Ab8!U*KwIi=DO)FmMcaQJ!=dQ17CiqWavOD}>;(CbNR- z>*_)XMw+^YPmC>UD6ExQSt4e&Gy-z&1hETqsov!0FYmiS=8Q);wZu( z-52kr?|G4H(`cI}3B+xdY;Q(b!7FYZO$}GJ;!Ya|FDI&3RzhburHTnJ1Wg4W;{+F# z%pSln)6Pj-!g}dk&BAaxowl6sAV*@>%Jeu~++iuzS)Z`T!;PT7*WbCgZQP22o>opM zJjGFs*KuOz!n)#8bs#IbvBGuVq`P$MBIoxS2}5^OrgNzZ23rTxou8LMkq3inVt7S& zwHaFms%~Cw_fZEH!|uB3c4Ig`2Cwl3Jc9@rcsE(PiFf11g{P3f+8QW$f*;)b3HlE^ z0T~Ku1y@{=5w8wPF7pz&g87M50=P8zx0?XT=bs$+Q;s&4R76hjhSL0Rp5?LOKd2Sd AHvj+t literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 0000000..b291970 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-22 17:29+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Sessions" +msgstr "Seiseanan" + +msgid "session key" +msgstr "iuchair an t-seisein" + +msgid "session data" +msgstr "dàta an t-seisein" + +msgid "expire date" +msgstr "falbhaidh an ùine air" + +msgid "session" +msgstr "seisean" + +msgid "sessions" +msgstr "seiseanan" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c557365e31f36d5c2e4100d465ae2ba8f8f06766 GIT binary patch literal 701 zcmYL`&2AGh5XToNA6ht|o;eJ+R+Y26fhxfv2vJ&8l!&Mb+|BM}>(;SXw$r2%Prwlg z@c>-l3>-Oe;{iCrt1#Zp$4Ec@J>$RavF7jg*2jqA262xV5VwhUM2Ig$$iEUdi66ur z;wKU6zlmGKAL7%MDEddbP0X)0{`aJJDgUt4&!oZsos{hLyVpoVTyG@WT51roHGzvt zT7*J)j2t>Ajb3Reigj|1m#ejlM%J8R?%8p{-k=SKI230>mnJ^J%2>~au9O9PHY*() z8xHa4)tDVv6rQ~7IlacAoo4$i%~;lfEaPcsFU``FjO+w2WVmzV>#+0@Yd?Uj%l9Ad zr4;c%IM2pbXs3iXmcvV-wRA8*S)hW))D5LiRh_n^o|q?eMwc^DA{(Qaa(E$>%%#w< zbLxG?lVm=hw|ux#PH@r6%`|B~wGy>FpOh-ujfcm>!_D`zRvI4|?NL)(mlgfboddKNZ%Y@4p@&vF^qf-kP9ghdMWf)Fp@RTj|$*awt_iQZp+QJ2H0aIOwWQUBBIf zX4&7-aK8`PZZD3)#GpXPMKQ}|A&Ppa^4B*Vwv3~Z0!_ItP)iqK@aw{I!$toAD{#Q0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 0000000..2c72131 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "chave da sesión" + +msgid "session data" +msgstr "datos da sesión" + +msgid "expire date" +msgstr "data de caducidade" + +msgid "session" +msgstr "sesión" + +msgid "sessions" +msgstr "sesións" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1cce90494d9b225b0ee25ba2d153e27834d2e0d2 GIT binary patch literal 809 zcmZ{iKW`H;7{(2hKROUY2gJZ&22i5Pxw{HTdm#u>T2a)9s2uEW&beH<_)cesq~8G{ z{za$^NI)e}J^?VYu`uF|g%1EDBaf4&RfTw^pC7-k9>0Dq`N!S)od|(t9LKQ2Hi^4JsU(w%h(Vqdf<{~mq9(Q4UIEmPeUaVM{1=MNY3E5I1xQ3VA#BBkc_x#Ju^O;|z zz8`qiInVbz7}>gbnAo2CzAEz;nZHQ=E5Rji&OGgD+Rub9HuHlS~dps5_6ucYITVkUSeOl^hod>Sl@AoU(HcZ-LP-$gdck-mE zq`Rlxj&RFPW3{oo|9HRRIZK(;LSm?`9Iw-2pxr#>iLB99hZjod`n_<4E$sX3U2RdY zW!cK2M8*MK*huu=lmYDsr(npT9AaLWk$GvJ znh$1Zw!w&?@C50$c}2~Rc}9^B&3p6ipclT^@H{tf>46?2TH5^+SUo^}KGynhq literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po new file mode 100644 index 0000000..85206d4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "התחברויות" + +msgid "session key" +msgstr "מפתח התחברות (session key)" + +msgid "session data" +msgstr "מידע התחברות (session data)" + +msgid "expire date" +msgstr "תאריך פג תוקף" + +msgid "session" +msgstr "התחברות" + +msgid "sessions" +msgstr "התחברויות" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..34947ca89e2e1e1621fd4521985c290c8aae90c1 GIT binary patch literal 759 zcmZ9HKW`H;7{(7M6dg>R84Oda%DKA=Nb3-UD6J?;L{uH@Cg)sSF80ZGnp9!{7A7{T zE{u)@42T7Z1sIX|0F2;)55ntQ(}=#(PmdqJ&+9+Gmlh5Ks0+Xqpaon4o&mnz0p7m{ z7J<*eW#B8|_kRKxfnUIzGePhN^crB!R=Fck?=7f5{|D$2=wDEXPwzbk>g#+Z!NRe6 zfml^+Tyn)wMhy!z)0#^$Q@=@1%u{wSTkD{sOb2D11b+(yt^oZP^1f|EK*5)#)}<0OtDh|jL3&HXETlw zpa~M?)avG1169lBvOrgxC|PNQfwNzn{pjpBXFs^fYiF&q-%%ybPTb^q6|vLir~eGZ eU>GK0{;2Ao&O_wTO, 2011 +# Sandeep Satavlekar , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "सत्र कुंजी" + +msgid "session data" +msgstr "सत्र सामग्री" + +msgid "expire date" +msgstr "समाप्ति तिथी" + +msgid "session" +msgstr "सत्र" + +msgid "sessions" +msgstr "सत्रें" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d697c5f6a928f9a67f8d8fe924ef8be46fc2d49c GIT binary patch literal 819 zcmYLHO>Yx15H(N=S`b1AZXAXKRYK*&4u!OvY(a!pszgLo0(X;jH%@lFE8A&OsXu`p z`2qY3xT139$dL=&5aP-SF;2SaNN?ZF_&tBD=KHOc_XOh#;x3|(xQ2L#@bM9G74Zq- z`=1eB`xS8=@eSeoKM-E`2l49yA%D;6pBD+aiTQ72@B4>*19|llA-9q5AbZ~fWVFpS zE66@BFNmOJ9;^68*&<#^YgMi-k+VV>39)dJ*hRBs-xSMYERV|ElAg&&a^UD*Oy5Z3 zcM2gM37zD@zASR%XxAnxrq3pcrTsjFp!c#*J4OnJTKXJM3!%aIBg#1CP2fCa&2`2Z zLm}Olhsy7Hu4_`ZMfn!+$KeKBXBfc?VIA!op=~N$ZbIlP%nqTWvO=0KAH*2i*}PR7 z%v)BBpC*}5X>E{a+vwNHL?n{-rN~0)m>lmWG*pJp6=A(Tola}cZ?6vI%va_ywXD;^d2Rwrk!UZg_l77T{MSm~nI{aw0wuJdOdNJDq@ zAdi(!LfCw(-143w3{B8WCq|@nH#eCLK^ODVMh{!CNF#lpvnb-Qwgx_B_ae^W2{1r4 z*4t5|Txv%fKCR4UZO-8Mcws>etD=Xar_lhwf{7Jf1&Svd|RLy^Z~pqAx0 Q9ZgP8pn{WAEt{772M0^sm;e9( literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 0000000..cb0405c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "session ključ (key)" + +msgid "session data" +msgstr "session podaci" + +msgid "expire date" +msgstr "ističe na datum" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e2dcbe66bea43f6e98598857db560c4e6d582dd2 GIT binary patch literal 805 zcmYjPzi$&U6gE%_IvAiE62n`NT2;>ZlA@Fg0Yqt~N<>8M6=o;rUYuO)lkFo3>Yo53 z{|hi8n2;D4U}IrnV_{(AIY$zn^xfz8z0c3T?)%2tYl3kJaTAdst{`3_e7r$iM!ZFM z{XN2aKO?Rpz9PK-1L1wY5MRy_@(0=LpUx9<4fz|g&wnCcNB)hxfxLd9(r+N+w0Z9} zWFHqRB50k*I)2es#j&tfYGsL-7Saevxf8@z;)1=%m&r)X7Gq1gMh`{b(ZiHJ6~=dp zAsup+>EK8d+Bn*=nM~=!GP5+%F$CQw3EeY-JM_{=xLOQ#7Tu;SqEQo~C}z!V7BPlK zdL*7p-*e?_Qg(;d8^Bo1>e~z>c+9P%iQ&rT+-Va-NA?F?pfn&5tu3&TEToH%iWHPBa-&dZBX|1ovVRf$hX4Qo literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..04fd111 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Posedźenja" + +msgid "session key" +msgstr "posedźenski kluč" + +msgid "session data" +msgstr "posedźenske daty" + +msgid "expire date" +msgstr "datum spadnjenja" + +msgid "session" +msgstr "posedźenje" + +msgid "sessions" +msgstr "posedźenja" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..01e05400dd456d345f33caf72b99d5949282e48a GIT binary patch literal 727 zcmYk3zmL-}6vqu5KNOHa%nW90b#jvwPA#swaNOw*QBjq^ZjyIt+Qg1*hqfCV3yiEt z9r+Kqm2M1-j4b>Ctc*PO_me*PKEL<%v#tETfAE=L+(aHA5po;(h`9KM+(Ir9SO1PU z?@#0o@(XeGKZx`FMLt|1RX)+Qr zRo(zfr7i23G)vgiDm5%poO=D25j)l(EPB~9JdM+45FW80WMPYjArD%IK^O#RWCM7Y zxtTj(iv>?u^AQc({OIvvfZ@Fm#wte=JfeuE|sAJT06sw%tRe6GOa`kECNw* zdREC)=uAjj8(Ld(-=9n-4eLf^7cgzas_<8j*hsz};14Um?)A=lC%fl{jlerr(t^Zm z%u0NZg{k$+Tx7CC{8JCU(UGMRGPew*3tML8W-UO%t2$l0mV zh2d0|%cbcyJ9L$HYmz?f(y-p~NUxG(QGf&sW0J#YG1tP, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: János R (Hangya)\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Munkamenetek" + +msgid "session key" +msgstr "munkamenet kulcs" + +msgid "session data" +msgstr "munkamenet adat" + +msgid "expire date" +msgstr "lejárat dátuma" + +msgid "session" +msgstr "munkamenet" + +msgid "sessions" +msgstr "munkamenetek" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..24f465c142591af3a329a2d0a9613704754fdf35 GIT binary patch literal 744 zcmYLHJC74F5H@hU77BFr6{fq>$yskClsktY#66@)L`26zZ+7Q4PIm2;?ObyIffmsr z@gFEaqN0bA@)~{sEhXbk_A=79-+1Pm@niOCd+P&1yNlRCq=*NI_lRI$5%&<^5F!2p z5wyP$4-vl+A^ryubbk?_ZV>Vh`99*~O+vPjKO={_FUXIOzpwcxa?o8NV_BowLJoF& zMFdlg-NEmzwNGAybINE(U|A~*G?yNTTLoJVL3zEH!DZ_^GPY(4nPT!s_8MzW?<>lD$D0Sn<#ibF}{+j z>|~~ThIP7_%K}&mvJ!NtJ=ju(7~P$CUyC?iEEXLfI;(S7hN^gVx0cFvi&)8cFB%O; zC!1GDIy^cu*i_@`E^EA|hoz6}QYzi2*+g0ge()weWd|Ew*y|iDJJFfR@hpNKyi@-A zsDdgPjmx=}B|9~?a)Ro*S-L^DPgm|>SJTG>n(XzXcDmq57$MDpHe+rcza3&o85eTx Q*t1ez;GeJwtP|MgKUIOuGXMYp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 0000000..1e271ee --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 22:00+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessiones" + +msgid "session key" +msgstr "clave de session" + +msgid "session data" +msgstr "datos de session" + +msgid "expire date" +msgstr "data de expiration" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessiones" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d02dea8c8238b640dd1af071c7dee0313a549c7f GIT binary patch literal 705 zcmYL`y>1jS5XTLKuZ0R)3YS5VZ|y*I7atcPLL!~SiBnkU&Dz;Gw`;F#FL(C{NC?sJ z0yNZgAW`uEl$10)04*is-MidKzx~h5j>luo?>k!`5!iL$9*_aIfOkN&ufPr98xZq9 zfLQwzxDEUQV*U>h>;3{CE+O;}bPITU8KJwN??Gey3G^oDXV3)n%PRjJ6pppMV_meX zognzt+BNuIS^4ON@?Klxky_N+DJ(@$$al%L#-z9iW@@?iJ(@auuJS;}lDtwbcH&r` z3sczSMAg;>GVz6$GO;nIwbo|5+YJ(p+Tj?|5q+SXW?Bk*my6ok) zI)D?VXhfk%rbNZ@*hp)X*TUfKvk+>Yrt|r{7h+3&suuB3+C6G5<*GxfWqLoEj3-B% z=d&J74y_5wz*x%~-WSv&q;)B@8R8s9@+yp8X2)c(sf%}=Do2h?9;Yuj9=z7!Vp5K^ zOr~YyL`jaVt31c1ZbLs}L)^I|I!xj|H3~3ZAxb<`Qk2acZfw`5QCuX3?P@e@Os+e( GjsF7|k-h~0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po new file mode 100644 index 0000000..ef9b14f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# rodin , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: rodin \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sesi" + +msgid "session key" +msgstr "kunci sesi" + +msgid "session data" +msgstr "data sesi" + +msgid "expire date" +msgstr "tanggal kedaluwarsa" + +msgid "session" +msgstr "sesi" + +msgid "sessions" +msgstr "sesi" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e781b05be66d6f4d4eaed8d9341c98caf9732453 GIT binary patch literal 683 zcmYL`&u$Yj5XKiM6fJ)aoH-1)R+Y2fNL7ME5TdkFP$Hsg;cl{%t=o;gvYjTC5Jw&W zsZYQK9)Ke+&wmNWG zDT|OxkC8*?l+lfbqTD1Gc-5?3G`8j(C!P&*_6cp+Bp^SRx-ju6R>pcZa)rv-+j-$w zW(36J4;eeMC_Q=EJGxCko2Q42r!4J2nhM@I;3?;1WT$wk!kJrNhw+!J&4H)luzSEM z;-Pe&WmaleN^h)y_fl)+V2CQm5?)a^l)fofX-ny;c};tCF_#6h4CPF~AUCjg=6xlS zWU*MZd^k-_aoL)fSyIo_NV(pcD3k2RqrvESJ9*mT@sZIUHFb1V(P$o*KB-EnbPpzH z(mM40kJ$<9ZhhgdDOz@{Cni_A5YYXs{H8?#%EaSxZe__%jGZ|Fx>}{K-|j)Z?C)uK i(T8-u7e}jyG~vxmcqjUO8x6(zOf_Y=C~?|+RMCI#=C|, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "sesiono klefo" + +msgid "session data" +msgstr "sesiono datumi" + +msgid "expire date" +msgstr "expiro dato" + +msgid "session" +msgstr "sesiono" + +msgid "sessions" +msgstr "sesioni" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6dd863239c260a0ed6f94d732390291b80d9d9e GIT binary patch literal 706 zcmYL`&u$Yj5XKiM{}xVg?O}RAYE?OFS3p{aMTpW$L5YZ}g}d2xwr)4}%Jw#ilxN_^ z3vdB0NF3kJcPr*A%MW;~Yv-rIN|VcbAAkpXfCSs)=kA;Et}ZX(~1 zyU0%@oc~5{A%BoBSEA@2>V4$h)hOCP{eXHK^&@JG`W5v$>JL;bZ|}W^8X}yB2z{%- zvSr9wt*nGXco{kAoHBZ);ZR(fb2(q-E*e>LCUZ~v1$iTFXyQ4AEEce|6jJnTrx!=#xz#va*g}-JM9A?k+t2k)`RjWb{@gd! L{9IL4o7(6<7?r;F literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po new file mode 100644 index 0000000..0bdaf5d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/is/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "setulykill" + +msgid "session data" +msgstr "setugögn" + +msgid "expire date" +msgstr "fyrningardagsetning" + +msgid "session" +msgstr "seta" + +msgid "sessions" +msgstr "setur" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..33e2cd7c4e35ee41bef0139d9e3feb258936bb2e GIT binary patch literal 726 zcmYLGzi$&U6gIR#buggL3}$OpId>PR5*&h1ODjbpA}R;FxqH31y|YiY)1>?XOhruW zto#SS$PObT3x5DBBhR_JML*MbjQi7w!h*(fDZn>9`XGhgvyM_?XKI zf8}7|!m1Eb4QM(Q#)2EZN{(57t@C%Cf?-E0)tOW|r~Nn5t)9s#29siDM8S@=DJ`d} zT84Jm9njhx?kIYHNaNi>&@NLFzc89fYEzMcdb?U4_=;Rs>J, 2011 +# Marco Bonetti, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: palmux \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioni" + +msgid "session key" +msgstr "chiave di sessione" + +msgid "session data" +msgstr "dati di sessione" + +msgid "expire date" +msgstr "data di scadenza" + +msgid "session" +msgstr "sessione" + +msgid "sessions" +msgstr "sessioni" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0de4c2990f6fa8732ba810a6c30be7f33d75031e GIT binary patch literal 757 zcmZXP&ubJh6vw01AB=(^2p&A-sFdtvMBR4Q6|uHZ>EcpH@99ow{0ec`x7hlKj3j_ZmT*1+D@Sa2|LC zxcCg51NH$|{|-3s58wju3vl%UaK695&IyG6fnEf*PnN!2P?x_2y#o3X^fKtras2=k z+D5bIKwX?J1;NoM&cJ$Vyho3@F+xd$_#hLSpWB1l7>k{Oz!s*Ln0MoulXngb9T}6{aC~jk+AQ?_e!pL_Zlq}QL8Ya-e)*}1q~m_S z!~E-BW3{n7{eDoP-jb4*OL*2+2LH2sVErs*Le_9=lWD_k{YkV!7N$OTSDS0HEL$oT zG70g*hOo!)3~`5f&9tXkN>-Hanh?uul$v@_!{xS4YaS|wUy3|0hM$W3U6Fr4hkM%x iFZU1k-u&6!`R{PXT;wl`{A)4%Hft<~@8Mv!ijDy69Ply# literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 0000000..25ef99a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Shinya Okano , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "セッション" + +msgid "session key" +msgstr "セッションキー" + +msgid "session data" +msgstr "セッションデータ" + +msgid "expire date" +msgstr "有効期限" + +msgid "session" +msgstr "セッション" + +msgid "sessions" +msgstr "セッション" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..be4e5d87e082f92fdd5819a635e6bda1ca9c0ac9 GIT binary patch literal 803 zcmZvX&x#X45XMJc|1c_o;LSrHmC%_PQL{TSBCfl#l3-Y(_crOw_GZ#ObazY^yv++l zaZymwMGzIilSf~`2k@x$oA}Kn*??N`o3E?ptE%o_=U4VU#0hW_G{I@`1QhWR6!|A` z5_|(^z;{s8e}GfqCzu}byx-6&$c}p6Ip|wx1pNxFKppe~^z1RugT35~V;RTix-!>7 zV4nq_WI}V&W0re{8zYolXi;Q`$$;-I&cz%pSFnblx8fSa8{IZM8O*&yT91zpkX^ z64%e5&2>T^vuWLNcsOk%S7NZ7-B#$>?!b~@55 zrJG6*O-y7~rlt|q$?Vt&>%Qmmsmouv{Ef@Mxct4#-?@C>$lV9)=(i|QXXV-?f@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..b42fbf1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "სესიის გასაღები" + +msgid "session data" +msgstr "სესიის მონაცემები" + +msgid "expire date" +msgstr "ამოწურვის თარიღი" + +msgid "session" +msgstr "სესია" + +msgid "sessions" +msgstr "სესიები" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6f22bc4228e386bd346baa8cf2c316f73a88e39c GIT binary patch literal 743 zcmYk2zi-n(6vq!JKV(2cof(d;Rduml0cjnAP)jRS5D^u_{$jtl*Vt!scP2^y23FV@ z5MpKxD_a*vCWM6e16Ub(7dH)0`uKbI-uJz`^Uu|lw~XQ{ahr&V>%<$v#f-Q{d?8%^ zE8)D~h#SOr!sUMx&i99Se}S>Tq#p6^B4am6KajfmXVP1wGtyPkQ&Q*qK}v1&*(;zx_&(RoJD#LJ6NsT-Oi_A31g}Nl1Z$>y>tPShy@)#2<4pQ+FwVM?2 z^cYlDdWTq*+KQgZWGZ&*%!s&*xYvIci(QRi$txbyX%XKH!h0eJMcC$H7zOQ(APfRB zibH%Y-OQ!0Ey6$q_nq(V_C`SAJq2S$tU;L^Y^fvOtAEWtp-TA<=C8nD!5<7TA3=ge zyZtCDK<2HaEFMy)%4*0^#0W*ipTJ<6BVRkRwu*dzJRY~K8!Lx6aSeX+u!ZDj-Tnv$ z{<_yY= z;#&i0&#xJAI?3zjwT4{mm%1^toJz&u1d9`{ exXnNVvrWM=X>d3Km!CT=vtU5i*8ZPbPWcBgn$H*j literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 0000000..b3aa45f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-10-06 11:49+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Tiɣimiyin" + +msgid "session key" +msgstr "tasarutt n tɣimit" + +msgid "session data" +msgstr "isefka n tɣimit" + +msgid "expire date" +msgstr "azemz n tgara" + +msgid "session" +msgstr "tiɣimit" + +msgid "sessions" +msgstr "tiɣimiyin" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f3b0c1b2389c3ef608ed4997bc48c9245e959b84 GIT binary patch literal 810 zcmZ8dzi-n(7(Jl;kYVc51*ta{s*7y|q;*JzT3V@sh^QF$YjSa1JGOOqY0^&pF&3!{ zWa-4jnt_Vabm9*{cO4jE;16JBgYS|iQTe3jci;2--hK9u$%*#}>L%bWzz5t0yakv# z0o($70T}%&z<9p_?f||6jQ$H?e7^xlR}lIGJPCMr6`}jUAAybk9C#Y|C-4;TUtr^# zx`q&p^|L2{O8Od=*6=J)nWr19 zBFSo%ykXoVdAPbklOVO$Se9~0N+JlWWU(0t;-?_Y9SZ$Y0#iyoU5db1qeujCJh+z8Ets@Io*aKJX4o4^K84- zYUQL!4{NM#2JFH24Jp2uwxh_tXO&h<%i}-c<{WD&O(aWT!>tTHRkF6UvzUfS0axmj z3nq)N{S`7d_L;kCjFaW0lEUVJhv(KqIoi_0QDl|lCZ{o3NqIwfILZ30D7pnaI2N6P zh13UitatUUI?;!!r@DFvsWXsv)MwpMXS#zyJ3K$qd#bB?dLQe3)rIyz@96^sbED}? c4OXA}A;;, 2015 +# yun_man_ger , 2011 +# Zhazira , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Baurzhan Muftakhidinov \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Сессиялар" + +msgid "session key" +msgstr "сессия кілті" + +msgid "session data" +msgstr "сессия деректері" + +msgid "expire date" +msgstr "мерзімі аяқталу уақыты" + +msgid "session" +msgstr "сессия" + +msgid "sessions" +msgstr "сессиялар" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af28c29bfd375beac366ee8addec4f2286cdfe7c GIT binary patch literal 929 zcmbVHO>fgc5H(OfWH=#l?;q~|v?elzp-&)KDS7Q_j_c|Z+t8t@ok;xoY1 zUjQcoUjb(ThXB+61vmxx4S0FPvi<^J03=5(YXx`@_%85I-~jmCv2ni(4D#YGq(vN` z@X~}0!Pq$HFpD@vEh4EUs1Q-grfiyIR`lr3G#6Hbr(N2Vc&mjUP;Q2N)anuzruH_? zQZ8{_gi#CM?1usesgLZ&y#TLsN+f9UEx6{R%dU47yB_w+$n$)+yzF|e3qrh2A4O*8 zTvx{K8ur$Zx8h%Mmt6?EMufxxCrrddrrbxj31g8!H5#>OjIMzjC~w3?S&CRYy$&-h z?30k=we68%y*o@U{I1~U(}|2A*~@c$}m|>0~j9SOqmZgbOOG_k&HmI@g(7ZOZWmYo@J;g+5w+7|EGQAN3Nu z5%)QX@n*^s;Ukt6rKoxpG)}8-#kREiq}8ETxmNFW{zR(-t#)<(T&q`F?dg03ijP`- z(D{p*;@|Gb, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "លេខសំគាល់​រយះពេល​ពិនិត្យ​ចូល" + +msgid "session data" +msgstr "ទិន្នន័យរយះពេល​ពិនិត្យ​ចូល" + +msgid "expire date" +msgstr "ហួសពេលកំណត់" + +msgid "session" +msgstr "រយះពេល​ពិនិត្យ​ចូល" + +msgid "sessions" +msgstr "រយះពេល​ពិនិត្យ​ចូល" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1240807f06b7d3146accdd6e3154d9bbffbfa82a GIT binary patch literal 814 zcmaKn&ubGw6vs!cKUf7p@K$7wN|@}fsA)Hih_!`kf}uq3V|KFLW;3(QOqvuts33X~ zPr;j~qVXa!F}T?bXMx8+7Gof* zKLDqJDR2(>0%ZN~z!~5N@cI}+zd*}?IF8Uo(6^vj{TZ|b`Wy5T==l=}fjxg0(mYPi zbZMrUfV~JdOk>G#NHs%>DHRJo*Q`m8iZ0uq=L$8Y*kx@^wnFld$!sXV;V$KoaJE@0 zq$Uj&#UZ)fj}&Q%06We5EwU~d)!-#};I#l>_5AC^^NC-w;^>;i~-t@&!r zGiyeLz3@)$, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "ಅಧಿವೇಶನದ ಕೀಲಿಕೈ" + +msgid "session data" +msgstr "ಅಧಿವೇಶನದ ದತ್ತಾಂಶ" + +msgid "expire date" +msgstr "ಅವಧಿಮೀರುವ ದಿನಾಂಕ" + +msgid "session" +msgstr "ಅಧಿವೇಶನ" + +msgid "sessions" +msgstr "ಅಧಿವೇಶನಗಳು" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..144d87c19142f2a13f50df615ee9b1163dca53ca GIT binary patch literal 700 zcmY+9y>AmS7{(2h4;`>DGk645&e?pWbqGR)R;nN(DhIo{b1&E2*(ci}=|}}q2i8gm zW$1teVn-?~e*hyR3nQsm8F_t|5AjMrJ@(`0eQp1|vT}%^&I4D02)GEm1$-R?7l5yT z_rC!?`yIFh`~bZF3-Gx=z`-em{(_zZUY)LU2cUj`2znWG0vdpRp7~!up{<&|0_y8* zEeMXP^8IIKYxGoFn`vc{9G97qI1x@FTbpzBrdVtSa&Nx2sAu%9j2+oZ$a87@B#x6^ zp;8@e%TgOhx;D)c@?e-+5^0Wu-jj%Qj1&&Ce6s&xe*O=z C4#{W$ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 0000000..74c622c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Chr0m3 , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Chr0m3 \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "세션" + +msgid "session key" +msgstr "세션 키" + +msgid "session data" +msgstr "세션 날짜" + +msgid "expire date" +msgstr "유효날짜" + +msgid "session" +msgstr "세션" + +msgid "sessions" +msgstr "세션" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 0000000..e7c83d4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bfd37fbd0e5a6811aa2b1959ffa1211402d36275 GIT binary patch literal 786 zcmYk4%We}f6ow6yiw4AkH4C$#YE(I6hf7+gQxLsKl^PM1fxXGN6Hh1h$aY8~^%27f|T`00r(h=<6kf{(uMW^JRo?gMS0R2L2N~%>BCP{{;_RbOj+8tMfJR z5LX*RfYcG@0c+xgbWR!VkepS@N}LHVk!zX@4^6Qw&g6WNJ2bGSkV8+7GV)5=uoK5w zA#`q{6ImJSN#ErvBhMzeBdOsy8az+Qo|VD_OZMSw9Cs*tL?|Pyiy7mzyGa?P0Fo2= zMuk0BT$j*o!nQGc%pcNC3K1O(=SgaXcBSyfa@>d0I=nAbInM;%8He&|)|Bm`8Slb~ z&L<+5B$Z;!@v-uwiO@=DyfN~=;&D8kPTM~0sZQlA48_f@7FJ&D5SKn~Mg61x!Rr33 zO`|=dz0`27c?B2ra^~Zz6iWB-a3rjgK6#lQlC2dNzI7@sInYCsDV=k?^;-GmNjWZk zG$NzNg&K?H8&F046vFC%Jt(X=gC8B9Mm_ltvGdVP literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 0000000..5307182 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Matas Dailyda , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sessions" +msgstr "Sesijos" + +msgid "session key" +msgstr "sesijos raktas" + +msgid "session data" +msgstr "sesijos data" + +msgid "expire date" +msgstr "galiojima data" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesijos" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..07f5308efe96c7e15c43448270ea1f576341822f GIT binary patch literal 753 zcmYL`yKfXR5XKFJhZYKiC@CgIqC}Bz?LfH1mnDdhNRe{l6c&2lowM<==Uv&pN9gG3 z5Ptv_9kkG*qe7xYR5Vmnw3LkRInqzx%=jBWj_t|PCJ5TB51$Y&(< zzaYW;9l3%0KtlgF5`2G=4;KjehZ=nEFA{Pa^&{#P)Ddc!`-XZG^(SiZ{XxaCalV8a z;_^fYE{!A1Uz+CRsd7#i#t}6vwN=oTUJ*BG&NMXTym+C`XSpK{TXa;*)1x+hu58#z zK)WMNRzxSNEUc$>m+3Zr)XN-A3jtB%NlN#vk{-SEF`g!1lkqLeIOSE~T(If}Cl8rPJ{^zqe!L#lkLm}DC-Vx6 z_6y^c!K<8?_$IH0J}z^qO$}OS(mLgnXXzo`UiiXUr^?a;(<<89WCFIE+Rv{kAn!+w zyk})j4-4CM0!%qBU2?YulQdZ~E1V?>ht*XGDO*lBhdp3`c34g@*#nNn=6Wp(zpXpc m5&g2MboTX~G^1B8d~dJo!l&ZmRK{IBFQj+*=uI|XCI0~yfy+|> literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 0000000..45fdde5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: peterisb \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Sessions" +msgstr "Sesijas" + +msgid "session key" +msgstr "sesijas atslēga" + +msgid "session data" +msgstr "sesijas dati" + +msgid "expire date" +msgstr "izbeigšanās datums" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesijas" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bdf114e383bab8af86bff1844d6fc57ac8cb67b9 GIT binary patch literal 816 zcmYL_&ubGw6vtPsKUnqR#f#t*Y-uTz-Hn#SjZv|-P-!sK)%%#8Y^T}GE;|#G9@Bze zyb9vY{~(CLm}&+80GYjb6v4B2_2}Ddn>_gJcix-tym_-fFU`F+FwP=Z5Dz(zyh5@V zA?J`!NLK%bWZv({1>^^k)qf+I?=SN4gkk(cHIczd!?=!mfSUP#p zkBY}8z2{J~IGu}u)=8YfFWT~W%%tRzkOu3;JYnEd#SEDjk2NdOY0_f5$7^ZSlW2!E z6xr~}Q$Xgi(cF@&Iphp=diR#CC{N z0>^Rf(z5N?HX6wmd(N|-Ghd0=w@C2@IAwR`=CX}pZc?d;mrx-?s-nb&hg1kIVUuy6 zg>W0E!Sr4@Nef&wqdRy;1RWYM;xXEGp++0bj|8Uz7Ppm(UCZiry9Jds_*u&@Am zYQr_moh7&nHn`waOhdoZ!?dqQdSvJidXVm=`}#BJFM0ral=jm-J=9~Yy~n+`dT5|` n;!oe`!7S, 2011 +# Vasil Vangelovski , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Sessions" +msgstr "Сесии" + +msgid "session key" +msgstr "сесиски клуч" + +msgid "session data" +msgstr "сесиски податоци" + +msgid "expire date" +msgstr "датум на истекување" + +msgid "session" +msgstr "сесија" + +msgid "sessions" +msgstr "сесии" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9b64ac56a307c84115346a283ba8c3b19cb84ac7 GIT binary patch literal 780 zcmZvXPjAyO6u<+FKMI_7LvS!$Xf?S>CRjI@BE;CFp;lB=;cgl?^GNI{c4;SZ7#z6m zScxMCB*qEET)_o;=L75r7N3BRz)RY$655k~`T04|&(FUW7lsbR1>ic+04@VBfjka@ zJpTw>1V+FW;5(4-{{$`p$H3b&j`JIQ3mBYroJH_E@J;X$_$v4qd=2~;4CTeW=fHWK zpU7F5Iv12pf(=rhF%(kG9L1F4Qp}uh(v##l+ncSG)5_#7>u9_c;-@Uj4-pjZQV~ga zo24?-xTzu@;s?D*;kG2mZ9Q(|^^8#swfG_2M$ob!+`)c;gDMIF;#Zga!1tjLZ?hLX z?>VolVt)+>YbaPDxBVp_!fjBcaXX_z#Z=3Tphr{)u26&Vkj3aOOatltxJWBpbmcub zBcdLS7;ZC~5Y(hG-2)O-+R-{Cp4ad9D?0DVyKGSD$i$nxYNmMFz)NDU>^8TW8}s)E z72jQ#LNft#?WOQQ%?8>_W6DJhb#`c`n65u*Z{pQ?U4B=WWq3n$WXMHC(CRa;PX;9@ ziQQJ*%V>-@WtJ#{L|UY(zFb3-WxXWOjXDa-HP^9bXw466z7*e)H6N@Qqmni6?P%Yc yPx-=(%TV{tj^0@F)tW;)I{34HaLN|420Dz3?`LaXpI$PA&j0;+Rg7^oZTt^NqYOm= literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 0000000..e91b72a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "സെഷന്‍ കീ" + +msgid "session data" +msgstr "സെഷന്‍ വിവരം" + +msgid "expire date" +msgstr "കാലാവധി (തീയതി)" + +msgid "session" +msgstr "സെഷന്‍" + +msgid "sessions" +msgstr "സെഷനുകള്‍" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f214362f9d30a9eaf94c531b6b5c3982dea3a7db GIT binary patch literal 784 zcmYL`J!}&(6vwYnK6D@k1{N61)~a&uuBaq91R+W*RU#rP2fLedFW27LC)**(R;a>+ z1PePGVoFdmfGQSNBy^Wbj4W&{tc*N2x#USd|Lv#0-}A?>tBda}hzr0Czy~e?uK^RE zfs4Qwz~sLH#`^=f4EzL4{x@KJe}NARmh}(x3h@4nWnBjyfSP^ZL9cJd9wQ#1p1eB)GCzH;p7i0oBY>lVqVLNoR|F)+^@9YDlrini_8f z_!*O?5<$Tp<)N^*St_K)brnVde$WmT_60$9#n7_#n zisdjHqPua4^8MBh?NNC@OlTCBnj*OeC3x7TA;UhS2|;xM=Z_=G(Nat6lsHbO(n2oG#WG49wc%nYa`;a?=>8lJLsrcJM(aFc`$dHX-Jf5ZVm*YWpocG6r L@gP4a(nW*+6(;x? literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 0000000..4ff7c35 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarkhuu Bataa, 2014 +# Jannis Leidel , 2011 +# Анхбаяр Анхаа , 2011,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-07-09 06:53+0000\n" +"Last-Translator: Анхбаяр Анхаа \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Session-ууд" + +msgid "session key" +msgstr "session түлхүүр" + +msgid "session data" +msgstr "session өгөгдөл" + +msgid "expire date" +msgstr "дуусах хугацаа" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "session-ууд" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..73d049a369170c8dfabc9d72b0248dcb0122c371 GIT binary patch literal 872 zcmZ`!J&O}T7+&@KV6_tLEJm+ySXYMve^v(+&7z}3=EXQPSvvI%JnKel_7Gfh} zp@krVr67nlcYZbg082ZC!5?5@W9c)y=3;U8!ZXkN@w^}NeOAL-V*W7`3vs63$w2>A!#>fiHMj?bD!KAu!vldT#`#g z5|H!5B2J6sVi2=1s`b+N0$P%wU;(FH&SIY|7kSJDC#MEdX1?Q$Mx&ZE1H%nIHXTm& zr71=K+MRgfoVMF*?bX@my_##Uq>1DSj+$ino#bQbWDyIK2I&o0F1T#o=(gzMOlNj& z@SLtDy|f=Dfln51hjRN&pTrZp6BRj&Xe-TQ;gcjQL(%jaq;i{X!?v_iT7A;$wN_iD z59hg7&$RkjC82mx7Cvb8xGcb_q;Ir(q7_2CZ?)Rg>b_Q=wR*Sn)Sa_hz0~Snxek|L W7(yIi{M{OG57yz(&D|9Lo&Oi+!#pzp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po new file mode 100644 index 0000000..7457874 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/my/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Yhal Htet Aung , 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:50+0000\n" +"Last-Translator: Yhal Htet Aung \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "ကြားကာလများ" + +msgid "session key" +msgstr "ကြားကာလသော့" + +msgid "session data" +msgstr "ကြားကာလအချက်အလက်" + +msgid "expire date" +msgstr "သက်တမ်းကုန်နေ့စွဲ" + +msgid "session" +msgstr "ကြားကာလ" + +msgid "sessions" +msgstr "ကြားကာလများ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..78c5727fc7f8ccd5eccbc5be896bdd868a51641d GIT binary patch literal 717 zcmYL`zi$&U6vqveA3B(r8O+wIa_(FKX&r*9mR2fiASwsDlY6Ctc*P0CC!sQ_w{@J`q@7JzQ6XKVBAI?ASrSed546UA$O3kNT`2D zg7+tK5BY_J`X40t{vwyx2>FM43;B4xp1(w0!~8R9@O@d-zo7=-4^&)M^$xxeH)|m{ zRYmaKSd7VQa84QR2uw?5fo9SJadmO2p(wACAzUoSj&!X#gT7}+8G8#hbP_Z>lR7ui z36#cq)^WMY*xopIEH#2g-B&5ww;(-w*>l`Y(5-|&W(jA!NjVoub2H&df<|@%=PLAE z`I;=*VSI=3C*o1EnP5c6(s`Czsa+wxv4XykS}RA7L1j?Tr+6AncZ(`*C_OOGaE;E# zG6$A|90~f;*a_rHYPx5Jqxq+TuAh2eia4H3CJi5Ys{u?KeKU&d+byM7G>UaE-iSI! zorBeX;Eg2OH`;^7^Iep9Q4doemxWZiMf<1HI`Hi`=^@)*`NCcUueRjh`VDRT0hq0XYiB=l}o! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po new file mode 100644 index 0000000..7a6d5d0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nb/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# jensadne , 2014 +# Jon , 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Økter" + +msgid "session key" +msgstr "øktnøkkel" + +msgid "session data" +msgstr "øktdata" + +msgid "expire date" +msgstr "utløpsdato" + +msgid "session" +msgstr "økt" + +msgid "sessions" +msgstr "økter" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..93ff6787e08edbf73b2addb64cb7cd77b0df8f22 GIT binary patch literal 802 zcmZ8dziSjh7+p2~U`-|1S&UsmnA_c;Ub5$jcqS0=^hj3w@%GDRlfBtxX3o2mDa1l6 zK|!%|f>x47NE!vf*22P42K)okTKdiIU5@jEH*dZ-?|U=5zc0k-w@XO12K#Eg|PY`g!LUG-kfrrzsQ#nFHcvwACay9`>6jp;$vj%n?2(= zI96uQAlo`yk%N}9&f$u-sy0B%H0RQRVUY?TF;n2kN*uEl*-5hlyW_odIwIeOuA*x( zeFVZLg(Ti)Jjva4C~~1_TPA5t@AMN%qdX*T=RrhU0+>QCy^FVnWYG_!uwF>+LxBTiZcC{m^t{1fP*XNE-GreX@T$)mQ#P9R zIC%4Jd#$}P`2j)AcUw7E!0}(t0pgEmaU7+epGe*gdBVVSvS^jow4eClv=^FNSV B4hR4M literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 0000000..c2b6e8c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Paras Nath Chaudhary , 2012 +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "अवधिहरु" + +msgid "session key" +msgstr "अवधि साँचो" + +msgid "session data" +msgstr "अवधि विवरण" + +msgid "expire date" +msgstr "खारेज मिति" + +msgid "session" +msgstr "अवधि" + +msgid "sessions" +msgstr "अवधिहरु" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eeffdac2e5938abb3a5b074a9ff3375b6f375b9a GIT binary patch literal 733 zcmY+CJ#*7Q5QYVWj}adQHN~Y%#&gzP25@qY8HRk!WCjnOSkNERTE0ZS)7+hG=ReTW z(ZL^}3oQ*D9h5Zu09s1+EIS@n^US-udhc}7>es`K_YuZz?xKM;XOMY%lG8U}!%l+a zXHpj?K84CyPy4P=Iek$Vj;2PCc!!2}C%K~T$aw5oK?Xxl28hc-fB$>@-?f?8q^MWfWmx~i!CfjlUq<^&j z6uiyi1EW1?JmN)#@9JUhld6s1~K`?Q}_#_O>+H>=C}*jhhjJi>6>pV=5eGJ!vMmoHP`8O#y#` O#o)n}PRrC+wp~+PM literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 0000000..60698e5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Sander Steffann , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sander Steffann \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessies" + +msgid "session key" +msgstr "sessiesleutel" + +msgid "session data" +msgstr "sessiegegevens" + +msgid "expire date" +msgstr "verloopdatum" + +msgid "session" +msgstr "sessie" + +msgid "sessions" +msgstr "sessies" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..eb15625a93f4804bc10701e370867c56f54879cc GIT binary patch literal 695 zcmYL`J#Q015QYy3A36{PHO0~;iq>}<0Z!I9iU^4mWCtrc=ojDkvi5oQw7bT(M8OZB zL)1`0Lx+@xDjh$768;LaK06-i(YrHxclKlcKG^siQQRUP5*^|$@tz3rjR^U7;x_S< zxJUdVLj5;!hxkK$y%t6PNJIU@^}6Rr(vW{5y-)guH28mzl6`UR4bl)dYl$|N8iZ_h zz^u|1Sgt%o4xG~lR~m}yDjC6iwRTa@nj!Q(KgszUuwj#A`A}hD;xnj>^}Oo}o%83D z!tu;V7WZCd{Lq5(izX97rp@hCq$wHs8NAb>=i1lg=^ht*Ogxp3 z)9sWZ?kMMZW)-?pd1EDesSvee9nd+H>>1sL(t~o5HZ%^*KJCF`q6**{sIg?H#!jKo z3fbu#jddfodG38BlVm!bHhk!<2QX{&%{ZxFw~}(%C_zlN;_gZJX#EeOk;aDxJs{n0 zUeQB6%zRRnN@I)l&y{uH+pn`@zPt8?vj$-K5%x{4v5;){t@c+JmJBiOl@qH`|MEtyUaOe0h0MIhvpeQybP(B?+a)P{SH8FGeFMmkwp4|908G ALI3~& literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po new file mode 100644 index 0000000..d9ac000 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/nn/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "sesjonsnøkkel" + +msgid "session data" +msgstr "sesjonsdata" + +msgid "expire date" +msgstr "utløpsdato" + +msgid "session" +msgstr "sesjon" + +msgid "sessions" +msgstr "sesjonar" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4ab9e905a6a3b8834f66309052582a08c8d75f21 GIT binary patch literal 732 zcmZ9H&ui2`6vw01A4Kt>M?H+UmNJ{9PNy;ZQFVEqFGAz{Iz{wu!OA6@mqC*OIK@0<7DuRC+O191(w4>W zz;)mZxCNX8_WnC?1NaHNyW}{(LGJ?lmmS9ieFJ(AG@s~4(A$vz00sM~?-fuRSI6Sa zP1Fk5#=!;|R}96}Fh?`3xfD~im-HgpV+Yf-cG^nrvdG}g7{6f377-NhQjth^n`KfN z+|mh;@snPnaVQCL+gl-CQ;Zt$;-}D!pd~+8#(sc>#&U{tu zui#(>1rNz`ZPABtn^YSdDk^kJjZ_3Zqe5_vnvBORMUP+_NFS%8w8BM4u0oASdNg4; zWVB1rme$Ph2+i*plM&DB_xlxNU*sJ&s6?{sjdz+#Iw|+0_7>dMW@~-6eNge;H7N`e zFx5c@>lrpMUY1fW>L}Ww3VJo3ha0#y^Vwb8$MF69*Rl8l bmhuQpN8o-n%>VyaoEBeg`7r, 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "сессийы амонӕн" + +msgid "session data" +msgstr "сессийы рардтӕ" + +msgid "expire date" +msgstr "фӕуды афон" + +msgid "session" +msgstr "сесси" + +msgid "sessions" +msgstr "сесситӕ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9c4c9da6ec874d1ca3b0d9c2a44c58686ddefbe0 GIT binary patch literal 771 zcmZ{g&ubGw6vtPsKUh8WCJ2t663S$Ei<)*~M64}T5?spaeVUzYCvIkznTbikL%oRq zKrbSwATl{9UIY*RxC>rA>ih}*3BJvb=29Pg_WRzO_hV*%FE1T>U}u0!KnpkzJON6x zKpBsLv%n|d0`L_m^FM%dz%StS3D5fjdJ#A{>3PebFF-GYz6ZSu`g4~53kv0vy{AA+ zJ3SR|X{Mz>+0@vm;EJJ?8s=%HHJ4(pWs)8RkJ$d)*Iuk-k97>*PVqyg$|i!+9u=AN zcUU2n!EK%K6yF(S8Yhw&SjEecfF0*`T1HLDg?> zw>KC6A*zM`h7^VgxZi#O4>fFLf+D9}G*D-cD$PvuL9&I{7Io#WE>n0@bY#j!M$p|0Rtic literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po new file mode 100644 index 0000000..3895f30 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pa/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "ਸ਼ੈਸ਼ਨ ਕੁੰਜੀ" + +msgid "session data" +msgstr "ਸ਼ੈਸ਼ਨ ਡਾਟਾ" + +msgid "expire date" +msgstr "ਮਿਆਦ ਮਿਤੀ" + +msgid "session" +msgstr "ਸ਼ੈਸ਼ਨ" + +msgid "sessions" +msgstr "ਸ਼ੈਸ਼ਨ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e84b164545a0b46a23103576e4f13e4ece2d0d1d GIT binary patch literal 869 zcmYjPO>Yx15M7{rXyL?(1BXF~Dxq>>r-_m}*%Y<3qJoO3UAQ8%aW}i!*sHZelBz#} zD+k0Mfh&S5M~+U$55yhBPlT)gMmXIc#N(@;_ZRs(;^8&VyN6sxcIQ20ANd)wn>$_B-ymPXv-93S zxNv$GXg7}=_(jqUlJSimfg_WLJ6j$tu;_@(*vsG@qUZGPNS#s1TuVvw! zIP_DYV(p*ETo;xcn>gu{y>VCC1wDnfweiWRwt85#X8UAOinA29#t2&T2Z!~uI5>_>>nQ; zAFS`sD%9WC%1VX*HOujWR!%J{MWWge4Mbt24PJ$Zq_x($U1zc&2P)G2M8zChZxeg@ zmmKoU?`7jcWaLm6Bf~-E^P>ssZEU(uP*Op_U>7KGD5*z`c7qyhZh}iYLA~tqd7XAx z4K6O`4ccYc*#(9}>H*HLMBRX{hgsR_m!^$%eP>w|x&^S}HyF llwdN8#rIDt`SvkN1mJ5+6ZfQ2fo&z1g<&?1&i`vl?;llX;6MNX literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 0000000..b72de94 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Mattia Procopio , 2014 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tomasz Kajtoch \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Sesje" + +msgid "session key" +msgstr "klucz sesji" + +msgid "session data" +msgstr "dane sesji" + +msgid "expire date" +msgstr "data wygaśnięcia sesji" + +msgid "session" +msgstr "sesja" + +msgid "sessions" +msgstr "sesje" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb50e3a6b0f54818b40b7dc4a0126bd3df932b07 GIT binary patch literal 738 zcmYLHJ#Q015M3aA=%7H*QVd<9Xnl8vC}xcjA|z5!EUa+QFTU|*lk@IrcO5(bfeMKN zQBqJ+A)v(#6(tf44L^XElG*duNblav?3>xSoBMrZ?F}QlOt?kJ2v-TO2*JJ(t`NQw zLjD^eXnzo{5q=Uv{tqGO{u17vW9;8Netn*?o8-SE4s{=iuM>Zs^LOG<_luayYRwvP zu!}QdbX40VdS00O>=`P80}HhU}qJ*p~s1jt5Pc6hW?SX4t?i&w#Qp5UASw2mhbAm$(1eyv|cK| zoK!&Nqh2|(vgCWl4xIp9)uHP&+c0xG>l$u%Al+z3^XuS|N9uhR%Y4{12iTWV4`461;&A0#n literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..69a3fa0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessões" + +msgid "session key" +msgstr "chave da sessão" + +msgid "session data" +msgstr "dados da sessão" + +msgid "expire date" +msgstr "data de expiração" + +msgid "session" +msgstr "sessão" + +msgid "sessions" +msgstr "sessões" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e4e0da1d045ca973789650f1da85e38c86e4dc15 GIT binary patch literal 757 zcmY*XJ8u&~5MCfWbWk8@DWcGt1PZ=mHD zAVh=ckf4n_3Q8Iz8d@Y;N@mY5G17P6%{H_*l&azgzp6J|3&a|e+VBgF!pz0zq`oTZPGsy`@D1Fo5Wui{Dau%{U)ZgDrSS& z%jG#SI;!LfeJ?F^_7ttnwXzJSWo{5s>5$pEbIIN*SH=mREp^NKMjzwQ@q?59A zNROq;bTGhD8^?P#%TwMRXO<^gK+u1Z@Lhw_Q7nH%-2^nFc#B6dk6RGOB5G|$aTHM? zAK+>3Yp&y3Ji5=DcOl*uTlY32lHjqljwePcTS%vk0I5=g6Fb5*R}volXFkkEGA|lK zJ=&o}m5pVFJV7}U(5Gp~*%&QCt!w0~yr@I%$hlI4;bbytINu^a#Hr5?=a*bku_zUm z?nQSH)`Q+bZ*Toa;zktgYUNPTq-P~v+2PcMWg&CbhT)Mk7G39Avd_2IalYLl8osB7 znr@N_*nXM2)zkv2UO~SY8(HvuZAMmrDl5}=nr)b?otlCji0kd3+V$)cTITl&DMGb# hIeR~QtE-iIPGzbsZ5;d~@D3X9)W3_BqdM?q{sH?Y)pY;> literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 0000000..ebe8e6a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Allisson Azevedo , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: andrewsmedina \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "Sessões" + +msgid "session key" +msgstr "chave da sessão" + +msgid "session data" +msgstr "dados da sessão" + +msgid "expire date" +msgstr "data de expiração" + +msgid "session" +msgstr "sessão" + +msgid "sessions" +msgstr "sessões" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49ade94cf2a0b6acb47cb86ddadc1c682cbeef27 GIT binary patch literal 776 zcmYLHy>AmS6gN;lbbJiV3}&FZQ{~*be57%>7ExNM5)n~)u$zl>akMDEDJkh~JccVc*W z#8sh#fvB``q-P5`Bu}S>C7EV8=)cIwt`XdUmpp^r7~V|iLy}NJ+n7?8v^Nr(Bw!>1 zaV&k$m9I^b4xt@PAF&6?MgkE$=hl(TaAiyGv|)I_-yU;?51klsC2T&$k4-JL>{5DC zOt>stxt?r81653UAxI|p1j_Y, 2011 +# Razvan Stefanescu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Razvan Stefanescu \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Sessions" +msgstr "Sesiuni" + +msgid "session key" +msgstr "cheie sesiune" + +msgid "session data" +msgstr "date sesiune" + +msgid "expire date" +msgstr "dată expirare" + +msgid "session" +msgstr "sesiune" + +msgid "sessions" +msgstr "sesiuni" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8934770af1c645d7502a0d684881e41fbf8a65fd GIT binary patch literal 913 zcmY*V%We}f6dj;EG_XQqfk4PCS~aSi*lD7+lT3;zDXK(76bAMtai>!f&&c-BRO+S( zsS6OS_yGQ(3o3=8vfu-dXTy>WAHbF+*LkW}I&*xF&po#1_szLa4%Ah^T|fZ14tNi+ zH2_=#d<9tj2f%uN0&W0)0j&N9V10i9^A{cGAF$oOcgbAk~0ln{0L6-P?69wCKS^Z zM5#wsmIx&TjJU;LM>ccjTft-v7nc!T^~$9s0_8qoO5;E>p}I`R(nIw$ zsRpX@q4J9R;v5Zp^DuKnl1CSINS>{;7f z;<{+Zok)ZpT74Pm=`}qhQ@7boCF|nNSoV~ML^5oZU#g(d(q9zwl=wbH3k%3D$$g(v zw2lY@JM=ZbIN7TDCA%C>kSZ;rgM-mXjh1pSLdPS%PwdvvSM$rW@wMDkhg>*ja%R, 2011 +# Алексей Борискин , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eugene MechanisM \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sessions" +msgstr "Сессии" + +msgid "session key" +msgstr "ключ сессии" + +msgid "session data" +msgstr "данные сессии" + +msgid "expire date" +msgstr "дата окончания" + +msgid "session" +msgstr "сессия" + +msgid "sessions" +msgstr "сессии" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..675f761319080af465399edfa87523859f79ec7d GIT binary patch literal 766 zcmYL^zi$&U6vqveA3BggtT1@0T2;>7rL7X2UO|*rszgMT9_%LPUYy+7C)@eO-vA?j zKo&N{zyci@NSTnB5F-ohOh}A8=jW3?_kHi{_nyx`Z?C;Z5Lbb_Knz?5UIH#Y0M~$z zfb%~CuJ;>o1NZ?r{}pU-!(M7gtSI&xPhxVQIkV799>HxCmxFMZ1R)74I1Fh}*$ToS zfJV~fec^Vl`YI&2N6OnctkT_`tpLJ%%#0{KuOCb{L!d@r&&I, 2011 +# Martin Tóth , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Sessions" +msgstr "Relácie" + +msgid "session key" +msgstr "kľúč relácie" + +msgid "session data" +msgstr "údaje relácie" + +msgid "expire date" +msgstr "dátum vypršania platnosti" + +msgid "session" +msgstr "relácia" + +msgid "sessions" +msgstr "relácie" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a44169f10d353301dc66d1b44e9322eedf8a30f5 GIT binary patch literal 770 zcmYLHJ8u&~5I!J0bWl-KOoNmtTHl@R$YG5E5fUj97FKf5FTTlT?ep$wcl`*;Paq}# z1sVzzN+=MbgaUd*M}x$y&yGj>Zswc$X7+LW{r1|Mfb2Tq4k0DnB)legdrP=Mct`O0 z4+O9MOt?k(M)3Kc1h4x|_4%tAc zT!#l(YU5bf<}zcC$GK&x<`DLtrEJHbaHM5VXf+P?IN4%x!jcvw36EQwaT3QQWCu8r ze&$NoV(~pzZ$Prmx0;(VS@={~$5JDdEripCL(j;O{`ekfLz$98xL^9jtJ=Dm()qQH(6C+A*O^o~hwYcr zU2K$tEy7+gHlkpA+Kem*RnDpHG}};xopp7WZm`oy;3337l8V-eCM(*2)6-?CNu@fK p8XN79-oyZd^D|+gH0W^X|NTG&rKWc, 2011 +# zejn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sessions" +msgstr "Seje" + +msgid "session key" +msgstr "ključ seje" + +msgid "session data" +msgstr "podatki seje" + +msgid "expire date" +msgstr "čas preteka" + +msgid "session" +msgstr "seja" + +msgid "sessions" +msgstr "seje" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5cab833c304469322bc4905039817747d54d7b3e GIT binary patch literal 724 zcmYL`&2AGh6on0x9}TeSnuXc5s+^e#R0$5Lprw^65fPPvy_30}xS6phw$miq*`0IZP67O`Z>h6iBFlIu*9TK-aV-A27Z`TByoh5Cx} z{&$qm{zTnD{X%*F56b8MqTXL2^Eep;08zjiq$FTq-=l_fAOr2(1>2gFw9lHL@n$q;7Cu_axj&!F$vamrqU@hfqf zo(Yxd-~>u-9P8Ljrfh$lS(a!{gYJuj9T*S}v+Nn}#%Vo@cUcs(xIyEXM~$5*jv@@Q z6F8TC&2_H9qDQR$fW}R}`*0`13Z4t=SYm{-xp3NWx(`;#A${Ci@JVTOW<&vYFp_0W zn`{qTR5lhFumnWG>C?O?loX0?4V)`^7)~aWn)55lQ<&EJx(KT~EsLQe~Vrd(y4W z$*CO$-F$3B&W^MxET^hmOl`Z~qSdgyrRe=OjkjBYe^vZ#K=9$_7t{_#Dhugf4PD}` VbTGeAf>w?s!`b}PYEqd%{sRU<#^eA1 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 0000000..3299ef0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sesione" + +msgid "session key" +msgstr "kyç sesioni" + +msgid "session data" +msgstr "të dhëna sesioni" + +msgid "expire date" +msgstr "datë skadimi" + +msgid "session" +msgstr "sesion" + +msgid "sessions" +msgstr "sesione" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d89316d8387964bef4ab57ce1ad308dfe732971a GIT binary patch literal 855 zcmY*Vzi$&U7&TCS=zs-@0mR@ARE;Vpc3afwk}IgCl?p^uZD4m3_j*lYN4C?XQU}^f zu&^Ql8~;Iss3-`5#2M6!;ggUtd0h&^6%ez*m8% zfxUhY7-GHIBf!4S_6b3>SLfghwtlS&V-h6|5}jtE1+H={km-v9_98!C)Wr6nH)vU_ zO;NFAsY)IT?I(q}y2)j%f)&wJ+LDrqlPZ~O#fFqsh=b*aWiqb?x8Nmr;j|D>Qg(|_ zM%WByETl6Nlu-&svLdz;KXd5Id*2krjD|EnL7{>N+*nf9T$(z!N{4t3`kKP`RgFuv zl~izXt*6|n4V0|X@hk*o+~TnyWx*REUKM&R;S!H;SlbM9xpupqwSH`}E;`wYYUKJ4 z8&LgUJZE$+6O@)p3&UT)vNV`i(h3Pz+it=et?1ZXv(6J)z?BWIjj++9@*>F(eg3R< zp~-@*sA?kP5a-ttdwk6h8yzgyTbkF&qS6f$V%h91O*B=&{WcnxHyMp0hR4RRZ|P{n z7`}}u20N^0qshTmF`D*mFF}ip;+>s-1UxhY83vijOd&w-jXOwp-C_FD9U%A4b<@3c z-+jXFJ+!;&9(, 2018 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-01-30 10:08+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sessions" +msgstr "Сесије" + +msgid "session key" +msgstr "кључ сесије" + +msgid "session data" +msgstr "подаци сесије" + +msgid "expire date" +msgstr "датум застаревања" + +msgid "session" +msgstr "сесија" + +msgid "sessions" +msgstr "сесије" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e3fd30761b3794ef4e0ca3dc0d5fdc94b08d76b9 GIT binary patch literal 787 zcmYLH%We}f6dj;EG?Y!(EG~;yi7IF85Sn(9DHWxaiV_i(z~0R`Q>PPqWIIiY@(V2a z2lxP%>{#&uEMd)#6-&hRBx$d7bnfw-`|!v=H`YD|821p55go)s#2n${6T<7yi2H~y zh;_tQgg^g|c!2nU_$Rc?cx(IYW%yX7{cD`J~=dkJM@y5I4y=cWzPs@gf)S&m^Qa5qZEzgR9s5m^TyXCbdRt-U^{Vx zZc~h~!>uEI!2z9izOx*PS#6-l(c*3^%9m{-Yc?Ac$4eDe!|qA<=;m**8VwJ% zazf#jR|Q_ziJ6OvoJ-Y$!8tcpxa4jBnC#y8{LG;+{q7HLvZn~Ww2gRL#_DSeVK2G4;4+EMQ(_0^|#((q|nLEDVN ze7-0_53OPi! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 0000000..2fedc6f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr%40latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "ključ sesije" + +msgid "session data" +msgstr "podaci sesije" + +msgid "expire date" +msgstr "datum zastarevanja" + +msgid "session" +msgstr "sesija" + +msgid "sessions" +msgstr "sesije" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b44d13a6b74ef78f8eee5ba1bfc8a405dd659f73 GIT binary patch literal 707 zcmYL`J8u**5XTLK*YYT+DNL6r@~s^Km-uuIA(4V|;*>1(W_PmZWY1pNzE?qqL_?dB zk^(*fX-Q8>Ny7)ArDS}Uy&LK0zdinsADZ8f*3JpWZR9bMA@`6^NR02u9pnOu`5#F1 z{zUF0zmS;!gGAq7pr7CME!;ueHW-$HutQd#<;l< zf?M;rh2xE@IXMRJwKbl=wAK!2p#l)UNH!XiYPmRrSu^*f@9Zh$fgKd=Ex34+q{XQ+ zrA>~Ywl1)qFLl9Qj7rZkD{0byov~d9DxjCW#M>m@;^G(6qjEOI!rlIC9n+CP}1WG z6xt8y`XGc_rs-rdX@yv?Phi^0?J!;ZppojTJoV#rBk3LV_EvutEuQRJ6TsjbW;K2$ zz%-, 2011 +# Jonathan Lindén, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jonathan Lindén\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Sessioner" + +msgid "session key" +msgstr "sessionsnyckel" + +msgid "session data" +msgstr "sessionsdata" + +msgid "expire date" +msgstr "utgångsdatum" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessioner" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3b4e3a4552449eaceeef54c6890b367e7df34a38 GIT binary patch literal 743 zcmYL`L2uJA6vqt=h5{1O&Kw@MO_Q6XFtu~(gczGNw2EpAyPL*My`^?!J4?IIfW!&- zA{;>C#2Inq2nRj@SB^ZV>H4H!{_nl~{cI<{HrCz~jCJH8k|6hxw}_9=$X(O5Q9FZ53_>gQLO0>h^If z3ih>fLgA_A1zyjInG1`YOVxwXgc~bd|8;UmyDOjHYb*>sP$Qj6l`-hPk?#7K3~Ut) z^V0B~9%?hS3{+8R~(jgIWF<*XsA}L%f|X2zzWMi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po new file mode 100644 index 0000000..f645ab4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/sw/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Machaku , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "Vipindi" + +msgid "session key" +msgstr "ufunguo wa kipindi" + +msgid "session data" +msgstr "data za kipindi" + +msgid "expire date" +msgstr "tarehe ya mwisho ya matumizi" + +msgid "session" +msgstr "kipindi" + +msgid "sessions" +msgstr "vipindi" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a81d60d04388b774130bf297d4731efcb9711f23 GIT binary patch literal 801 zcmZvX&u`N(6vqQ>fC8so;b4%EHcf8gY0xdD2r)Kks1?-|xSPh!yrp(zyR?%yzyWdM zM*jm2?2^DxZ~VCP2XJKhQ+Q6=_0lJO{PnZH?>+n9%F@_@xC-0`TEGq94PfI7VDnSp z8ZZHF0zUzJ{s*`Y`~^N;a-4I}O~71soE6Yh(7T{NK<|N`gWdvNzT!AwFXzIxjOD2= zP1Oq6t6-y)D~2L!n4_82T#A|6Lwb=Mvy<6gI~^sDSl8hF2)|^?76m9eq9T^=0ZXMa zxUFLz;U|Mw<4^|3?K}_hj$+h+7e9q*0ow4%ee4rV>WGlQudn;W_rZt{*lTWk&V6<4 zZ)38J$b(?hU-u#07S#raiVB@jBUON&Q6acSEyg33poj1pNFOIfiY9nZ zs=f}8NXt|=HyWtgHdh6@(?n#g;W|Y&F0x-mc2=&FBKurqzl$s{({Yi%E3&M}KO%dP tf2gjZ=)FD8zQRqBO~AF_s4TJFq3IbI7h9?k-=;(Jw+me56TjOI{{cI*9GL(B literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 0000000..21779b0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "அமர்வு குறியீ" + +msgid "session data" +msgstr "அமர்வு தகவல்" + +msgid "expire date" +msgstr "காலாவதியாகும் தேதி" + +msgid "session" +msgstr "அமர்வு" + +msgid "sessions" +msgstr "அமர்வுகள்" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7a2be871f237e003c9214e13b8ec87ab49cac0cc GIT binary patch literal 786 zcmZvX&ubGw6vtPsKUf7p@FqCkQp#j^i<)+0idb8yBpAx-eaud_+iqr;nb{@W%K`3bDK zV;aCV2|mbT$w|mGw-i?@PQ{d_$WD?SzBm0>R$HdqyrbzxNS|_PntT#&GZCfsCeKo- zX-h?MNFU^pqCx5tyZtzztCBMfFMWt@K3R0VJJj{4S0kS1yR`+^b6pteCf|+C%$cu7 z-DT=66Ys8n+g)%Gc9SVh1IdI+m`_IR)A+N-J1 zT;NiB8D6LPKs#B&Vo@iZEhZJ$jVHl6U7GpKt}d5!O?1*Q7LiYup2hm)mS%?CPIAc- zx}M6O@`=dCscJ0N$>g_D5#&~bc=L7JDvM!Rd@GADW$}WP#oKc9(j=qT, 2011 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "భాగము తాళంచెవి" + +msgid "session data" +msgstr "భాగము దత్తం" + +msgid "expire date" +msgstr "కాలం చెల్లు తేది." + +msgid "session" +msgstr "భాగము" + +msgid "sessions" +msgstr "భాగములు" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..462cce8c08deeee499ff105649e0d69d303acee6 GIT binary patch literal 814 zcmZvYzi$&U6vqveA3B)2f{=#}pvt*BL`ifZ6(Y1!1rbp>*xkgvyY^zAY=@*9LM%Wh z1VcxVDkKmCNJ!3#m>FS1miPl$85nrZCCxyd^trG7?(47L-Ot5^R|x7fZ~=&cv%o&! z$^d785#ah?0O$P%oCCfCuKx>gzTd#XF@*krE&?x(BXkk;5Y+9zf-ZsnnDqZn`sYs| z1jokN3!tt}mV&@Cu2b*?TUqy*Qkmciv0;%(hPzZVq{`-0U6USdcG=!^tx#Kv9oErg zqe~tz>5?Mc-Jv`Y-X<%A)TE`7tV?e86GdVXVXu8RCQZqx1~0h!y-V&iXp_FMF+x*4pepgq6T+3a%N4`SuFkE}VI7yI8$);zK1vx^<= H&x`#BKO!4} literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po new file mode 100644 index 0000000..9f7648f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-05-06 07:45+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "เซสชัน" + +msgid "session key" +msgstr "เซสชันคีย์" + +msgid "session data" +msgstr "ข้อมูลเซสชัน" + +msgid "expire date" +msgstr "วันหมดอายุ" + +msgid "session" +msgstr "เซสชัน" + +msgid "sessions" +msgstr "เซสชัน" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1323b82a1fab18a63a453ead5644c9acb6d57dcf GIT binary patch literal 726 zcmYL_F>ezw6vqt|3I|AtnZaYL%DKBhmDFh}L}{g>MvcnBZgMYoZZG!9_BH8uKx~!R z*w`4@Kx_y$#K_3P2ViC7`EqHV^wa;ncmMZn-|zb?7X)J!d4MFyZR9oL;}dcd`HcAf zSHydNB6pBqi0}VFyzeh^afOh7sJDieetfO-$>FR0%40~N>W-7Ba* zuFr+wr#k%nwI(Oe!CI-6B`_TE=D6rqtF z!9pniMmdIAYosUP{7nlfn(@$?a6K3t4EC0< zk6Tf&tCa(Vw>mHJc@AbSEDIr3kB)L-EV%xQWS@1HK7ZC24BJy9ol2E)+I=P6wM8Wp8nOII$S(moo?$LSLUsH64#_PR+9J$I=lR_ARTjck5)CnVVNp#(Bgr0%H Rzq_b}5;@wweQX+j`adLh$7BEi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000..a23226b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# BouRock, 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sessions" +msgstr "Oturumlar" + +msgid "session key" +msgstr "oturum anahtarı" + +msgid "session data" +msgstr "oturum verisi" + +msgid "expire date" +msgstr "bitiş tarihi" + +msgid "session" +msgstr "oturum" + +msgid "sessions" +msgstr "oturumlar" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e55219282ab8389b3c9edee1e97fa4ff570eb79b GIT binary patch literal 806 zcmZvX&ubGw6vs!cKUhUj5HBKgtdz;_ikfy~M64}T8Vq&yK4vG|t()0pW@6G?yjY?3 z=%E+y9>fR+YGN-QJj$#Ak6!!(diCg=tVxje!Dqkw9^d!oy2sR8QUEHOH>uf z2CFHu5|AfMm`NTEHYg7hYmKFeP^2QmC?NNmp(K9dVXOMkCyRnn1zvI=Ui0vE$Gu4$ zm$*gjx}H;a1O;B@H{j zXe{x+W?L!ynpIh;EKP5B3y!szaK$+6w3)(jinW!U#x&w3TwA9?GF5);FO&JH&%9M< zf-Lb`5=1=o@ch$AO_qci%BsdqL1VI, 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Эш сеанслары" + +msgid "session key" +msgstr "эш сеансы ачкычы" + +msgid "session data" +msgstr "эш сеансы бирелмәләре" + +msgid "expire date" +msgstr "искерү көне" + +msgid "session" +msgstr "эш сеансы" + +msgid "sessions" +msgstr "эш сеанслары" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "" + +msgid "session data" +msgstr "" + +msgid "expire date" +msgstr "" + +msgid "session" +msgstr "" + +msgid "sessions" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a2def308b9fd186c5160853cd72f8c61d3a49594 GIT binary patch literal 841 zcmYjNJ#P~+7&cHobY%jGiNOd_HB?UQv{k|-7Z9bDDiINtD+8NJ-0Sr&c68@73F<(* zuppR7XZ`^LNaZ6S@dMD^!h~2D7+D#4osXuk^xX6M@$+^E5)&f&T!T_3RmhE(2c~^G#r* zSAZcloIL|<>gMIa>i{uwEE85FT3lz$_&tpy8h|4(ST17Ul_5u}h{FpZb zwX1wwmVP~W%A0q*CilZ^T{SBZl3ts8g1CY=ZM+#o+?PI=cz#>!mYvIWI-RUGL;Wq$ zHJRM#SrZD!19I&km$9nr)z#?_U|DLdD5-^ni}hOYLM^&F*9zf`60UFaC>Gk;bk|66 z>N96;iHNMqx@!2+vvKi>ua7Tk<91-x!gj<%vZkVDY-8CPE@Nl0gh#D2FK;mFI1JCt zVbjuU4rBN>rWow7t~mM0R@qrH?Jz;hjN-k$Q3O0R0~rRHe5Pcf9irr8@+p0pK0m3Q*!~YS CHUYN) literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000..6a5aef7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Mykola Zamkovoi \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sessions" +msgstr "Сесії" + +msgid "session key" +msgstr "ключ сесії" + +msgid "session data" +msgstr "дані сесії" + +msgid "expire date" +msgstr "термін придатності" + +msgid "session" +msgstr "сесія" + +msgid "sessions" +msgstr "сесії" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..493b9c228c582a2a5b45d2f121495a44bb6dfe74 GIT binary patch literal 729 zcmZXPJ#Q015QYy3A3A8DprRNWlqg!?T?9B;V}uBa6l4o4a_AS|`f|y6@3gyz9f^`e zDO`bQXeo?cBtk$zB=`Y{8tvH<{1xWx*eMw4(L1wxXJ_Wmjk$Lg#wFwyQbDdFuaG=G zB6;0ME+b!&YshybfB%VGL4G4|&so-A)H{eeKY4$TdK2ppsMk?XQ1kv@sAwP0y?~m> z#feyRr_m+wt;Wz}T7!yB4x_~bd4c@qVHhlwDz zH+d3EO{yvgeeyUB6sgA)?Ao(BS(Th=^pYnyjlz=a-6O6?ydroWb&HFx=elSloBU;% z|9R#s5_g4oE8yLycilx7!>%x;NnJ9bBBoPZ`Iey@|iE6)#Q?_iAL;)BA~GRBGj`TDWuY_ zMX6*FS&wB)Q4q6uTXt~s)@1M|gvHiKD$4%36-;i#K^Gd*kA&t9YP82&Sky2BIeABM2!cmMzZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po new file mode 100644 index 0000000..62f6255 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/ur/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Mansoorulhaq Mansoor , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "کلید نشست" + +msgid "session data" +msgstr "نشست کا ڈیٹا" + +msgid "expire date" +msgstr "مدت ختم ھونے کی تاریخ" + +msgid "session" +msgstr "نشست" + +msgid "sessions" +msgstr "نشستیں" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9346a6c382af951824992dbee8d3482a1670aefe GIT binary patch literal 744 zcmYL`J#P~+7{?DNFFFtd5*vfJf-2|iB9zo26{56KBmz;nvb#C=;^xji{F3DI8Ca3n z82AE=W#t2OWP^ndz{<$uT+%$!@Ba4VzaQK8{C=?YDT25SJOWbSF7OcuaRJ-`z5^lu z0|?$r;2!W32>Cxi@cjk8T#KTApfT|IdgJ>F8uonyeF%C1dLQ%>H28jj!nUPn3pB*d zMj}{R#x3~XSdF81!dj`7jl{f?Mxcy45!oiW){x{^lZmL;V;c>PJ{Kd0`x$;OOsK?A zcFt9<<6}{2%`n8Rl%j|qS2TeD_rj+J;I%hFPwEI3_esN4KK+V z>YPe?V@JbBi*=ZZ_NvCBIk2%$7sqwIN3C?UNyDm WsN~y)FSP@sMC(;F;f36oLy`aEbI!E@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po new file mode 100644 index 0000000..47fa681 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/uz/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Nuruddin Iminokhunov , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 01:18+0000\n" +"Last-Translator: Nuruddin Iminokhunov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sessiyalar" + +msgid "session key" +msgstr "sessiya kaliti" + +msgid "session data" +msgstr "sessiya ma'lumotlari " + +msgid "expire date" +msgstr "tugash vaqti" + +msgid "session" +msgstr "sessiya" + +msgid "sessions" +msgstr "sessiyalar" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..69b82fd33a4128ce356ed31738d577305ea28117 GIT binary patch literal 679 zcmaixJ#Q2-5QY~B5G^!NQ@8|0zO@6<9ljhwghYyzgHyCzZ*C{MPIm2;?fa6D=+aRk zYM=vp8YD!KE-d%~JKd5(*>T1*TEo$%|qXz$b)X?W6D%#KIUPBFWy^(0;LW7{K z37FN&0?DL@$boap=!J$ud08C6e383oV9gH5(iI literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000..731d24c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +# Tran Van , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "" + +msgid "session key" +msgstr "session key" + +msgid "session data" +msgstr "session data" + +msgid "expire date" +msgstr "Ngày hết hạn" + +msgid "session" +msgstr "Phiên" + +msgid "sessions" +msgstr "session" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4d762f61043b83b5dae59a77c4ce5ff88ded5328 GIT binary patch literal 722 zcmYL_zi$&U6vq!JKXfoLGk9!OIp;$_T8ALi&`L!OMCD*bCg)t-UhI?YG%0@oEU+Mz zN{EPwg@J;E5J(6lRwPD779eUTRz{xhF3poZ`o8!4_4ALPXJ>Xih?BrMAOcPUj{p}R zfK$Ln!1ccZ&ifrW1N;D7{}|rmioEue*=YW`Ro}` z7sm_nU?~r`|5%xOx41DvN#pThCNxJev)nU9bE2-v4vS5`J;{yN(rSaZEnbcB9j@IZ zisB6>6Xmb-OlgaoCJ`}S>L&(AiXy*tGr|qcnFTMt2B%SUo`e@M32|6OVMs}Jo`i&e z5wG(t;bu;KRZJFfxQN0_^a7bD5dIo77Dt*%lQOF`Mc0{>!k{%SVxFSQa2qJErg>Qr zvZJoR9+~u6!g0h|kD^9bNNzZqbqSk8vt4U58U%yEpkm!*(c!~NTlIqCZ4*h$F~R-r z-Nubz&Tp=v; zVj&ZX7VZgqcw>t4v;0=t*DS>=O7{#!GRsR-4{NAM>!jv;zdt?O-y3=RUmlL1zZmbn cKiGXY=@m=koj2phugl(_y$1(RUQP`E0f#o#3;+NC literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 0000000..ee25859 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ronald White , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "会话" + +msgid "session key" +msgstr "会话密钥" + +msgid "session data" +msgstr "会话数据" + +msgid "expire date" +msgstr "过期时间" + +msgid "session" +msgstr "会话" + +msgid "sessions" +msgstr "会话" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sessions/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ad835229439f245b21807e1af47d5a89f469f3f9 GIT binary patch literal 733 zcmYL`J%|)B6vszBKN!Wr+9Ks0M|KiX_b%&-xZc5mi_1A`DRCw@le^huNV4vpm7Nw^ z`US#aVJm_t3RZ%xl~~%yEn3-H`m(dL`{0*Z=e z_)ZL^+gxQj+!UoY4tH%PQ+#=lSsZJI!rrwQcZ}c;y!Z<2#?To;&tXC_Z6Zn;X)Y5= z2pI9ExGR0nxvz=IDyFN5o@ZytGJy!Ma_ewxxUvOz+A!3~g@R$Aa3_}>T}YCoQE-!7 z%KBUujYRh^LXpY_JQFw;yzfh-5>}wan9CtoOK357u4GX(91a`K_m*2?D16j#uVBzulHF zcugfbl`3Os<&Jc-BQrGFE9?~m!wbBwP2V!4%1LV5w1ui^o3z6D^X@-, 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Chen Chun-Chia \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sessions" +msgstr "Sessions" + +msgid "session key" +msgstr "session 鍵值" + +msgid "session data" +msgstr "session 資料" + +msgid "expire date" +msgstr "到期日期" + +msgid "session" +msgstr "session" + +msgid "sessions" +msgstr "sessions" diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/__pycache__/clearsessions.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..414abaa8eb45145ec1f46d2f924d28a9535904e0 GIT binary patch literal 1000 zcmZWoO>fgc5S{f`LYkCTNWE}bA)(?!6R9^40z?&6rBXo30We6GqQjfB-lFG!T zWb1-sqOZ9znOJJvZ@o@5Kaypc2$tFdn+svKupZ%tgGGa2BFExGB#4T+c5Z|KJRIlO zy{^sm#Ze;Yf>X5?G|@Dnsgfd>3n~?5nc}G_uBeeTEjSj+wW0h=g?UCb*E*9z(>cG`5 z+&GZCkb7_oK;DZGJmbUp0MscELT&)^0P>!t*&f`(ljNfy@B#VHLuYpVa^AwETr4xe z>HcHAPnqOe>>H}rl~ubTr%>eoxQz#4Us-jP1siS8r}O#A+gUuF9iPmm(XeYiH&XFv zWHnN8r%(N0Ce2A%72MM1Y^s!0b)XI7O4a_Q$_x+P+S9x^t9!CCR?8@8Vg3MRmHGW? zV#;b#W!1rAofYgrcy1;vPsCDg9;p;YWsAw?lT6Sd$+8(dNn5|@NrP@vF|Mxa zV1+&^_y`B-AqF7#iA#3Lhz!Z~c4v@rTQoz@^y640C6D8J5O)T}{Vdr9BKoC-9ogEbP_yTH_blqR~6rY8j4^+F2|9!@n8D$Nvb9t=E+8 e*YvtG(JH9y*t-9`{Xf01*3$uo9cPE^xPJg_k^~9> literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/clearsessions.py b/env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/clearsessions.py new file mode 100644 index 0000000..ee08ac3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/management/commands/clearsessions.py @@ -0,0 +1,19 @@ +from importlib import import_module + +from django.conf import settings +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + help = ( + "Can be run as a cronjob or directly to clean out expired sessions " + "(only with the database backend at the moment)." + ) + + def handle(self, **options): + engine = import_module(settings.SESSION_ENGINE) + try: + engine.SessionStore.clear_expired() + except NotImplementedError: + self.stderr.write("Session engine '%s' doesn't support clearing " + "expired sessions.\n" % settings.SESSION_ENGINE) diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/middleware.py b/env/lib/python3.5/site-packages/django/contrib/sessions/middleware.py new file mode 100644 index 0000000..6795354 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/middleware.py @@ -0,0 +1,74 @@ +import time +from importlib import import_module + +from django.conf import settings +from django.contrib.sessions.backends.base import UpdateError +from django.core.exceptions import SuspiciousOperation +from django.utils.cache import patch_vary_headers +from django.utils.deprecation import MiddlewareMixin +from django.utils.http import http_date + + +class SessionMiddleware(MiddlewareMixin): + def __init__(self, get_response=None): + self.get_response = get_response + engine = import_module(settings.SESSION_ENGINE) + self.SessionStore = engine.SessionStore + + def process_request(self, request): + session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME) + request.session = self.SessionStore(session_key) + + def process_response(self, request, response): + """ + If request.session was modified, or if the configuration is to save the + session every time, save the changes and set a session cookie or delete + the session cookie if the session has been emptied. + """ + try: + accessed = request.session.accessed + modified = request.session.modified + empty = request.session.is_empty() + except AttributeError: + pass + else: + # First check if we need to delete this cookie. + # The session should be deleted only if the session is entirely empty + if settings.SESSION_COOKIE_NAME in request.COOKIES and empty: + response.delete_cookie( + settings.SESSION_COOKIE_NAME, + path=settings.SESSION_COOKIE_PATH, + domain=settings.SESSION_COOKIE_DOMAIN, + ) + else: + if accessed: + patch_vary_headers(response, ('Cookie',)) + if (modified or settings.SESSION_SAVE_EVERY_REQUEST) and not empty: + if request.session.get_expire_at_browser_close(): + max_age = None + expires = None + else: + max_age = request.session.get_expiry_age() + expires_time = time.time() + max_age + expires = http_date(expires_time) + # Save the session data and refresh the client cookie. + # Skip session save for 500 responses, refs #3881. + if response.status_code != 500: + try: + request.session.save() + except UpdateError: + raise SuspiciousOperation( + "The request's session was deleted before the " + "request completed. The user may have logged " + "out in a concurrent request, for example." + ) + response.set_cookie( + settings.SESSION_COOKIE_NAME, + request.session.session_key, max_age=max_age, + expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, + path=settings.SESSION_COOKIE_PATH, + secure=settings.SESSION_COOKIE_SECURE or None, + httponly=settings.SESSION_COOKIE_HTTPONLY or None, + samesite=settings.SESSION_COOKIE_SAMESITE, + ) + return response diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/0001_initial.py b/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/0001_initial.py new file mode 100644 index 0000000..39eaa6d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/0001_initial.py @@ -0,0 +1,30 @@ +import django.contrib.sessions.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Session', + fields=[ + ('session_key', models.CharField( + max_length=40, serialize=False, verbose_name='session key', primary_key=True + )), + ('session_data', models.TextField(verbose_name='session data')), + ('expire_date', models.DateTimeField(verbose_name='expire date', db_index=True)), + ], + options={ + 'abstract': False, + 'db_table': 'django_session', + 'verbose_name': 'session', + 'verbose_name_plural': 'sessions', + }, + managers=[ + ('objects', django.contrib.sessions.models.SessionManager()), + ], + ), + ] diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__init__.py b/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__pycache__/0001_initial.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a630b5871a22562ab8675fc244548dd3f8e0bc3 GIT binary patch literal 1049 zcmYjQ%Wl&^6uo}LaS|tmmWDzRf*n~jDcyk(R4OW~RzmG+gftpwrs=qTG2@`L+wwDf z16#ggwygRKthi&xY8}tyKF*x`nCtOy*gu%R|MuGh_zMpnALT<_`V(#(Uk6eE;?%MW zsSBA0#DmNS;)C;rd%%78i9jEO2T2ER(ciJ>&L*8ZB!Sb3Yxb?LMvI%^vW_tpByT*)xKLx%6(g*$w_;V0_NCuEZkRbUG zX~CX#Y*5_E2>346{=)Q5+M11@vrL%ona~{1K z*ag$mLP?g&8*xmcA40{27Ss~mwC7&oIWj1f%$T~iBq@bCRXZydr-F=l!tzBy*D*|YEs(8;>CrM>DwdjX z?bRmCSk4wgY0@p?M9eFFI@vHGt*fEb^eM%eSf&Eyh|=#%mfAWgB@q{;z{K*o6k561 z7BVs*08pJYwlTF`Rsn|XZ!p6 zZ?Va;!aJRo*UElr9b9?`x5y3ro)fr{v+HggLo0_k}dl7||yD(DeMHW0SDiM9$dz4?KPwPXGV_ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sessions/migrations/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c654e037bd76d772661a9faa7567647e41a9b24 GIT binary patch literal 160 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m#= latest_lastmod)): + latest_lastmod = lastmod + url_info = { + 'item': item, + 'location': loc, + 'lastmod': lastmod, + 'changefreq': self.__get('changefreq', item), + 'priority': str(priority if priority is not None else ''), + } + urls.append(url_info) + if all_items_lastmod and latest_lastmod: + self.latest_lastmod = latest_lastmod + return urls + + +class GenericSitemap(Sitemap): + priority = None + changefreq = None + + def __init__(self, info_dict, priority=None, changefreq=None, protocol=None): + self.queryset = info_dict['queryset'] + self.date_field = info_dict.get('date_field') + self.priority = priority + self.changefreq = changefreq + self.protocol = protocol + + def items(self): + # Make sure to return a clone; we don't want premature evaluation. + return self.queryset.filter() + + def lastmod(self, item): + if self.date_field is not None: + return getattr(item, self.date_field) + return None + + +default_app_config = 'django.contrib.sitemaps.apps.SiteMapsConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fd2c1e77d302e22e1c6339d0dff13507e3f6ac9 GIT binary patch literal 5187 zcmaJ_OLN=S6+R%qHzZNCMB8~Zn53%1Mxq+`kv7vLb`nS9PNH$GWSn46=uF1zch-?;!8TD1!i7x#J2eSGIT=c>1| z(z+hJ{iV?(`kIy=3;7#()xVL1_!$%vjSX@QGPqo!xI$x-T(c;f6k9Z|l3Odv7R7ZM zH^^-i8C*DYQvkqQ{uR28A|>E`=);uF{hVxtkQOQP|;bZVzMDDeUSoU3!e>%c#0U;fAi- zAaPlXxkBM4xmQ`(LBID67EXO5Z%$<_k{}HQ3Uw6HiAa#O{K-V&+fX9QqU4D4&53^$ zC4QDl6gF;;ClZ}yeELC}45Oo|6k)%TukNRJ#X}*L_{7hGYoW`8DJ@3KPkBgSSl3as8 zo&4wh-E2I8>dDUGG>XHWWaRxUyna914M%=*l+Hgvnq)FM+*O4}wd;9N5@nt@n4HQs zq^TO9$4?ypP^IxS6VAlXj-4!B)~SURdLe@+ z;_U1=VsJFrcCO7gZSZIuUmH08t20TnCB4~kqzZY{Bwz$NCs7n8_lDCr=7mc>D`_I>TX}ol ziUzmApyV!YXI?!Yl-DM{^vCL3FiFN~-qu43pm$NBYDlPV8(l+gAQv#K`C)zQcr`Ho zh75o)(s;m`s~1ZoApaYHL9^HW2FV9>+M&!OU;<6&ME8=n$jU6b-y%67!!XKrYti0a zwBP6UFA{@3*U7h1e@j`F!YU7eHl9e0!kU%<1DrdhfZ zicAD-M6;G&=imUVowb?hz;jz_OZ8iMyO@*5{F>X50%4Skl64%mY;w}zg!vm zM@UXDm9z@1!ZV&*FpC~wZ)mf4gJBOoJI*1i++!7>j;2x0Hy7xy2qOH*sEhJrqNK8fS2*72-Sa4rMltR_Md8uG5z=3yf^)9;3E=lFqTnmqh8h0|VyD{9*j5yBVgh=grx!M@5F z!o7-nCr{GF>4CgeRN{79|z_p?`f0}#*{%C;avouI! zxrxJ-xE_$a%*ho_7IX;&9L`iyGi`ABnkJWyQALeuG|gtEYt)eMfpA_nI+e}JY+;#m zQ42e;A#DY(wu7s%14b2y9x0#(yw~W_ze;OBu)=h!A^+i5|D;6$Y=Ca zXlPOo=qqbMy1Eu%ENiOsnik_p{)Nuq4q#MGR#?_Rzcw@VXKn>j?^|V0o*KGAJru*& zKpKW4OerRTj8+FDLY#C4@1rHluQ{J!mf94eDxJ5rePTE)2*&Z?b-KsOHw|bjQi$}R zik(Gs|I=A>i*GjU@#XihYmB!jl~Hz@*JE66;Lmf5c{gtb$2es%L=coyzpnX7?(mRy zfnYBN{PGpAY1;8|Hce(gB5_cWm%46kf zK1BYI6`G)9`6hR}&fOY-5@HiX?~7ZJ4rJvvS{1*HUIK*p?q#t4Oiz)+Z21zB zALG@RL))xbwaQx4Hf^(OZN92o1GFw4w%Qwb)ommK%U-%mayWyi1Sr?hH>WzTd4i|} z$U=QpMMUv{$ElGyXZRxsu&BdGAUS`To> zHHF z+^=e!xJ^D|FN}ihLWia8)fX6Cp^Lli?=f1nkPw)oi=)NiUVeJHh**lg0ee$^_{*t}B~@0P?JF16xX}#@r#J5yq*4?iS#L2TDF)(EASQfaSK5m% z1hA_rE;@YWaqV)cHr>vS7;Ztw4TxN7CiTXP}$R-`Y?`fj2vT5p5fEhBBdS;1}c pzoeeEmwDso#s7caWjLyrkaXbv@an%F@-?$(b#43drO$ht{{^7wk(U4f literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/apps.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/apps.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fb049c58bf631b67afa9adcc32f05857504f6dc GIT binary patch literal 512 zcmYLFy-ve05I!ev)t?k~0!GBvp^4Ou3ROi6Ot5r|kgT*eRf>}s+eNf%c^RIAx5&!G zD==|RQm}I8@4h?VeV5b0pf_1fA3p)$3+?YvL~}GVMaS_YAOSK0F#+OY52Oc~4>1LD z$9>=w-jSvt2po`Z0dK)#)c(fzFd}95MycB(e@fRF1Z!cfc(Y6<``yY_9FK=!j%F^= z32@_ZTI@Liu@8c}$p^&P-^c#6JXxex+$YM^-S=mFljQ3nTot+1=`u8!&M>|2y21-r z`7mmi9met`6O5HT#m8S3tmusC=XdRZ7zJ^29LLvfY+nMF2JkxJEg zxlJV>=Nop#C(kyjRUEHIOmq|zB}$o4?KH(sEw`@&0cn$pL4k3<*~3+8_gmughS}Ow nn$YSbH!`tlk!v5*y6c>4^DnPPedNl{b-m<_U{p;TlA-?#JbryL literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/views.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sitemaps/__pycache__/views.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ffccb3591452cf4493b6c8c94f10f7d14bd45901 GIT binary patch literal 2788 zcmZuz&2A&d5w4yY4mspdqO_8Bg-v9}SjM4YQHHUHWU>BVGIs-ezh%@32 zHGk@EY9)faScdJB-y(-RKyvcUkKluYx#qO5V8B4WYLdHa!zBB^s=BKBt19lb+s)TT z_dfZiP4qu{?&D(q7Ml7mx(Gi(DN(STTa*gQED9_Vd}dQ>Q|3_MEY}XDHOgEH+~vAP zX`QkL1r5qP3cTg6OKFp`76q;4x=yK2S(}3Pa^0YGgR)HuHkWIU(hg-?6l`JLq^L!o zL!)hqw<+=|YE!g9(I!P5`rM{#LBS1kBq-W4ry#qrKH6b}KI-p0fpv7;7nQ4%EFNc= z)gH^RRG4(eu^x`5QpUL+szk?qtMcB>N`3V~IF73h_s50)WBy*Q<8ds(Qva*g<=t2B zGWUZxE7MTNAI7RIauxHjj4xtorrsk^4kMh81nYp0h325yXzE3Dn&>NHOTHvJg&Fu+ z^o7}32%572_VH78X65z*vv<*fca9$@E&5u}!e$9`^cLO6z|6D#yh!pWzI>&d7e!R^ z5X#Y`%6&DfC7EObt%`AD{K`wwp( z>8v~|lk)InnxxTTJ{kTYdhJXfMUyZe7wchEtN9^DXjz79c;>T)GURAXu&ttj4 z<}ez`+7?YQyL~y7My;U^$AkN6F$z=l#=y|_g=FXTE!n{!x4C0oux~cDFt7aQ1pxM> z*lQ#XYVrog+15&vp>fRMGD~NhVOgfhDAY-jAMr+SX~STp{9vv8V5$6SIjXT>eAosy z;ZJDlM|60X3DKfP8ZWYZP?yHosng}R{A3f0u8H3H^xyP}MT-V4JkmDJJw}6k&rCq= z@nqs~e4aH({)6T<%H7rGqDi_&bDSF7%o~&lu!}{D19sk|xl0oex9HTSy@gNnI!)>{ z_xTQS`Fqk0iX0;hmmuD1bo1JRPQRu_dqo_9AB=4}wP=so&cC6D=f9(ex@E9uQ3Q!~ zzBy_z_O5O5QQtc@uUgerJYtv5yq>yubktKl^@M}q2}i`N-cxUuulH2dSbMkf+20(E z`l^ike&wpsqd1EtKOo=&0D&5KNW+sft{SB*bTKMY>G8Q66|$8R#M+5UYD&Rm@K{PxzKA z_HAEy;y~OId!lW1#S7N1kiW(GY<&Tv_$eAUal*}@@q76C7tx5M!Lag3zRw8+m^`bK ze4RA*O-kYS{tPp-*dHUo)F}rT0A9Sa!7>YWXj0>p1Iz(EfHI^4xIh*F%8+l-Wm5nn z?|fHjov1QF!6R_L5S1aOTWWUc{N4foj$KcHH^Ei~c+1;Jc(Z5yIMyPM?Ra?p zB{_PN&T#)&;KN?RJq;5T@Y3H6LB|k$wI)D}{Dk0R5IxjeCUTIbjm;c6(8S@$S>SeD z@SRvGhPU}n=xx$BSS#3%-yAh?1NnUe`F--Jr zZFJ;t5c|Rx9nrzKi-6{DTiDq1#BCHkS8Rjk0PT*|#K{iYzSza-w!J6hT}bKg$^izG z{@}n+8apeG>#;5hC}`t2IQWIar3UIzA@yjgm3g3G_bHK#2YBCQdVJ>0ptU04|1jn` zgIlYeb(S2g{}UL;KV>kU;%ppjtr(^{N!7pzGOxoW*yJu_)pOqCIxbBXY}^MHr)m5K bmkD)%Zt1%Y(jR=tU)%R=_;LHD4KMy5sPuTX+m! zfLHRB6R*${Gi$qqRc3a)ux7yM z*@E1H!iKdC>`K@m9Qc994oDmJcXhgdvFlhC#6l!b8}kn+zrI-hV=ze`Rp~x2)Ouy!6{z z@J0$>XN@d){mQSo)_zqtSyl4fZ&mJB+cBF^C$wny&@R#ROLX@PZj2&*Gt>sao>`>J zb>ObL`2dKqV&|4zrTT%r>n1{Od7C#l{(=h;<9S=ivI(rt(K6q5Ud@%3>KCX5Vjez6 zO;Ja6R-bO#EElKcP5fG%eQhFf!^^Z9x1=f?m2IK{sw32tr;;j1Nw2WRDv#=i_4jUh z$k$Vv%#6$KP6h?T|K3ROewbyWchEkf=@WE~QR3cwpXYmEy$IGyxtI)?qOyUlX1H|@ zDbY=O!L=E(cT388JG=|IoMSvTb2K*7r&fX2P2;%ag^c5F7RN;;+MMD=9N)G)A2QBP z=CwM)Lh1=QQuDwOP0 + +{% spaceless %} +{% for url in urlset %} + + {{ url.location }} + {% if url.lastmod %}{{ url.lastmod|date:"Y-m-d" }}{% endif %} + {% if url.changefreq %}{{ url.changefreq }}{% endif %} + {% if url.priority %}{{ url.priority }}{% endif %} + +{% endfor %} +{% endspaceless %} + diff --git a/env/lib/python3.5/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml b/env/lib/python3.5/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml new file mode 100644 index 0000000..f19e622 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sitemaps/templates/sitemap_index.xml @@ -0,0 +1,4 @@ + + +{% for location in sitemaps %}{{ location }}{% endfor %} + diff --git a/env/lib/python3.5/site-packages/django/contrib/sitemaps/views.py b/env/lib/python3.5/site-packages/django/contrib/sitemaps/views.py new file mode 100644 index 0000000..ab6b9a6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sitemaps/views.py @@ -0,0 +1,92 @@ +import datetime +from calendar import timegm +from functools import wraps + +from django.contrib.sites.shortcuts import get_current_site +from django.core.paginator import EmptyPage, PageNotAnInteger +from django.http import Http404 +from django.template.response import TemplateResponse +from django.urls import reverse +from django.utils.http import http_date + + +def x_robots_tag(func): + @wraps(func) + def inner(request, *args, **kwargs): + response = func(request, *args, **kwargs) + response['X-Robots-Tag'] = 'noindex, noodp, noarchive' + return response + return inner + + +@x_robots_tag +def index(request, sitemaps, + template_name='sitemap_index.xml', content_type='application/xml', + sitemap_url_name='django.contrib.sitemaps.views.sitemap'): + + req_protocol = request.scheme + req_site = get_current_site(request) + + sites = [] # all sections' sitemap URLs + for section, site in sitemaps.items(): + # For each section label, add links of all pages of its sitemap + # (usually generated by the `sitemap` view). + if callable(site): + site = site() + protocol = req_protocol if site.protocol is None else site.protocol + sitemap_url = reverse(sitemap_url_name, kwargs={'section': section}) + absolute_url = '%s://%s%s' % (protocol, req_site.domain, sitemap_url) + sites.append(absolute_url) + # Add links to all pages of the sitemap. + for page in range(2, site.paginator.num_pages + 1): + sites.append('%s?p=%s' % (absolute_url, page)) + + return TemplateResponse(request, template_name, {'sitemaps': sites}, + content_type=content_type) + + +@x_robots_tag +def sitemap(request, sitemaps, section=None, + template_name='sitemap.xml', content_type='application/xml'): + + req_protocol = request.scheme + req_site = get_current_site(request) + + if section is not None: + if section not in sitemaps: + raise Http404("No sitemap available for section: %r" % section) + maps = [sitemaps[section]] + else: + maps = sitemaps.values() + page = request.GET.get("p", 1) + + lastmod = None + all_sites_lastmod = True + urls = [] + for site in maps: + try: + if callable(site): + site = site() + urls.extend(site.get_urls(page=page, site=req_site, + protocol=req_protocol)) + if all_sites_lastmod: + site_lastmod = getattr(site, 'latest_lastmod', None) + if site_lastmod is not None: + site_lastmod = ( + site_lastmod.utctimetuple() if isinstance(site_lastmod, datetime.datetime) + else site_lastmod.timetuple() + ) + lastmod = site_lastmod if lastmod is None else max(lastmod, site_lastmod) + else: + all_sites_lastmod = False + except EmptyPage: + raise Http404("Page %s empty" % page) + except PageNotAnInteger: + raise Http404("No page '%s'" % page) + response = TemplateResponse(request, template_name, {'urlset': urls}, + content_type=content_type) + if all_sites_lastmod and lastmod is not None: + # if lastmod is defined for all sites, set header so as + # ConditionalGetMiddleware is able to send 304 NOT MODIFIED + response['Last-Modified'] = http_date(timegm(lastmod)) + return response diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__init__.py b/env/lib/python3.5/site-packages/django/contrib/sites/__init__.py new file mode 100644 index 0000000..b554240 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/__init__.py @@ -0,0 +1 @@ +default_app_config = 'django.contrib.sites.apps.SitesConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec18f51f7fe8f4a39a4e924f344b6a8b447d0c0a GIT binary patch literal 208 zcmWgR<>fL;wu-T3U|@I*#Bjg}WH|tFF&B_XVPJ>?l8g+&noL!yDOrhm>G^ue`FSNp znMr!ZnI);kdWi)E#d^UYrgMH?T4uVRCS#OPN@`kSX--KzP%<8<94Ne!p$KF$nD}L{ zUy@s(Uyxa#n^c;alcJlK6>phhlwG0^u>nRwEz$>Dq#qxjnU`4-AFo$Xd5gm)H$SB` NC)EyQW-$;m008QQI<5c! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/admin.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/admin.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84e61e20dd82e825594b6f520feb6f1b95dbdf97 GIT binary patch literal 542 zcmY*Vy-ve05I*OxrAkmIBm^&zp^4NDRG~7lK$mV7l9k4$xHv!9>Cm~n3@^lxm5EpA z#5tiLEZ_P3-Q9OTXHhho=GTuO0Pu@EqXi-8gmqLiAsPi ziZ!WYIk6z}P!F&Wvb85R`_@vm0k4V-U$4vxv51|+4{+#!*wF)|(?e9T-wqkGVT`pS z#)^t>m9<00UbmU*Jv3C(G>l7At87OjBQl*ovnMGOH}9ZBOJ~(#mNrG5*0P?gwo>s) zxnWm)`qHF)la=f0_~cdDXt_!awrtXF{-oY%4=L=zjWt3iARV%Z2lTYhPks`$T@1bW x4<;R3f+GlJw2Kk#P>VHoE;JoISh!nHNBY-uZ$(}Bte^je;Lil8#$@cClW!UAgH-?k literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/apps.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/apps.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f37bc7a9fd8def1a152e3e44c42f3cbec59fd5a0 GIT binary patch literal 787 zcmYk3y^h;341g)yu^q<;+@VF=SMYESa9e*+TyaCUEZK|#f?_F#Q(1N;rD%d~*O%!l zdF^zs(5a-8Deba%c2~dq(lLNPa4{lW-=nw+mBgQc2Ebz#14ecLI)E;O zDm>XC=m@$QR598S$QkGax)iDu*k>7oOyCz@OF%Jr#A|bqDXfe66UK*vjq^{#@X(uW z+n|vTz4N?l8!NmbyHVb&AD(M*JUk&Q-FQ)3g>Ej@R_wLsuJx*>XwM_S#XX8EQ7IsF zB(DN02C)@V2JndM8ORV28UYa>(bq*hF4h>&osf<%*Ze4I_Lb`Ug)zYqIqPz%D*eS>7AOcSPDLoUZ@4_C8$yqM^)u4 zW_d8}t%|H#oI6UKmdL6%=N-8zF~8CdyWAL|-PEH0?!9l(<*hJI3*Yv}QqS!Tg~&Q# jM58)|uS7YgY!_72PD^NG`r%aLM|w0zkk<^q;5z&VJo&kK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/management.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/management.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9404a0bfd600b8ceee97ce14f11a3f4045e9422 GIT binary patch literal 1267 zcmYjQO>f&q5S`_xNJ@=k18R!6tq`CG9U>vQB}j|9u?rYA0yJ{rbdiFf$PGh^Oma<4WJHzhEPX9BlLNY`M?5T zHe@}>0{G|v?L!vAY#d!Z3SSDAC?-ehJsV~0U9zmyXjUjT;`5TFY7*XJUN9!wN!nK8 zyC<1aMU!{yhR0G}R%~qRox`J_4}Lp2jSqi{4^EB`W;#lF(;!B{8>v0Pmx_s73(-zf z*MQ;^;@HLU3l8~^09+1X>MSy0-r!oLR? zE02tXGc-yBagF1KK#4wt|B|daAr~$P3Cf4eF=GAI z2Z!{kTYXjbp&Wqv!hj=2PD}>ZKCFBY+gyKlT>Xw~v-O_Y^yxde?!m=Fv*YlOJ-7~F z)q`>eR>+Boo&O7GXLz1pU%xS@8V_D+S7K?Tc1(pt4@J8gbp^zFjMzm|w-uYDyxy*$ zw%P^tXUC^U@$um;N(|b|c%2l@RkXE5J55qE?Jgx^UG2VRcV!+)cD`gy%EtF;kTVt6 zJY$uPPB>pI+an>k5I%y^y`-x6hqx|sfep0|qyD;!q`24dvWr40soho-jnY2CB}xfl z8>b_aKbbJsLEF5Qbaz7>3zJJM&nw|{DCts2F0{`sSc*M04rz$J8DqD-D{>tm%ABK4 zmpVcgCKBvG{AMx`ru($F_>hQP3e$YF|Cz=R42|DM1?!~A{sOU&_J0RcRkzc&Xdlm) zMU_2n%J^CKbfKnMnKU`yypUgsVm|FkG(~_UXEkfoq`lO8X?M-yyBijpmpVelR7J NMo`b%A?CMl{|^ddKw|&^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/managers.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/managers.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e317fdff68b0e5e716f4a7a05f5948fc4160d360 GIT binary patch literal 2252 zcmZuyT~Fgi6uo1|PGSNqR13?lTCA!S@&gG)>O;RP0lQjNn}=qrU946kV^4yEW7C<5 zmPG6m)mDAz->B67B)|5lf1yvkcT7Sk80LCBpXc6t?#agTvbP_9{^M_TfWKkksbT+H zZ0aX83H~$407eW#28_Nf$SfGy5ZcwZ4OtCF4unqiU4zVpQ60iMuxE(_i3`8rHWx%4 zh7GvFolQvU&;1v+CvY~|5X+BWccjHqLpHXk^X)3bhun?+S=%b5NX__7tiO5t; zJ7*6;rbms?2q2^gG_(jiqC~`D4H6rE1?b}x_8oYKQ_gI}B|PtN3w9ciGzl=mPdrGL zOusQ(*@9%*tZdRqFIXwp55`i8T=!BfUPO5`5OR9>gA%?zO_i?;KTAic_KTCDh_xBe zrv*+&N)>S$X_5GEQhkccg&$W(`3lc!zwE}AaSMRn)NE|(F&YhU1u$e}*(HNZ0FLew zBGwJ;(oy4cA8Mi zI`5pP=esB4G)s2#A^$AdKhvFL80CXv_KJ&K%k-o}PN>eP3W;i;Ph&oIXfm(oLCllM#5RDfpgJ$n8-z*`G0Ef}K3kk}NGE2Jt8nPAi;G8{_B(5iIB zg%){Iu5t6d7y(;)w9q|!6Ul+Xl~NWGc_<08Tqd(ZW);l?Y|2FgY@NNwrjPFN!(4F7 z3EF-@JO4sMU`-a^GMH?cPex9l2j~`hfNs6Y_o1e1aOQzL2F93nV2B*WgfrMcUgIIi zYh?5lvjz-$$2o)76pT8w@gsa8oqVEG;_rN{cG{(lv@fkRnR`MqG4TtD1IVn&t}b@zU0vN?xMn|Sm8*Op^g@bD$B0Mi z@R86_*__WxBBZp@l+F>QJ#5jbTo;_)rI)HSS31gLAst*5dQU4f--$`MRF!sBMiq%9 zQMGhTJSyhg&}R*&9%54;paIrmHrry$mdiZmvenxA*t6LNeb=TR-HlZH4squcqk5r> z53s2&nu=oT8B8`8(v5sE{9>>2Cv$dvMeM2w#Q~0U4_*_?P*!Hg^a6Xj=YKEsSmr)S z1s3X!R!~ZID91bV9_HUiQNb~kBhrGvkxfJ;H_1FAvqgqtk5xv+_y1UJ;8+KnqRIig ziILev*;uifZ2IASv6*MoWaCz3D7(~dE65dA;ev3W&zo3pLkChLExo|%hBZ{ABycMo zY0(uwkASM#~Jlo9C1Y1^-P`fq=-2W*RY0A_4z0r$VjI}u8i&)*^)%Q3M|363HJ=9 z5jfH{(o7Te7IQ7vdRSX`T8~>TNps!63zsU*Z==}vE5~m}q%frvZp_z6(H0l6IIrMP p!o%kEWO8CEs;s}LekjZhH^8bM!73YHR<3_dJXiEv@_?B?`#;@t5hnlu literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/middleware.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/middleware.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c39c79b08ce3d49d9d311574ecd55fb868f17fa2 GIT binary patch literal 713 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 HSUm6xKlv-0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/shortcuts.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/__pycache__/shortcuts.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc602e01426b44f05e12c8f326575b44ce287ab9 GIT binary patch literal 662 zcmY*XJx{|h5Ira92Q7#Uh}mn0HWC{MAtb~I1KlE|CXEeE$QQOVfM9|@z|Y_>Wo6lCR6^!jc?1pCnshk6muAtaZin5?TJ?zD zZ3o?fZL)`-pmq@ZIS))x2X$Icmra_BX_+mK#nFQa)@uK@PIO=m4D_l}CTWbG)laRz zar1(35~fEOV6e}8<~u%9W6Z86ZaD5tpufRB&LURIMxf?)c#02ga(PA;X)?lhe*wGg BslWgL literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/admin.py b/env/lib/python3.5/site-packages/django/contrib/sites/admin.py new file mode 100644 index 0000000..2b167fe --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin +from django.contrib.sites.models import Site + + +@admin.register(Site) +class SiteAdmin(admin.ModelAdmin): + list_display = ('domain', 'name') + search_fields = ('domain', 'name') diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/apps.py b/env/lib/python3.5/site-packages/django/contrib/sites/apps.py new file mode 100644 index 0000000..c459804 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/apps.py @@ -0,0 +1,13 @@ +from django.apps import AppConfig +from django.db.models.signals import post_migrate +from django.utils.translation import gettext_lazy as _ + +from .management import create_default_site + + +class SitesConfig(AppConfig): + name = 'django.contrib.sites' + verbose_name = _("Sites") + + def ready(self): + post_migrate.connect(create_default_site, sender=self) diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/af/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..15a649ff06426b26cf99c041b8ff87a3f3d05cb5 GIT binary patch literal 470 zcmYLF!A=4(5XIJWI_U6K5A{7GRXXn{r-TBS^B4CbQ90 z71jk9`%EYBu*y8dR*-1&5<}l98Bhz4GAKcsjJJSs;BCUWVC_2NjG+*w>Qk4V2i+BL z2CRi6g0nh9M9q#5*\n" +"Language-Team: Afrikaans (http://www.transifex.com/projects/p/django/" +"language/af/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: af\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bc0ef772a5aa4d53cdd84b1ed43f02220fb21f34 GIT binary patch literal 947 zcmZuvOHUL*5FQmD84dA~c=AveiH7v<^zz(+!3RQufk<%l-puqaO=i0{-Ms=w4ImP) zo;+%T5Im8cy)BQyBx%^mHcOLmW;xeM&^^bdA4Y~h>=UqT1K zMn;Q=a_M@T>k9Ro_kU~Dj;L4ZQC#2*Q_XHPdqf-0d^prhe% zFc@I?^UPQhYbH&`tkNOe#j6Pe^IW7ngGrnQmp8M{vLs|pO`%8DTddAW%vmFZTbeD4 z1g@=E+YHO)wY9a9bsLHrUoR!9QSM&pH)V(JGSlVj{=(eCOz-lv6!_Els9fSu8%?~O z&R8xR0?qljWkyJ-c}ic7EJvra`rFfh=~CnM?{L%klQN1D|tHixk} zGU0pqUa?th6+6gJ@-{B>kHr>rs@wU2t3t7xzsui1{;Jr9Vl&@!h4=Y>u~Y0q-bVW~ qC?4k@(E0_j?}R)5R1TaNy>AbH!6V1yZM1&+-@%@n>u{>ShWrH=NjFpg literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 0000000..f04d717 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bashar Al-Abdulhadi, 2014 +# Eyad Toma , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "Sites" +msgstr "المواقع" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "اسم النطاق يجب أن لا يحتوي على فراغات أو فراغات طويلة tabs." + +msgid "domain name" +msgstr "اسم النطاق" + +msgid "display name" +msgstr "اسم العرض" + +msgid "site" +msgstr "موقع" + +msgid "sites" +msgstr "المواقع" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ast/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0f14b988a27d8347b6988fc8a374b5af35331f1a GIT binary patch literal 774 zcmZ9J&2AGh5XToN92O)b&K!nYtIGQkRHbzYqAjUZl!&NWxVyW~#?|h4WqU~@^))!a z6Tq1p*S-dD?*njv3ye3EAV&ImJoeu+w&&Y}jkf{W9pWJ|Chig!gtrewkN8O3Bfb!R z|BBckz7w~JpTxTxG!O^m-rrp5zLLLB@fCTm`$68<`bFN$z4>*&cFPB3KJT@WY-QP8 zLZNG+5Kz<-a)GEF$CJ_e{b`hhhxD%!>0Zl*9_Zw`i|H>F4j`WkW2GCu%8uCXTIY++q+uh>b)m52 zuzRZ9--~jfO5wC>ji}g>Hnrt|O&8i>Zvd<5a1-It5Ynwd7>p`FO^q(PzAIEMV2jYS t)cfvo($F53m!A=&Z#@aL?|fU){PGh, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 19:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Asturian (http://www.transifex.com/django/django/language/" +"ast/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ast\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nome de dominiu nun pue contener dengún espaciu o tabulación." + +msgid "domain name" +msgstr "nome de dominiu" + +msgid "display name" +msgstr "amosar nome" + +msgid "site" +msgstr "sitiu" + +msgid "sites" +msgstr "sitios" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0ec03f9843b0cffcae4726f7835e1c4f5bae2d0d GIT binary patch literal 773 zcmYk3zityj5XKh>ARQElf{J435=HB~vjAIXjDWb(xJUS&AFnd@nDi5=_x&XG{VtdJFH-OOO-dzg6%!CDPz+vCkST60b#L3*x z{;Oq{I?g|q^^86indAF8e*S;o?9`ZW*8c7syM-;(Jw2r3+l`YX} zlR&4Ufx5ISr)30voGDhqb7jUpjVCzmV8f}$|j(O^VGKMEm$nun+hJZA>L{Q z><}leM8kG&-Xzkl#=yv%3kBhY1q6_&FLa+(_R1^&r}VwO71 HKfc{x@CVp& literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po new file mode 100644 index 0000000..cd3d29b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ali Ismayilov , 2011 +# Emin Mastizada , 2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-04-27 17:01+0000\n" +"Last-Translator: Emin Mastizada \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" +"az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Saytlar" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domen adında boşluq və tab boşluğu olmamalıdır." + +msgid "domain name" +msgstr "domen" + +msgid "display name" +msgstr "adı" + +msgid "site" +msgstr "sayt" + +msgid "sites" +msgstr "saytlar" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..69455df1ee51da18f8aa8ff0443a392f64f06923 GIT binary patch literal 1024 zcmYjN%}*0S6dx5oQauwb8)0~V5d$W^)aBhq|L`&)chM)Xp1VRw6a5VOd+0mo{s;OSnEyg= zcz@8NgrJmMLzsO`Ut?x|&yd!&m!9I1l$JPDgF5pB2v+A%VL}87DuGa@#>5852CHxh zK?sVKWr|ci+3?v$%qRb8iNucaPm*F7Ec1$@vsJplL+J&=f$B07wIDIi8$qb(oUD0O zI@zpAS_&LU6kn9+RLGe^E`7!ncOYZgBh<2~Jqot%Sfj(1ZCOa9^L*7aJ^Q>-YK>ES z9PB4f)*80Z63>}bv=lNSeWrrYfdy|xu@H*Pmr8og709o84NRWa@cMqL64VPQ6166) zaa!W6?!YAXS=f{w6EL)-RKrQ9*Vfij%5?P>`MMFMyZ7oj|GY!G%+txl-0a+R{{`%n zm6*bpRD-68SFwp`bS!9g&g^}w}lm;eiqj(Ne&^p5gw)`YRb z%G(*(-0VsUb~cF;`&{C>mN|-f1$U$`A5UJ?u`iD4&CI*lVFEJP;BhjSAkn9&9UbW% z-6GL@3_Hg4K?GXG%nG LV}c7`1i1M>?G;uS literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po new file mode 100644 index 0000000..8b44db3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/be/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Viktar Palstsiuk , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Viktar Palstsiuk \n" +"Language-Team: Belarusian (http://www.transifex.com/django/django/language/" +"be/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: be\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sites" +msgstr "Сайты" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Даменнае імя ня можа ўтрымліваць прабелы або сымбалі табуляцыі." + +msgid "domain name" +msgstr "назва дамэна" + +msgid "display name" +msgstr "бачная назва" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайты" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b337e3d46bbdfecd2045d8d9f826f7a3083937eb GIT binary patch literal 904 zcmZut%T5$Q6fG4WX^k;1j4>|C9fZ_OH&KCxF$RPL1Ce0kzNV+9Y0^{O>8cTCVIrEi zAZ|_A`UQ@JF#|gI3)Mg1NB9GJs)vUQZ*uzFd+Xd+|GGW$iNLM`_kjSo4txZx^?}R4 zAus{_1a1Jo0jv81j9CA|PjK3p6^bMyPoSp$kxQ`*!DcvO)__ydDGN;>_2qJ zU6`}Xm1aTCrAoL?bDuuPX|bZqB5sI;&SD#cPm?mN#Il(_L5+;sJQ6Gryyermb`tSC z=8}$XXr1}h>ekj)McbZnQ*2klv{fBmbxO%egK9mhjyWq!D+}lMdllE2$A1+Pdv!7# zsKvIf;$OychK3tFS3=j;gGDxVuCue6B4-OSOdGL`d^%N+_1U66tw+vk($0Cp7Sp_? zd@8dtRJDm2I&^EJl0K+WZ*0aP=CkRV!{VJeHv6VW%%1sSdN!nHV7k;C-~kzPI1C4- zM-d;JZ`L`0qSz^R%|WqSyhRQL1JgH0=y`;GeTra!Zauv2Bl&%pvV?5cd@bH1*DXFk h*RK#e1D>5XC>QFM?XXsv{NGBX*g*{rICD-e`3r6HNHPEb literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 0000000..4ebb4ba --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Lyuboslav Petrov , 2014 +# vestimir , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" +"bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Сайтове" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Името на домейна не може да съдържа никакви интервали или табулации." + +msgid "domain name" +msgstr "име на домейна" + +msgid "display name" +msgstr "наименование" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайтове" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/bn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..11265f6b1803a7eb5bfd553b62351104229fee66 GIT binary patch literal 925 zcmZut!D z6;Huq5R!?6u!^S*g837fZ}127b+2(1EauJYs(Mvj)!#3VZ4=me;2IDC7l1c_wE=Jz zI0B}CW8fn21F*WEz?eOs8tN{A-vd_wtLvX8~&_&T_8X2?&$Hs1qZ1-}HNgg{2l z0d^kS*P6Zm#2_2mqs$0RqPC!k>hMfb$vc9^TuNnVtfa9qF1M)e@>po93Tk*u*GQ7- zZqB!yp8QoyG&;JUCM$(n7qMYW340<6ohcd8WSz@Yd8?wU3d5Flnk8&*Bh@TYA@x=s zMr^(i+(66jb0b1J*xYRi}st9Ss+np?-t9&h^cMAM##zpR>SU<1Ds&f}bGTq>*V3FXRkj@F2@;syC zZDYD&z258fYR0zA*2Jc*s1KJqq5OAwy(Q}t-tyA&!f5@V=6myaRv|IgRu}sjv1#gf z%1qAExXlYKO!INH$fid+d)JyM*n*5zlF2lr)2+<>88f6U>8<1&1<%={Dmpr(vg=&k zoSLP>V{=^68%-Ka%zC6M2UYp4DqmIQ4xA6w{_CpjSNrhseWZZP_i=g$Y&(IC532pQ zRe9i~1Neu~fp%Q@lPfxezvoWdRk;f#`~&BIwtDBg_Ita;-d!HManKW;zx, 2011 +# Tahmid Rafi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tahmid Rafi \n" +"Language-Team: Bengali (http://www.transifex.com/django/django/language/" +"bn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "সাইট" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ডোমেইন নাম এ কোন স্পেস বা ট্যাব থাকতে পারবে না।" + +msgid "domain name" +msgstr "ডোমেইন নাম" + +msgid "display name" +msgstr "ডিসপ্লে নাম" + +msgid "site" +msgstr "সাইট" + +msgid "sites" +msgstr "সাইটসমূহ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/br/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..61dad870830db5f13ada2e5f5d21a1a23f7f0430 GIT binary patch literal 628 zcmYL`&2AGh5XTJ^Ar>Sg&K%}OtIFAR1*COIh0+hHs1Z@LaO2=)CmWaD@yd3Zwod?e z-~qUB;sH4G9y|-P36PO~`=43OjA!iMkGH-Ew!6#|=9sz1R7`6hnTO0L<^l7S**hggLR~#xG+?@WQ>jTQ4T|C3prSnLFP_FGJ2ECBabF>t~@po zHSA^Txy+PQT~JDA-Q7%O87ImyUfQ, 2012 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Breton (http://www.transifex.com/django/django/language/br/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "anv domani" + +msgid "display name" +msgstr "anv da ziskouez" + +msgid "site" +msgstr "lec'hienn" + +msgid "sites" +msgstr "lec'hiennoù" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/bs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1b76e2fcb12a4cc4c62634a5e20db1136760eb0d GIT binary patch literal 692 zcmYL{&u$Yj5XKD@AuVv>%wafCHL9GoLm{n`EvWybqDDkj;O=Cdt0MBhCGA2ktmB-g$!eFt(19;>PWR@8rz0yM8NM6QeWzqVEj^Gy z3Ft8Xk}^(t7dRKJyU93XD5R(ALdTgaU6-;Q%6EXj5?gGOVI(Kg2Rd@n_)-Sz1iY2T zXb&e!=czjQAx_j&b=jWS zDqWuGHkJSE>DZ^OWN, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Bosnian (http://www.transifex.com/django/django/language/" +"bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ime domena" + +msgid "display name" +msgstr "prikazano ime" + +msgid "site" +msgstr "sajt" + +msgid "sites" +msgstr "sajtovi" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..36107e04e36baa817bf05bba19af0e9a8fee559b GIT binary patch literal 791 zcmYjPO>Yx15H(OhS}MK{oHz`(R+W?82%2U?5F(^fQ6i$UaCdjz#MQ37vK`X=2d?lh zIB|g!|Ac?Qg*$@hO-mT*?eo}g#xtJ%aewP0gWUuk0vT`%_y7d^3S0-i0Uh8wunqhI zg6{z=I3_^Hs)rIR65^1O5rV4gL)daog9{areLoVc2FjfKX334;Jpf zG|1NWMtSL2HkVYGN+?ZQRFZO`wegf2?ZckXD{{5Sr6Xg>ixbykg>rQ%R*jzh7t0(n zHXp~P)||=Q^P_^llh!GtQ!37co|))a*2a21aWhr$7mJzWnMo;{zRvj2O5vg9FNK#W zb>id+j}xABDM`|}yB8;M3?V<3?^VdT(RF#;<4KQ_{q%9X7sH~laGqyYXjckvY)Y@t znsPLjs*oi;MKy4rmyO#}`qVr_jGisTO!7>MDy55`yr!rQrM??#iO$!ODk(u$)YUR7#TwW`scm*>8XmsGk>`CM2h{orkO$PYHU zaM!7{e57+zC_PK*;6(XE@x%B7_1#&v^EpVrI4j;2QgN_P7Z8mR2heNu#F!c6Mq5nuoCH; Hk7IuU5!u%L literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 0000000..22f2c13 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Antoni Aloy , 2013 +# Carles Barrobés , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Catalan (http://www.transifex.com/django/django/language/" +"ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Llocs" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nom de domini no pot contenir cap espai ni tabuladors." + +msgid "domain name" +msgstr "nom del domini" + +msgid "display name" +msgstr "nom per mostrar" + +msgid "site" +msgstr "lloc" + +msgid "sites" +msgstr "llocs" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1a79a7367b021ea92533275df5daf3413c5014b4 GIT binary patch literal 815 zcmYk4!EO^V5QYu3AT0<12e@#UQE;=@ z@&G+@>J<*aAu1Q%frsD)V4P6OXg~k!(Lb}c*FWzpd|(vUi2FoJTqoWWK0XnP#Al*O zd?RiUzXfgprM1 zCH#7P-iQDGdH9-Hyp|3vO9u$KE`?N}M2V0IrL==gE9Y}URbYoALkrq~6J1+pxwOMV zR5L&Oua;TrI2$b6H~J7W$9Hr77LAo!#gHEg)z`rR4z+Q-WBW4a&qjUAQyoLF|0?Be zgTj%QKNk*TXok@v9!5NBK@`PdYbA`rkc|8QkEHK;;cM}5ok!~sJ&sqym5?IX6V~z6 z2xSZ5w29#bZB1I(Lz!a%o3t95J}qX`x>P;AMK!8F5`E+;iZX`w1hWCu2F?xRMq@l4 z*PZVtdw5*WblI5i=v<1w#f{81mV?f2XZvFBQ9TUWbf&0iP1TS#=kVAy=p3cmfNUU) zMVGuuclg?c&ws0jhHtA(=Th}!SnEpnZ;>%%HrOvlMihKUo6^RhhO?v7D-eI?5FQ+FHJo49J`jP&-!t(6&>??xqS~1W^ r!a<1>G!@+n>F>g*n4ZwdR&_SfT_Yx_re8qKny|T?_hMu0dMfq@@blra literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 0000000..85de5b1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vláďa Macek , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Sites" +msgstr "Weby" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Název domény nemůže obsahovat mezery ani tabulátory." + +msgid "domain name" +msgstr "název domény" + +msgid "display name" +msgstr "zobrazený název" + +msgid "site" +msgstr "web" + +msgid "sites" +msgstr "weby" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d4b4ecd5ccace550db978900903f2a95ea61137e GIT binary patch literal 835 zcmYk3&2G~`5XToNAPh)|0~a_9m#S5@v7NR`>JmVd7F8lpwFb@;@5XUu?^?TSQojRN z-UUwFc?cxV+;{<)byC7eznu^NXFOj2xWD$9k=-O75h-z-_(XX7LR=@l5`E$uafkR# zc-P@^{HUytb%slJ|4Bm-!xfYGEW}HweFvpX<%* zE{$XhJ1d;DES*UZy23(%!b(DhN@)j~R?gQ@wP0(^qy=rj;l%csC~RF~+v(YVz0A_Y z?y&5{=yRDlek}NVX>6fY0^%H1u7guqYvcIX=7r!dn%weKClH*xP5FV5=t#?7qLT^q zqj;A`F^>lj$4NBUisC3DAwQKL3qNzE8}Mk4_qQP)Cc8UZ5n1pWt>dXdWlMD0BrrxJ zMI!`Y4X@^{5;%n?)w1~fGU#QxdP>bIZ!niUl~^V4L6&v~8#CwXBn;>CdC&R5#Z+E+ zeYp6vOII$N!>kQAgYohBaCHfBFA5Ima;2i>+M2%7$qN_Kg%)ZbvKbmH-RNC<#D^=L zf7etReyB1n3Y8}?oD}Zgk_lvOa8fn~OMawHWfM?!m)gx1vWkARcM6pzuk6O*TbxzxH!AHe*vwW-$Vca literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po new file mode 100644 index 0000000..5e37db2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/cy/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Maredudd ap Gwyndaf , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Maredudd ap Gwyndaf \n" +"Language-Team: Welsh (http://www.transifex.com/django/django/language/cy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cy\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" + +msgid "Sites" +msgstr "Safleoedd" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Ni all yr enw parth gynnwys bylchau neu dabiau." + +msgid "domain name" +msgstr "enw parth" + +msgid "display name" +msgstr "enw arddangos" + +msgid "site" +msgstr "safle" + +msgid "sites" +msgstr "safleoedd" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cdf87082a8c066f3f89f330047fc436ca722e89e GIT binary patch literal 794 zcmYk3&u$Yj5XKFZKV3Kg2TmM@TdT_1-3Xd?LlB~ArJ_beWr4H1JK4D1wO6*2H1EK* zj{qmGNO0oN_uwJmj9{E4gpq#x+1_u)9{c;ClCx@rF_qzaOCBE z;V^-A6hGln%;OHkaT0a5qBx4k$d7Rpv~Ywn#}b~>X=wVqTufV1jr23hQN=_Q$Ws(m0)0V_F>H*TtCKLC&1Nm<3(66m zw=!LYO-oBD|7M4|2seYl;b4E&eB6qHJ-Sp>bf|ev-8npWAzh?YUC745SaiKN=>gwa z`TSlZG<;uWI+vd;_BIqe>Os8O4cI$8 zvDCa_eO+CCRH(#Mp@Zu31IV*81gUZy>oP~Euq?4MlM4J`@$!?!HKJ)Tx_n2kKUMzq Nmvz{zDZW(0{s5?N+w=ec literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po new file mode 100644 index 0000000..7626119 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Erik Wognsen , 2013-2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Websider" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domænenavnet må ikke indeholde mellemrum eller tabulatorer." + +msgid "domain name" +msgstr "domænenavn" + +msgid "display name" +msgstr "vist navn" + +msgid "site" +msgstr "webside" + +msgid "sites" +msgstr "websider" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..74e16850621babd51524d2c46cefdd267737f75e GIT binary patch literal 792 zcmYjO&2AGh5H?UKT97~-dg3tLT2 zxFW%cH{lr&XCxSJ2w|jeKYR9@@%((hvvI-5HVJnL8Q})uBf;Aj!d1doLWl5;aFg(p z;B~(V8~%K0sk=>lLD(W(C;z9*jHSe%iM{>@aX|cw*uS}XWvRPGOd*Wi?3(uzd|q$< z{gshyX|JS1%d#m#p=%)(C{ZKiLMiPa*UEXHPz$h)$kBo};KZp7Ss`sxiAAet|HU#( z8QYI#W24V7cl@Z}Z_rq&RSLzKP^At|u+hfxku7DxpUq0kGo3;(ewp!ogTj%P4~4@N zI&recL#dFagXROue2NNmL9&c?4pjA2R8)M(o+|oXqK{+i6sy!Lw(Jic CiP$Ot literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..6029124 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011,2013-2014,2016 +# Markus Holtermann , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Websites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Der Domainname darf keine Leerzeichen oder Tabs enthalten." + +msgid "domain name" +msgstr "Domainname" + +msgid "display name" +msgstr "Anzeigename" + +msgid "site" +msgstr "Website" + +msgid "sites" +msgstr "Websites" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8179a5c186a4a4d78705281dab19c1ea53288313 GIT binary patch literal 868 zcmYjP&2AGh5H?UiS~wt(IB}Q@Qme{|H*M8+O90UyDN-Yx1VR`oAK<(KkqJlAZRxc4-hfp7UDg^+b6_z z#Aiec@fC3!@dx2`e-R7*e5KaiLH>cbkGO&HUsnm)LH><=4|(lcUEe|W`J;1wg^VQx zWwW@S$M^N-@4qmV)z*_vSP~BeWV+x|f#QXLlq;njq*^&2<7y1HnlhoaQR(XQ>wj6NInEsb>q!NK#G zZX3ZJYUvJlB7znR*C-2VxDH_$vGrvZGKNBWDBeilbFN#bY?HQDfU$_RmKj>G&#j}e z;mYRRX%j(LrUNc=c&YPacvQ%IRO+Wzn`9#MoHsJ@7;992#QTEAf)^3&>q;2tp+s^8 ziv#D%sM)Nls^NTJc`QyEsV4x9l{e}fRfs6p&QQK6*xV;NUdV3g{hULt$_4IHhs&jL;EDF{Wi(s<7%E*(&t#!1K0RxYNu?9RCu%6B@9gVY QFaMG*8x!j<(=~DO4@zzGk^lez literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..b8706de --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/dsb/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" +"language/dsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: dsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sites" +msgstr "Sedła" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenowe mě njamóžo prozne znamjenja abo tabulatory wopśimowaś." + +msgid "domain name" +msgstr "domenowe mě" + +msgid "display name" +msgstr "zwobraznjeńske mě" + +msgid "site" +msgstr "sedło" + +msgid "sites" +msgstr "sedła" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..10479c1374020b8ac21a3093ec6c5686f80ee04b GIT binary patch literal 878 zcmZut&rcIU6dn~dS&cCydh+m$7YLblw@Rp6Ym5j=BHG~U#nZ4ImWA!iW@l>Y4VCDn zR}P%@2r(pLtSRZii>KNDz(2x&K;N_=7<|dM-+OPq_iKNSj%*UN^N4GR0C54)L0J2W zIE&~aN{BwV6|etbb~#yNtYvxQZCX{Pt-=o*?&;Zy;YfL&z2660&`Nbigl> zv4o(EoI}`sY+q}3{-L34XwPEJ6$zF()MbOk0t9Pt2$>L4Lnwu|IVRemQWkOrG6T&P zRe{uFl_sn`(34}eL}AClN0C}4S9qxDT%Eq)nTnAa{@8*$DHBo^5*9JRR;9WZ;rU4+l#RPsB%&sZI1M;! z`0y~}d=XMHo4)B1^U?Gn@0fjzdS(~w6FNKS zn$Kp>?1Sl9Y5p36Pk=hqteZWIyJjbUkJ&DmZ&qox3k12BzcafSb* PjhODgyX9|Aq;TCo&K)&v literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po new file mode 100644 index 0000000..94d8e19 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/el/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nikolas Demiridis , 2014 +# Pãnoș , 2014 +# Pãnoș , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Pãnoș \n" +"Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Ιστότοποι" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Το όνομα τομέα δεν μπορεί να περιέχει κενά." + +msgid "domain name" +msgstr "όνομα τομέα" + +msgid "display name" +msgstr "εμφανιζόμενο όνομα" + +msgid "site" +msgstr "ιστότοπος" + +msgid "sites" +msgstr "ιστότοποι" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08a7b68596a8a494a33644935e4ca6d40be6447f GIT binary patch literal 356 zcmYL^T}#6-6ow~yl}oR^$c0zxnQ2R<#t+1;!eGTQs`s%yW*IdZNha=x`1kxRo+7R< zJcL6Ya^CzLAAOG~2gC_+N*odwM4y5ZWM(uUoJsz&^Zmzz!*d&8TR@&V)BOZ^1J;Pp-3(L-q)*BYxOFWyXKqhBsF BVW0p2 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..3b1884c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +msgid "" +msgstr "" +"Project-Id-Version: Django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2010-05-13 15:35+0200\n" +"Last-Translator: Django team\n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/sites/apps.py:11 +msgid "Sites" +msgstr "" + +#: contrib/sites/models.py:30 +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +#: contrib/sites/models.py:81 +msgid "domain name" +msgstr "" + +#: contrib/sites/models.py:83 +msgid "display name" +msgstr "" + +#: contrib/sites/models.py:88 +msgid "site" +msgstr "" + +#: contrib/sites/models.py:89 +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fcc2fc51333228a9617e09ba1058373d60eaf7f0 GIT binary patch literal 486 zcmYLFO-lnY5LNWFN6#Kc@X(^uB%)YTD}Gf_EEZY4O6;cF$ab z*`uv}NZ601EAVn!M$Em2Z19ldRj?+p7OzdR8V;m7La9(4gHl=^?@1*k3-QsuyLr!* z?hutkdBi1JsXfWa?oCXX2Sc$k$p;O0hR8*@x2~`ioU$8E&#Oh+ay0U1Ttns5looSq zCK`HFRxXaAaWRc4n97+ZG{z~_T8P#!&}`V-uoH-KYEp+bi9C(a;x;N)7E- nm;Rk=Sj@@>)szk6jSrKkf$BvXy9XUuhTR6iP8U?Oldb&%5k-%V literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po new file mode 100644 index 0000000..747882c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_AU/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:11+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (Australia) (http://www.transifex.com/projects/p/" +"django/language/en_AU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_AU\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/en_GB/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..772da82508d299330f6e1945db356175f12d284f GIT binary patch literal 639 zcma)(!EO^V5QY~hLRvU+<}ln6RnFQKkk%mxwM|i>5mB|}!U37AvvK7euWW}jZvYPf z55R>Juf(%3-T=8W(zm~7_1iOJ|9ZIhHKVvoJR(ksdxRxYd?p?cUx@p}H)4!9<;856&gRhIxhP8^n5zm-G~_Q{KR3@NS$t48ae8lSkUbn9Kn34e9&=x zRi3fKoiCMJXwN1%cNH}x;qar0|5}&O)yijf<&|Y;&No2, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/django/" +"django/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "domain name" + +msgid "display name" +msgstr "display name" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..23a47003150ffb1da635e509b2021ce0bbcaf68a GIT binary patch literal 792 zcmYjPO>fgc5M7{vFdQlloHz`(R@M3=0-8DmAxbJ0H6jXz`_`T~>)N}Pcat>#fh!XK zf+KL^pYR(HXC#=l8^TD>Z+7+O?d*@_9<);~ckByO9#gG+3<=UHKtsBe7CYKq1xyTJqbPV3)O~Q{G6qdC7m9Q8? zFN~h>Fyhf6L{S_b9)wXCl8{evDV^t5cgVvd9vwmSG=3Z&gcRPHFqS8cP^J`CH!-}X zt4RZAC^IbK8FfR;7iGKjrJCvIRHO2R$dM-~su)J5Ml!G(_U6{saS*IlE8jX#Im1go z)m6~lYD49fL4Z2g_r|B=(f0n4A9~01uBfQ5bxjwvcxeNAOQ{Bs&P8L;4&Nmwyua1C zvu4=vkxF$YRUSkCT-tw)#(>(Jl#51`{6sgEi9yxv(hPe8=+fbyf=5G$_6HuDqQycN zERlw^9a%4znL`fMpPnRhkq@HYmmX`QdAV1EIf C;@Els literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po new file mode 100644 index 0000000..a65e597 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/eo/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Baptiste Darthenay , 2013 +# Baptiste Darthenay , 2014 +# kristjan , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Esperanto (http://www.transifex.com/django/django/language/" +"eo/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Retejoj" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Tiu domajna nomo ne povas enteni nek spacojn nek tabojn." + +msgid "domain name" +msgstr "domajna nomo" + +msgid "display name" +msgstr "vidiga nomo" + +msgid "site" +msgstr "retejo" + +msgid "sites" +msgstr "retejoj" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8e3f12b8b1828b5ba0fa6c0bd0b3c9ca3551bc44 GIT binary patch literal 804 zcmYjP!EVz)5H-+(WH=NKZ~C;BWPNO0HUN)Q6r+(aNpV+XDfTx+TD=mAGpF_ zaN__c{)CS}+~KX=5Jq}_JL5OAvpf6q-o~c@b_;k2q`+<9BjD{DunBwzdcY6h4)6=` zx<9~%Uteo=Tj0;Yec&eIU##Vqbq94AqKH;SVOLUt-XNMCcU>$B*9#RnAcB~PN=2o|1j>sV^IvL$!gB=iPH zla@||%tcAh&<)&|W#e|Fn(F7sQN^4Wf~A6237yp(k{NB!oU4;=cd=M>oUbUS;`OI6fYa)~Am, 2014 +# Antoni Aloy , 2013 +# Ernesto Avilés Vázquez , 2014 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (http://www.transifex.com/django/django/language/" +"es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nombre de dominio no puede contener espacios ni tabulaciones" + +msgid "domain name" +msgstr "nombre de dominio" + +msgid "display name" +msgstr "nombre a mostrar" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dfa143c7e8806187348f37a71e9be6a31e981fbe GIT binary patch literal 817 zcmYjPJ&zMH5H)asv{1kmS5XWSMZ(G1-M}efqZG%H6DJW7oa5^fRR6MTFnTqk@ZbP3-H zw+X)pUiXKvc;^8bffryM=_6k5XVW>+mGTXA|aoOx6*rVbv+(E;oV0N_mhLi`w>O(0>Ou-Yq_lnq^nA8S+D1XR5m+F^G9>+Z0n;QkQe_8?$X zaj7jEm7sJrGgSCh?WK~MGEg^y5>jPlBMsS8*+~vcLWL$n>*e$Vnv(KAzNiknbg9uG WP(d0j, 2011 +# Ramiro Morales, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Ramiro Morales\n" +"Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" +"language/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" +"El nombre de dominio no puede incluir espacios ni marcas de tabulación." + +msgid "domain name" +msgstr "nombre de dominio" + +msgid "display name" +msgstr "nombre para visualizar" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_CO/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1fff5d9b5ccb4648390c2362418e4ae0cf3de4f9 GIT binary patch literal 825 zcmYjP!EO^V5H(OhEF2044v52WOH`cQjZ~%G5L6LTsS;76cHxTLT{m&r^{i|!Y4QzR z`3Y{^;DittzJib72VlHu2qQf|d-P^(kKV5bTOS$4ZNg(hO1Mk-K=AQ}aFg(r&?S5$ z+#~!Zc-9&bK5grn5QU3dN#tw*o5^odVxxv_d;zz{3?^9y0>k?B5BUy9y z@9}+oc-=Zkwu)2bq-E($LXM?S8nh@SWI}6nkfC-yC-eerB{FFN4LEUTJ1keWD#W7E zv;S(DrH;*F*~H+5%p5<;`5S4hLY+Wg_~v6p@gh$oIT>totOL&%*H7;`{mIqk70`XlZ!}2+m>1i#dlBZIX37l3!D?5YM5DP5N zlxRb1=3JG8;e0;tINx8L%S&Gzu70?t;;K_9?c3pT*bc@=*S>iX|ziBA)5(fr5n6X5Bc6k=dU}LhL3cHxzf`F_Rf_1_vi$gyMjqk8&U8>G^I^I zSIyB5x_ww}2Q3Xx1`xOV0V5wMv}{y>rVkpjL*odg6;cMOT2jLML27BJKe>VQun5un cp)UMUlasEh1(axMEM}e9wDaCjxLPgy3p, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:51+0000\n" +"Last-Translator: Carlos Muñoz \n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" +"language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nombre de dominio no puede contener espacios y/o tabulaciones" + +msgid "domain name" +msgstr "nombre de dominio" + +msgid "display name" +msgstr "nombre a mostrar" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..02a2e5340ac34fb81277fd5d8771c0d59a0a402f GIT binary patch literal 809 zcmYjP&2G~`5MH2wFbJU@IQ1}aN>puZS3p{a0HUN)B_g8MAZ}=5Po1soU2Atk5}tu8 zH{OB^aN$jO2##D})@}$Reg1aF-^~8Z{M_F9#K^7_b_glqCgCH&+gHL>!Z*Sm;RoRs z;TOT{{t&kO`ckXAL;RU=mvD{ZUoJEDl=wUGZQ|d=+r&4nwE7)lue(o7DU5zMzCVwz z>&@@KHj=e=Djiyu&Jc2438_Gd3Lz6pX$P5B&c}pWfvrV`7PJ8;rnbj&Y3ov~8a?|j zmszUVd@P$7eU6#q$2ot4#!9Uc$j^l;bZ~;THja;NA#?tGURa*$1cJ${lph)tjkp(Y>bv!jf*-|)d z68NC=N+@{T^0R_2UG_3vJt3(o=AuBJqNox$t%Z_y2Awf3Wv08(nK@S{VYpZ9*;H;5ci_skRBEl9c)$84IM6BNRKJi0J51d7Txf5 zdc^lPI=|f+8a`5)&ZR06*q=)G@5l)>dj*qnZbZqCw5e, 2011 +# zodman , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: zodman \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" +"language/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitios" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "El nombre de dominio no puede contener espacios o tabulaciones." + +msgid "domain name" +msgstr "nombre del dominio" + +msgid "display name" +msgstr "nombre visible" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..32f6e8fd6f68cc26000df003f93a77c87967a3b7 GIT binary patch literal 486 zcmYLF!A=`75T%0C9yxQEN*of=iR}nPaGI)u1}Rk{BG~4NOm?y{+Sn`GX=wk0zu=qt zEuBpedD4?T@|!nr{O|ba^?>n-dBQwp9x}f$8}yiO{CLG@qxrxz_-C3Y92GdD5UqC_ zif7|WpWRdKL&8ZcZGqS8GGgvEWYfDGZvvUbTKr)WY3NFIfl{Hm1f{gRJd;XF7UDhq zwvFdrcaBP;yx{b=kyPcr; zI2(#~HW^KZ`wvkancaAo$Z^m=HE*2gC5gH+*7ae&G$B$N{K{{!x7Rfz7Zh;l=Dx75 r)X;mf=_9#@?W}BCt%IrX)`wNp;OcD|2i-pGu7j3?&jV2Hes=I5Eewyi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po new file mode 100644 index 0000000..a6b74fa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/es_VE/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Spanish (Venezuela) (http://www.transifex.com/projects/p/" +"django/language/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3e3e38acca07d5602e817d28d14685d0515e1b83 GIT binary patch literal 788 zcmYjOO>fjN5H(Of6hJ~8dg3tLT2|A8yw z4{+v&1ky?z_J8mn;EV+0EM*z#<$0X<#xwT!`)ltR#ZAHkLQ1$zct`N@g>aqlmCz-8 zBiteUBzWC#!kS-SS?cZ)e;}+AZqWXxtBm!DKNAPUKZw2W7qR!P@+c2gi_i;rj_%1Le0Q7B0~$>fDWARte;1LKQkV!bTg%N4AhTe=#X6Pjv#p_*Kex4GKqE zz9$?e(2e59Jc@bTgE&s2-c}Sx5efMbzLmb_O4sAj4v%*rev&+jwjzq)P*}%PBb2R# z(DiIKCjxeBh{&XMjlm6M1ed-Q7168PAe%CY?RJ5Nf=J2(~k2c zkrX|o5AQ{G+d1zccNgIt`!xvHEU=-hZioStCXq_St*P~H+Y@y z^X-++pLL3c4^^gfsfq-)Po(?TX9DPgaWyfb;``dvHUZVNsU39tuv`u{6g(V2yx9-f zv5>jU*`BTul>{YgdRdg PzAw|Rt&on<$Cv*Dd_dX0 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000..91ef8f3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Janno Liivak , 2013 +# Marti Raudsepp , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Estonian (http://www.transifex.com/django/django/language/" +"et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Saidid" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domeeni nimes ei tohi olla ei tühikuid ega tabeldusmärke." + +msgid "domain name" +msgstr "domeeninimi" + +msgid "display name" +msgstr "hüüdnimi" + +msgid "site" +msgstr "sait" + +msgid "sites" +msgstr "saidid" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ca7a350ae193497bf5af1a67094a2a99413717dc GIT binary patch literal 807 zcmYk4&2G~`5XToN1q?_PLYzPvZmp_K?360OB?$FPibOCm!lgiz?QkP4I-BjiFU?I736g`7|qU?(C+3)+AaL)&15w3Av~%>C@Y zT4t%^{9)O^=rhb6?-l$l8Y{I*p*Rz&)X@n}v~j#|OIh%JUs|5&6r#baj2{>jj=cO( zI831xC%ZgOc+!R>N#pi*oWwC1`3ZiIq36oi=J8YB+JU5#?mpR$DWaFcI-VJ!Y%QEN zDI6)RH1z6P7(-iCg@k7qaxdf}*U0twIn}AsixPQ;Vw}Rhu=E%88+H6jz(}oL8 zrh@%5KSX8vIiwW(};kj$lVM?_J`A8UxuKOlC z=AD%<%yo)}AE{gyQk5xmhSL38WeVt{LG6vG`LQ-*n}V9mUv0Ow2a92MQ^DgdBwKqC zdxyi)D-;zw)MJ#&gPfrf72u5SyYMjcMv}ouN)O RgV2jF-lmsxu;rj)e*xmu-kksd literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po new file mode 100644 index 0000000..d7d4138 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/eu/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ander Martínez , 2013 +# Eneko Illarramendi , 2017 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eneko Illarramendi \n" +"Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Webguneak" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domeinu izenak ezin du zuriunerik edo tabuladorerik eduki." + +msgid "domain name" +msgstr "domeinu-izena" + +msgid "display name" +msgstr "erakusteko izena" + +msgid "site" +msgstr "webgunea" + +msgid "sites" +msgstr "webguneak" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7bc004f3b11ebf24857145896a26222199e161ed GIT binary patch literal 872 zcmY+C(Q4E{6o#W#g{Yt+UU_l6Q_Acn)zX?;5o-&T7MC{lewxf~Q?fHlW@_6z1>5b# zf>*wRTLf8z3W}hwF|pu7-~#9X7oWgc z@EJ^iZ{Q;M1)T3U7<21W1K(xnYj7Q0!~WaTp0@`50=)^nat1)}Krcb(q0YAoMTrNS zcMiCDTwfRN{9(X0h}Fyp?Zq2{Qq|;{B*~kC5-z1OlqhN39+$hMTRah(R6&NX>x!3V zx|Q?YzTf+=*3;#CL5zjN%bL5+1!96x{hr;P-^6q$m z@RztYEH1dzIX9|^=n1ZtX<8ClDssAyX^=k5`)MVUb@c!>va!V*g2jS2BdWR4xujbg z#e+CH2FuxC#`nqtd-(H3=X=j~%QhBe+jhNjAK4yRx4BpDmurkR<;Y{QU3tjLzy#_?V)3I M?#b~^X2W6s00, 2011 +# Mohammad Hossein Mojtahedi , 2013 +# Reza Mohammadi , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Persian (http://www.transifex.com/django/django/language/" +"fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "وب‌گاه‌ها" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "نام دامنه نمی‌تواند حاوی فاصله یا پرش -tab- باشد." + +msgid "domain name" +msgstr "نام دامنه" + +msgid "display name" +msgstr "نام نمایش داده شده" + +msgid "site" +msgstr "وب‌گاه" + +msgid "sites" +msgstr "وب‌گاه‌ها" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..65ba6a036382fc3f7b2c932d4b1442ae04e09241 GIT binary patch literal 786 zcmYk3zi$&U6vtgCzYYe((23!(wW^%Ei-5EjWq^`M6+}es!R}t1#L1m~vfm}m$j*wy zij=6}&BEA!K;s^17 z_)U1-Ut-sHZwzhMH(y??Tp>GPIG-y#s$b{AgAu}3%Oz1hdQe@JBv4G;j)mUG-G8gleo?Xjj zjw-G`j`ge=%MAHxpTC#ZDWenUkA)tZ;7pdrBJaAP>hqV?(DBqH5cJ-r{KQIuq~)&! z$^`0B{ESC2j~fujNz^!u;wT~^Ka*4CYi@N79v$=e7~<#2)95fF3*HEaJhei*T%fTD zybx9^cx~K7=7Ns(uo6SbQz?oBI!bHhMzB9ZER!&t&1N<9$!Z`kYnds+_4pf?U!{iw z6&?iL({6kFqj4Oke3? z0!J4L|Bso#Kn1~OEsyAW1Z0&1!(t`M)8L)FTtsEL;bpMly!Ak4O zfmARx3Y>DwMUKnGasg9XseHctN&}B+Pwx&+*a;0=_*5UPF}+;O5lN&9#irLv(u1!W HZ9KAnIEUV~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 0000000..13c88ce --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Aarni Koskela, 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Aarni Koskela\n" +"Language-Team: Finnish (http://www.transifex.com/django/django/language/" +"fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sivustot" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Verkkotunnus ei voi sisältää välilyöntejä tai sarkainmerkkejä." + +msgid "domain name" +msgstr "verkkotunnus" + +msgid "display name" +msgstr "näyttönimi" + +msgid "site" +msgstr "sivusto" + +msgid "sites" +msgstr "sivustot" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..0635c422ecc1e634bad833c0d6587e871051c439 GIT binary patch literal 797 zcmYjP&2G~`5H_@cWDuYp;KE^Uw5rxW5s=m)6;K+fC=pRH+_(1F*~;Fvb~mJX2aa&( z&WRhGIPe}k1UvxD+70PQpT8aNH{<#7udU5b9@!1T142r;N%%l;_Kk3j@SV^j{2<&S z{3bZvU&5w4U+Hvri9ZtVUHD(Fdfs!o|4Mv^_z&@I;*E_iZj0FEzfVjd9$kCa39cTO z*O|Lt8Ob_(BP<#(ogw6^=0bwxHA2RvR2DKNt$WAi5=_H0G@vwCerf_Q7pAHBvekQ+ zVm(6{+lTR{TAg8L*>TR^p*BLv1oAU3OXZ(nqqJocQ;M9un3sm7Dgl4`I%S6%xg{-o z$t@<(i{i&Dido!;I8LJeZWKom3E2t07cS>o*Jsf_i}xXZl01rbBQk%?jb*9k(p20k zoxm$DDUT}vyfE~3Lihdch{cyhFEJ`N)PkcNtqidr_*oyBt-(jbK#KsMvrpdG$VM{IAc zbKfdZvm=?QT*xwky;EWTSD8Se{b@DVykaAzYmQrp&@^W?czZSr=``;X^u4Xz;oe0KLalck|-{2qo C*x17W literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000..26f86dc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Claude Paroz , 2014 +# Claude Paroz , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Le nom de domaine ne peut pas contenir d'espace ni de tabulation." + +msgid "domain name" +msgstr "nom de domaine" + +msgid "display name" +msgstr "nom à afficher" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..489bbab4f0f9b2ca1e5bb1fa90dbb3c412f9ae2d GIT binary patch literal 476 zcmYLF!A=`75CxUf9((R#kT?XNHhVAQC7M5nABvW@i_pjlHrRLOz5a;KTS9 zW(gusda_4;^X84;zVE&4Fm{&@!TZRa4c01r9#yQrL^oHNhKu<@rIsk z>$%mPqLL_k+@jUVkz`~O6BFjaxLBLygN7^PoQ*IcTTl(ZISrS8>yNT)UFrXDkE@oZ zBFxDwG~8266da5Lk24NB4=FWTh}CMA5@i3(;)$jiM2oHAVetCCarp%%+#q zi|tRSuFTH7OXN7=y5Ut5JtxuB#=0TQA54gpMz{GG2U}e`ucUw%Zte@~Dh-4GHho3b jP_DCCy$q(tu@8%=!8IRc932l~a~*XY?2kYl4zrzi!laC+ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po new file mode 100644 index 0000000..599ab98 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/fy/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:13+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Western Frisian (http://www.transifex.com/projects/p/django/" +"language/fy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3c5b28beb8697f15f9a341efc18c50f79e3f1a63 GIT binary patch literal 668 zcmYL`&u-K(5XKD@Aq62j;smF;7nI79xkZMkm5aRGp6$joL3=xpP#bPCNF+# zp&UCgb6aRrN;>+e!~Y>AEg_lJO9wSOwXX4!nzmc|Y%r#4n{Asc6Z9436t}aik5)u` vFhtkyoQV5-X!m!<3BidP8UTN?y8WR|fc2Y&0*70M_~q@5ZK^xPTLkhK=k~Vz literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po new file mode 100644 index 0000000..7aaaa42 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ga/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Irish (http://www.transifex.com/django/django/language/ga/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ga\n" +"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : " +"4);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ainm fearainn" + +msgid "display name" +msgstr "ainm taispeáinta" + +msgid "site" +msgstr "suíomh" + +msgid "sites" +msgstr "suíomhanna" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..726462c853f9c57cf1574a589ed1b76132d35bb7 GIT binary patch literal 858 zcmYjP&5qMB5H_%Y6hHzFoH)#>+STIb2T;2yWhKfMt+a(|H*j|oH}NX5Bip50X&-?r zcOC;y9QG|ZaO44a0T?GOWuz~k{mti@*qWaYcRmx0+la@A1aSxP3E|=^;wIu7B0_ve z+(rCGINu+{j$2=AefN>C5RVWp|KmC#hseK>A0T&b5ONQ>kL-Gmk)7`?G9DplBexJP z=jys}{WpQOHqM0Qh9m`tOjS%skgVd6GAWgXR7vYJCRbo;mU071gJm<*C7CdF$ySY@ z{CAcZtk`@EnQC>;Q%jFC`hjaBl#C%eXEImbDX*2bbYgOm(N~My&_u=HP2VMSq&c(b zrLURgF+@T5oCYBcdk}_k(Ay8fAV4EM<1X$2{V=^nn_bK zt8@%+7IIXST&0+j`GVz~CY)86V7wIR6F5tiwZaszTUcAizQ0^9yVg|@bAHiHRpqyL z*igByow<^ z9?4W?Lgq2_XTtvb-x%`Do0bdBN;+1$GBL=y*_z?A0kq5Et{e_SxV!|%;T{}905Lc< z+NhCJ!$yUd5J9H{5?A)i=S6?&}X~CH!qk>787ffX^FfXi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po new file mode 100644 index 0000000..6426918 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/gd/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# GunChleoc, 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-22 17:29+0000\n" +"Last-Translator: GunChleoc\n" +"Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" +"language/gd/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gd\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" + +msgid "Sites" +msgstr "Làraichean" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Chan fhaod beàrnan no tabaichean a bhith ann an ainm àrainne." + +msgid "domain name" +msgstr "ainm àrainne" + +msgid "display name" +msgstr "ainm taisbeanaidh" + +msgid "site" +msgstr "làrach" + +msgid "sites" +msgstr "làraichean" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c107d9b3acb87a3c7aa706008145c59814de3732 GIT binary patch literal 742 zcmYk3&2AGh5XToNAT69Ya~N)|D(^>1mEbf8QCd`#s8O|WcXyqQEAMz^JETFp27*U` zGmpTP3r8dbXC8nHC&mdOjP&#D*#EI-cD~=)dJ~b|Anp=F;ui6m2=<=n5Fd!!#5W?G z|0K4EU&M9dH}UogEyNzVcUM>EpUK~(_zU@<`$|5%^@Dtn2MhaQ?^+1R!o6!F*~*Hk zgvvBRA)sg^lmgLsC=L3sCvX9-6{U1wEO>G5lBiOy)nc*KNB`wUPIg;u2!2-{QdTb`!#`8@IAN;Q#}NoksN)zsSQzxipc z)17#9GCJC{pC?&-NWWDgm9=Q8KQAwRO21NJAIhn)PWr*~;+XX|y71OST6Tn`sT9^6 zdgsdjtCK^meEN0d827$m~%)A<6W;V`U5rD&JX|q literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po new file mode 100644 index 0000000..b21bd6f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/gl/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Leandro Regueiro , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Galician (http://www.transifex.com/django/django/language/" +"gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "O dominio non pode conter espazos nin tabulacións." + +msgid "domain name" +msgstr "dominio" + +msgid "display name" +msgstr "nome" + +msgid "site" +msgstr "sitio" + +msgid "sites" +msgstr "sitios" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3cdf5dc68c03119afafbf109eee3fa4c88d834f6 GIT binary patch literal 820 zcmYjNO-~d-5N#1P88uO3Jb5TRK}he;5D^$$V?>A$hy+LP%}le~WVU-V-MH`{JfLBt z1~8rs8t>}KpV2pegnvL^?=C_mZ(dc+tFQijW3%&TT(8xHjZ+mUC0T&OSU6&X~|UN#D=Z0LfK9!cKdpE zrj}WB?0+mDcvcB* zOW{nF(lSm{mR6)HWJwRO4Z=rdKddReX&$0RH@8Jo@=S_$N>AlRCA&1%a;}rs>)md* z=0ZcYDR*kQY1aoQolrTfuD4`;JX&2^T{t~Hsm0Me9#v{AwcEjUPVTrm9#ZK!%3Gqc z(luUWi+tu(7iMkBiZAHg6iPQ!n%Pk9|CTAWWVBXpSEA&LrfS=ibf+KM#^f9g+{T!u zI}J+4=OX6!{8xYMKlmf&zxX5a`~D*`?}EFB^e5jV(1GvyL-L3CeSi?|F)}^qP#Kg^ cy$8Jsac$V@5RE=V^w#eWGsD)ysb`1(1NhGf6aWAK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po new file mode 100644 index 0000000..6bc277d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/he/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Meir Kriheli , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "אתרים" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "שם המתחם אינו יכול להכיל רווחים או טאבים." + +msgid "domain name" +msgstr "שם מתחם" + +msgid "display name" +msgstr "שם לתצוגה" + +msgid "site" +msgstr "אתר" + +msgid "sites" +msgstr "אתרים" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..699024a0f25a4856e7ab8c178ece3c37eee961ce GIT binary patch literal 665 zcmZ9I&ubJh6vv}hgwc~X!9(=aQnHg2b=$04q`$Dz#ifki<4$%qWhNPtY_~mm)Ka~v zS5anF1jUnh@=uZZQ+%1NuK3`S_g?aSZ{C|Mj6q)mZ3OV}#rj^2j zmTUdKJ-&V zdDI%1BA#vZ$K_|m@kqr>QE#`mJ>Q+RXtZgxml|d|E@3$@k9-XOQRxmIjD&U4cONA? zWOc3!-x^9ww)McIN@pCeK2iSfkQ|Rx)X&FOJtX)>StYj1, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Hindi (http://www.transifex.com/django/django/language/hi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "डोमेन नाम" + +msgid "display name" +msgstr "प्रदर्शन नाम" + +msgid "site" +msgstr "साइट" + +msgid "sites" +msgstr "साइट" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..90773e6cbd47f74069b4eb72d3e1e3fbf89921d6 GIT binary patch literal 876 zcmYjP%~BLG5RQmHHENaR!IOvfAO%HbH(9}jfx({@s;F{>g4Kh!FcW6O&LmSwSYV4s z@ahBj7J9)Gui*=L^98gs!-`$=&DZIC-RX4Y=cCy#1nmyu31Wb_hxm*L_6>0h@g31Y z{6O4C{6+-bAH;0%Z#24x$iEPe5qB{@bCZzeu#fxz`89Hcyn`I}KV5N(j45OWaT^i( z33Y>o^QVTg#`cw$jtqtpGE)krL5osCDzr8pQlou{34I2x5~*}xEO>F?S|n4hD#Tf> zC;#OVhZXCeBfHid$<)*BjDD2XDWhY^j)cxlv?nWLJ?*<(W%SK)?&!e85bf>^XwORF zQA^(nFJtI1zDyaXybGMith>lKV<@D1a;!qlYh9PJRmxX^zlfLEB14Pb3Fqm+3hfHv zjg6tN&>KTfm6f!YU&RR4%R1Cb>yQ(pS2<3iXr-pyzXZ-Y3Zg;O{R1n!^(m3|N4w!XrtZY*ouN~8C$v-bX6~1@_Y>% zH_^{HOA-!qa}ZqiG~pax0s~azdL!vfx7L%T;Lg{wbDhNi6}t(p+9ha3Zsp7h;Ul11lz_7)elt3XjQ*Ws4|$brS)VRU, 2011 +# Mislav Cimperšak , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Mislav Cimperšak \n" +"Language-Team: Croatian (http://www.transifex.com/django/django/language/" +"hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "Sites" +msgstr "Stranice" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Naziv domene ne može sadržavati razmake ili tabove." + +msgid "domain name" +msgstr "ime domene" + +msgid "display name" +msgstr "ime za prikaz" + +msgid "site" +msgstr "stranica" + +msgid "sites" +msgstr "stranice" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a6fc772a1d22c4f18b9018a28ab682aaa48d22a7 GIT binary patch literal 863 zcmYjP&2AGh5H?UiS`b1A^~7N=NUbU--n6J?+W_jHREdbvZh`A$*GU|9?Un72ChCa` z7p^=B7r4Ly`T{%vcW#ImfN|22j`Z#4@qF{MBmcZJ_kodJC)^{Xgd2qSgkYZtR|%g9 z4Z>H#O~M~S(ETOMh4ZDU?l$oc!aU&`-T%7G*aq=$;=9EB3S+m3H;F_1`5C_=rW8i9 z$$gk7)D0H;pBu@hcBs5`EbU3iO^Hf_#!^CtS{o0U(LUUv9)YVclMajpk8M|DxpGy3 zqlunf$YqWyPCkz9Tho`B=X*JSA+1wJCy@71cTIF4D`P!xxvt9j=Ai3%Y7&U{pQU`u zO7x`V+vsHi4G}-!BIfZb#Bm~4mqaWC3HgD1qe9J@Zk3CNys->IB%-k-$fBp{JWnlZ zSD-gGftJd8C<}OLiVkd)su)z}i8Ho6Rz-oeTt1>4-5p?8@>F7(z)@963x_08s9~Y! zeU;Sf!{M;zLtWL8$F~M%axjj8&&j|ULN~8 zEmY}spaHFuzIl}H^0k>RH0wyqcXVcQrMn5NwUz%rZ35IO+Ajtc3%+Y?=@QV@#C6S; zb(kKT3;I6oui1>@F$f^Z)NPO(&)j7=IXMrlP^dwn<;C@g9ggzTx5&0lDYY3&DEq{q z`?CD@@$}2Y9~(acY@6^<29vFiU})M7duE8=-__WdJd0yW((d(HiSUFjRAesnF;hbJ E582A^IsgCw literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po new file mode 100644 index 0000000..5ef2659 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hsb/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Michael Wolf , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 00:02+0000\n" +"Last-Translator: Michael Wolf \n" +"Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" +"language/hsb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hsb\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sites" +msgstr "Sydła" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenowe mjeno njemóže mjezoty abo tabulatory wobsahować." + +msgid "domain name" +msgstr "domenowe mjeno" + +msgid "display name" +msgstr "zwobraznjenske mjeno" + +msgid "site" +msgstr "sydło" + +msgid "sites" +msgstr "sydła" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb2a102c505fc365cc26b03f15be36ae53a66725 GIT binary patch literal 796 zcmYjOJ#W-N5M3aA$V3Q%prRPMMA6>aN1_BrCj=o;f;e$H4E@C3*uJxOt=)B!%O9Yj zp`b-dg;G!}d;B*LpTswae-mFJp1(BJ-6p0h zjM9_5>&N-JaP`lFWYc(=TVYs~2}o3lxde%&fEcAz7Gfo>%b^^DsW27>lm?5trp1!n zR0WPFdiLL4X2@~!F|4oEP{fw+B>c6|CRZ|qWQa0V-au4JTi!Eip71AiYIvkV@cJ(z zzM%zL((-6x z;;6+z1~i5b2e_!^1TgOqmb0bxT1NiIJ9kAT`t!l&QKd+yRV`x zzBbdjT6;qCO&O~smuU!VySe?>Xb4&D^^00#!MBtyO$f4@{F-iO9j3?bf`t2B2o~2p zwyk7=l^U_fXRj=qlYNk)q_@--ixQ7Av|x^!&!gt_s5u=83(bjfPhA(yF)dDw(6(49 g(xE7XY(CLI$@h2QjF>Y~CGB-Q`OPNP*p#T~UtPH3=l}o! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 0000000..6a511f9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# András Veres-Szentkirályi, 2016 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: János R (Hangya)\n" +"Language-Team: Hungarian (http://www.transifex.com/django/django/language/" +"hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Honlapok" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "A domainnév nem tartalmazhat szóközöket és tabulátorokat." + +msgid "domain name" +msgstr "tartománynév" + +msgid "display name" +msgstr "megjelenítendő név" + +msgid "site" +msgstr "honlap" + +msgid "sites" +msgstr "honlapok" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..17c2ef305dd1857471598c9814dc09014296023c GIT binary patch literal 906 zcmah_O-~d-5N#DdGI}r`JaH&)5YoFdn-E~uH7Y`aVI#rOdo$C!+hn$TGu=Jq1u~Wp zl#we4w~y=V%*{VFloj?w7_Ldw;*h8|6A~nAbBLLg%0R57aXBV?pgSz)8dL^`E$b3V zgzluQm+Q$twM1jb{G-WYrdD`t=zKz-@k|RPLr7MbY$|VwcT{F*T{lHSA9S0VMk)kv z@o_|FGR_QY=|g6C2o*n=pngDuNeF__pB(oC-$x-`;?ITad9ItJ{xl7yp%R1>!MKm+ zEii3plrgDOW>gl!BRoxLSl}YzDcr$rFua%MVM)k_x{Eck*=0>mBhK0(+|Sxv3MOH+ zWlSe5mseL;OUAVn4Zc>2Rl8gqbxP^q`f{sR9`ow+_1W|DgOcyf;IndxYxO#KpW$n! zj87?K72+1lG&i-U(HxyR*ST2@p3zwut3=3V2vf_#ob4GxtLH7I-HfGlPGxN!g6!m> zu2rf~xV2FUBQ*%dsvh~#w;T3g@Y-$<)`@*<_Xg|sXz8^`0vo3`w{FWCSPLM$0Ux(3tXRF%xxA!-?@RgXbW4N X6wTaVH}cT#{C_Rt)^JyxIeF(lUT;aY literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 0000000..adede4d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Սմբատ Պետրոսյան , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:51+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Armenian (http://www.transifex.com/django/django/language/" +"hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Կայքեր" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Տիրույթի անվանում դաշտը չի կարող պարունակել բացատներ կամ թաբեր" + +msgid "domain name" +msgstr "Տիրույթի անվանում" + +msgid "display name" +msgstr "Ցուցադրվող անունը" + +msgid "site" +msgstr "կայք" + +msgid "sites" +msgstr "կայքեր" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d1251a1e35f69a83374cfab7091bc8c1533c438e GIT binary patch literal 809 zcmYjP&2AGh5H?UiT6zEuoDdqsrB&tZZlo&hhE$0DNRb*5m4&;z>n2Wj?Un72<{h|l zmv9C#BRf+H9BoFBqSpU0m0W_EUFem>s%#31*9r$7!o06qdiz5;iFZ$KOP0c-=m zfWZ3$Y=!%+CGR2hXW+@|{pB`eNAQ1#egyq{rMK@a{4byp!r*52fKX4!8zlJG z0@_mEDlZ+&$C64@3#CbmT2djjHl7NjeXt2VC)bEVIx?2LxO6R6D%VtEzTmU}Vwpq6 z#o^e{nu#nt@0a|&v`!hFQ8^KMWTFe%80-1Kja12BPe+dDCZlNhCg;ai3J)$n5ng80 zPSSmzq&)3Vnr2C7FG-UGM1CPZsE~8R>+s}|r-#%|v;A~0fkfxRd7fLLT_wD+84ZN> zYNF{xUSCT~FYBV5`eLl)tFiIuK-DTteS|nYnu?L+xfFFqeeI>KRIt&`*!w1n!k0! z%g^}1h8MndB`rVIg(*=>MhBP5|0^{kC8A+9wW8u@#?~$)-7KE2*Y48t+S}3eyhrJ7 zH)5E*aqL`@Hnq~&fW;Chtqd%h8so7EC=xy!=8vIZ0mA&JXeK%@u?MSILAB8i?XYXh MCR^ABvp5|43om@$#Q*>R literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po new file mode 100644 index 0000000..b777ce6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ia/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Martijn Dekker , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 21:51+0000\n" +"Last-Translator: Martijn Dekker \n" +"Language-Team: Interlingua (http://www.transifex.com/django/django/language/" +"ia/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ia\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sitos" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Le nomine de dominio non pote continer spatios o tabulationes." + +msgid "domain name" +msgstr "nomine de dominio" + +msgid "display name" +msgstr "nomine a monstrar" + +msgid "site" +msgstr "sito" + +msgid "sites" +msgstr "sitos" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b6b923b91dce2a667ffcee9164681cbc69df245 GIT binary patch literal 791 zcmYjP&2AGh5H?Ui+HwFSIB}RGsB(5UP$k_Egea{Pi9l2q?$foqakFc$Y%givfddzw zffIK)@h054@&YiMz~J+PUsVU5N;8E z6N2s!VJFP5bh_Kbp9uFa*I%wOHlp*d#P^7Q5wHD-L)_hK9p51)7e?Fc1|j4V;sy)4 zjghRgx5`V$^0@?IYE&9D))ETT+IT38_F)h83S5JQbYLuaJas)Llxr$nt@Z3bU*;&{ zdT?xJ&ABW*p9ub5TBnT8K%Ap4O>`m~V?Cd`QVIT|EgjEI2GQ(I&JV3bPg?#Gz09DW zr29Ncc{+eJ&62@hk|qfW`HB3XLd>mhz>@>se+=m`+kdi`kVUW1d7fL;u0n5Y2G$6w z=&3cenxhqJh1#3vCDmT_3R6EL4_&rcN}fxsGni;$v~&tJJe+&qWO2M)E_*(NRA=%c zIK^F28>%iN#7e}EqUmIMv@JjFCD9>0tJIX%s-gP4yzntSrP3oPC?zNT_+5U?hg)5^ z>r7gHq>GS!nZfW>`G1*aphPsQT8kAwHnw&d=w`ii<8%bwbexPLM%`{5dyO@2+U=FV z1qf`=LoIcQTC}=^1zKEqX+ztc0`%C1zV{e?4+MI%5`^+tH>z5o?smIR5L!=nbmL#u CiP`i3 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po new file mode 100644 index 0000000..40228ed --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# M Asep Indrayana , 2015 +# rodin , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: rodin \n" +"Language-Team: Indonesian (http://www.transifex.com/django/django/language/" +"id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Situs" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Nama domain tidak dapat mengandung karakter spasi atau tab." + +msgid "domain name" +msgstr "nama domain" + +msgid "display name" +msgstr "nama yang ditampilkan" + +msgid "site" +msgstr "situs" + +msgid "sites" +msgstr "situs" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/io/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e22612f263d7cdaa1fddd5afc4943df721e68456 GIT binary patch literal 760 zcmYk3!EO^V5QYsDBo?@E<}kgrD&F-*DhUojsHK&H5)oAkcX!v>xZSl^w$n6Hp8~`? zz^m{C91tfiT)1)J#CX#*jP!Xt>wm`Moga_4J`uEg$P;9QJV36HV4sl=@&$Q_d`H6h zFJue(gWN^_A|Gzyf;>a_@irlk(0@fA^xx3mNB{HM|3)9=!9sqx|4spk?RnUWZ>1bv+M3c7}J+xAI)Y8|&OAZ~D?o*c1vU8$O{!}ZggGBp3@Ekmh%1H9z%;p!g-ompX)0jnv_(!G2j+PBR&C5%l;9pd_5BW@3C;i}Ec1(L4UASv1Ej`k?DU>cb^iGw( zX_136(WIJNQPE>#YsW!1ZRiG_KCHHb9Sz$9NO$`Y8Hq4xsSRjT<07Fk7sA1L+nBKJ loYhl2I1huSPL*24q{d^bylAt+xYrekl^#WYZf, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-20 01:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ido (http://www.transifex.com/django/django/language/io/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: io\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "La domeno nomo ne povas kontenar spaci, nek tab-signi." + +msgid "domain name" +msgstr "domeno nomo" + +msgid "display name" +msgstr "montrita nomo" + +msgid "site" +msgstr "ret-situo" + +msgid "sites" +msgstr "ret-situi" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cbfa0fcee3961cd2e49cbb4146e02d0d6f39af06 GIT binary patch literal 812 zcmYk4!EO^V5QYsDkQOQ-4qV_c96*UGC%X}lc0&+QS}9T^qIT(hvg>S|Z0yK(nnvm) zaODAdK8rv3Gyn-}uBRZWE7)gt$X|Bz$}&ZW7;! z2JxM^OZ+Ch?+>xz$Ja{VJ<>14gUkHKb;jP%`=6wnq?)`>uj)WgJN-EK7z0GCe`5K;c9{ib`n*saDR{)&cldDO^Bj6Y;J{77?P16iWBK;u6<1&?(k>_q8IVAa4Vz;4$wND7*w`E zr%epWP@8OK;7H~(lUb`3ymaN<>k-zZeMM_jKEqt_MBpTbPAUpinM|QFbZ#2g>+|`% z=6p>#5T~_NPwM5Vu7vEX0(EKY)u7wy?yb)s)xuzx?o}x2YcZt*I&tdibeB@KARVHy z!nHpn`+R%t^Lq`1;d?68nN)cU+kNT&H5!AoL9dt@Ecm`Q6B~n?u2S1>w4fZeD+-=K z6vE>+L~wQnWg0@8@~GMh*s&N$!w#08m0VuHWO)u^JeDApl0z&qguX05EH4nU<#{ot no5g{I3jGhOzA<(5k*hV, 2011 +# Thordur Sigurdsson , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Thordur Sigurdsson \n" +"Language-Team: Icelandic (http://www.transifex.com/django/django/language/" +"is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +msgid "Sites" +msgstr "Vefir" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Lénið má ekki innihalda bil eða dálkastafi (tab characters)." + +msgid "domain name" +msgstr "lén" + +msgid "display name" +msgstr "birtingarnafn" + +msgid "site" +msgstr "vefur" + +msgid "sites" +msgstr "vefir" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a370612f0380e076fb8d5015b8460e22e3ebc3fc GIT binary patch literal 795 zcmYjP!EO^V5Otw|v>-t_^u%GfwW^%m4Xu)H8iZO}DH0J;yKr}QosFx_cx5|HlW*Y4 zl{;4?B;dlK|G_UH@dGf;d5!AtgK{d?0xHMz}}#PG}N- z5*`u$5WMa$VcpNyYTXm!PlQc^U;lcCv0dUH#2duFi60ZM-L3aGu6dJ~LKtnc`viX< zAMeede`6%8?MyjoSvr=G>xobZC?*mzfv6p18l7JgI0svaOj^(eoEX{$%ayH4F<+KJ*QA|XGO7s}^c=~_J6=gk)ox0Aiyoro-WBdp`85ok-{ zv`OI1$&o+}heo24g+K)dc6jT&DyRx&Bh!OcLlhQ7VD3HFmB_!f-a5 zHJs0^M)J}}g!S8QsJspjl?%6ney@MLszTg|f+MOf-GQg`ik|7@r3NT5Ab?)I7qkTWQ!MwI+Sn~6;TtEFqZ%?{Ml?iRxHF2viN zfKl%i>y?0-TAnNa0~9JvK0-CU`m*f5L}{e&{z3s>efHgNuw?{Qe@YcuEU2*c$|{Hd J0NM|V{R5)E+8qD@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po new file mode 100644 index 0000000..49adfaf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marco Bonetti, 2014 +# Nicola Larosa , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Stefano Brentegani \n" +"Language-Team: Italian (http://www.transifex.com/django/django/language/" +"it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Siti" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Il nome di dominio non può contenere spazi né tab." + +msgid "domain name" +msgstr "nome di dominio" + +msgid "display name" +msgstr "nome visualizzato" + +msgid "site" +msgstr "sito" + +msgid "sites" +msgstr "siti" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6670c4513049bc28ddade753556c983375edbfd9 GIT binary patch literal 814 zcmZ9I&ubGw6vs!cimRY_@E{)M;6W*q>=rfc#)w#3s5Bbt>V3L9NhWM&mYs=dZr#mA zQ6X6Lpr=Bi1rH)3SP}c5co~YG{Ri|-(l(_JKKtg)e&4V8b#dY?0y_;{0RrGG@CvZ@ z4LAvG15>~ba1QtjSlvHh!k&+fbQi!6fJ?v`xZgaE&_nQ_!P^*}K0_t%C?K;bqZ+j2KGn>}Q?7TDxE}FJ*z=mgIG|QV3M4r=|4xN|HAawhryTK!E2L!H2Jpazc>9K_OP0ne8=?Pnf%S} t0DeLE(qwBU+cMcFlWm#|Qhu83gUQ#-YL5P_Z~fl*4uy^uKHT!4`G4$U244UG literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 0000000..335a1d7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Shinya Okano , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Japanese (http://www.transifex.com/django/django/language/" +"ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "サイト" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ドメイン名にスペース、タブを含めることはできません。" + +msgid "domain name" +msgstr "ドメイン名" + +msgid "display name" +msgstr "表示名" + +msgid "site" +msgstr "サイト" + +msgid "sites" +msgstr "サイト" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c7eb889d0737c61f3f9cdf5fecb1b1d405567984 GIT binary patch literal 993 zcma)2Piqu09F1BPMnMtuaA@OC7y=NN3X7X?K$)$=W~Hxr)?3 z14Lw5N5Bt`5i$sV3O?g>u=D)_ zqlLgmP5^Emm+Q)%-z(Uvx|>;HNYoHCQ7xWHDtSxLm`kZFjg_=c<8p(VHjjm&N>j_1 zOpPR&X*c;s=_dzzi9urdF=Roj6%kuDm$3Unn@q`&CM#T~%3Bm|r7fE`X_m05PHI@B zLh3EtiP*Fj+``Llaw|eQ><5>bAFyDQ20`eL4*7xa!^jrJ!^~y&eWT1DXTdlPu7o50 zkdN|ib7NVgxin2~l@93*ndqOpbV_x&jT>3AiJzhbjY;BQ^6v^TOqwA zluk1)>0ra!c37{kt*zCp3(S_qdM#G1dUd59HTU}KtGs^6o1dGX>0dsm`Q9`hRY(lA z(Z=npShsaNWF{wQ+~C>>J9#gfWn+DxJ8M~JHX~z|WHJru*ivTq=M3p8_ZFHR&6{ji z>6QtpY?r@gGMJ#%a?+phNRfAoe5=S`6#3gCe_rHIu!j1q$X^%vt5Vu2x4X3G{amUq zp+Z9M8_D?})vF+l%RP8;xlMuH9!Yo)}mUm?w)@Vn1mD{b6 k-YmOCj!4KDvf9LVZ?x)W{b|wkf7jYiuU^Hy$6>GZ590)S(*OVf literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po new file mode 100644 index 0000000..4a2ac86 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ka/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# André Bouatchidzé , 2015 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: André Bouatchidzé \n" +"Language-Team: Georgian (http://www.transifex.com/django/django/language/" +"ka/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ka\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "საიტები" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "დომენის სახელი არ შეიძლება შეიცავდეს ჰარებს ან ტაბულაციებს." + +msgid "domain name" +msgstr "დომენის სახელი" + +msgid "display name" +msgstr "საჩვენებელი სახელი" + +msgid "site" +msgstr "საიტი" + +msgid "sites" +msgstr "საიტები" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3571d0df5358253579669229841b9b0674978280 GIT binary patch literal 808 zcmYk3&u$Yj5XKD@kd{9}960qbaB5XK*{w=bZ3#jxtyDooRTl1(-O0v{?G3g=8lHhG zM^1=0;83`5<|UAL1zrHgO-mT*=g;-ZL>ynXAlKW}W%Y z++=<;(f5a0it|fz-yPPE%)RsVm&-!z@%L}6F;83(;x@}I)>wD>TpzGD%? zx-p{fBG@*Mmnx7K#gL$C3@Qs24MB<4HUY}UhPa1z27Zhsd1xF2?E99elpkxHo%zLo zxx#bBv%!l)*BnzBn1s(apQvQ`C3(SXHt7vG&v-PFABNq2m^cN zQw)^DdYV0yX(qD{WLche*3v9Z*(i_bt%@}lzK+aNnQlhk#>QI8kvvBqWZ}?yjiGTl z^d`SfKa;Ishx8ltWZ+Ss^oSp4I-Msq_dvJG#ysXsTTieiSrD2Wo?(Bc308(7jPrJT zI-RycEUN}|5)<0~e3(^4(@*eq^AN(B^(ByA9H zaK8)L>UJUyyg|()x4`mG{qbp{156yKcSbothkzB#sO}T*c^ZwBCJRa%oU(F?a;ny9 as%%Rb8VvYy(Pu;)79|CGLz*|^X@3C}72X*D literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po new file mode 100644 index 0000000..db4aa28 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kab/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-10-06 11:44+0000\n" +"Last-Translator: Muḥend Belqasem \n" +"Language-Team: Kabyle (http://www.transifex.com/django/django/language/" +"kab/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kab\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Ismal" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Isem n taɣult ur izmir ara ad yegber isekkilen ilmawen n tirigliwin." + +msgid "domain name" +msgstr "isem n taɣult" + +msgid "display name" +msgstr "mefffer isem" + +msgid "site" +msgstr "asmel" + +msgid "sites" +msgstr "ismal" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..edfaf6dfd1d9734e5c0bfbe1d6c1ca9b2f775b01 GIT binary patch literal 895 zcmZWlU2D`p6dkpG5Jg1L7k#*oN}1iHShr1G5o-&@7Hf^ZPqWi(y4jhKnYFD?wFMC> z_C*WglZfvvcBRX<`WGhp?vL;f=$&l8zzZj5a&yj^d-MBp-+O{}7I7UBAkHJ+AZ+a* zP9r*q0mKi)1;ihO)%`{E+4G5>?h^7_#8t#a?0-2)$TIRa@-^haQ-oYWevEt$IYPF& z6d5f9W#kOP&SP_J+4~O)WxaY5YpzI8=TMVP77Gxp$suGyNDZMB+V+@O0+q6mE07sz zHmgdc7OOO2ONE{s^Ad%L#Y2(lOwRLA(}@~=#xoU5;X`eniAXv#Je8TIQ!0vU^nNQ+ zG>|?x(~kl=nsKI4OCK=JeHd`PLF#(ctAOYEZl&M#To;9OhCh#O=8>*K-C^ntgLm7% z<@UQ+&LmTs1{o77VOnNBOmYc9)|zEu9quGt>fZTYgxe>jP&V(PM?@_aaT;*e^x+|U z!5VeAQP(>4%jJcIg_5>`@f=^YhH`JE14{PY8arCvE4j`n{!}h-sHGIQ z(|l2v@khpD1j0JY6xY?K!8jc{(%HM_ct*!WC~L8Zd>ERI_2HC0G#buy(#lvu$7R-3 zK8Un, 2017 +# yun_man_ger , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Leo Trubach \n" +"Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kk\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Сайттар" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домен атауының ішінде аралық және табуляция белілерге тыйым салынады" + +msgid "domain name" +msgstr "домен атауы" + +msgid "display name" +msgstr "бейнелеу атауы" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайттар" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/km/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bb7aa008dcbcc075e1761d3467c4858718db9452 GIT binary patch literal 701 zcmZ{g&ubJh6vv}hgwc~HK@T}rN_H~-+BWNo*dI{s;!;NMaVI;Qb|x8;tlJ(fqOC>H zR*QI;5fMCj_0JLVpZI3Bx(D&WC*S<|zBlj9ugh~E5yW}m8n6Of05YJCec%#s09*u4 zfH~kRQ0IIH-kw3|2k1?pa~7eipc?cF=;5h;0|i?Xb>2Auu9~Rpp+wpuMZyt~v9y30)%55{~Y$TXca!1RLBs5*w~; z#+^0{KjcbDi#LQ!M27D|H*mb4HOH1zLwyf&R66FVAhF;%!;eO}FnE6CT*1O{GMTho zT~7|hPHUj^a5~W+$xf5Q?L535^wxW;v)Q8-4VJZXLP1Zv1q|oJjtk*GO4Y%G5jR%2 z?vr?pEY5uOw}!%yRW;CwR4K!Y&!qd?B*WWz(9gz(XJk#A+%l|+=4iW72T!+M+6j;^ z_kDHb%TK;~>8sbitbFy#m!Ez4)0ZE7by%+@Jb~v+b9wM@&YLEG&zHyWw&$xCjrV<1 N>BLv>px*x, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Khmer (http://www.transifex.com/django/django/language/km/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: km\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ឈ្មោះដមែន" + +msgid "display name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +msgid "site" +msgstr "គេហទំព័រ" + +msgid "sites" +msgstr "គេហទំព័រ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..234ed90f9d04b0d947085edcf76799bedf808c6c GIT binary patch literal 676 zcmZvY&ui2`6vv}h#OSGK4+A17Wi}I0x1Dv1*dI{s;!>jbF_}%LO=iN(Y_~o3qE!*` zpq|x&UKE)i=tch%nLovsthyH;eDZxS^L;OG@@szXRRD1sxB#pIXMh4|;s`hoJOR!D zuYoz>9nkcA0A8F3f={5Afd0uKxCokpo&|jjIuH616l`rYeWw6;)kZTf$b_j1c7P-+ zd621+2|3M;usmoUCKzh9!&8elGW>vRBb1~l+hHH2k>T6p+~7n}6b|nt zctvw&!HZX!?u&Onz5C|tL+`#K@4ox`QB%V~eF(0%zJBW6XI~$A_tDqS(SJP0-u>|I PeLJ(wynEwa-3<5*Hs;_Z literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.po new file mode 100644 index 0000000..1f9b3b9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/kn/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Kannada (http://www.transifex.com/django/django/language/" +"kn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: kn\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ಡೊಮೈನ್ ಹೆಸರು" + +msgid "display name" +msgstr "ತೋರಿಸುವ ಹೆಸರು" + +msgid "site" +msgstr "ತಾಣ" + +msgid "sites" +msgstr "ತಾಣಗಳು" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e697676e25e344ab3036795c84fb257802265841 GIT binary patch literal 807 zcmYk2&rcLF6vr!~#!(aE!GrPejvDOj3{inWjFBG^l}K>(US`Yeu)FP~?FxG{h=za( z@duFun|L5b3?>>R!IS@qe}FT4@#IZjSz&p}XTE)%?|Xgiuk)R&1mhHP2?>!i$ScIg zE^-3-f%G6hk+aAj#QOdropyb!|`I<2t!zMmYaB^o>Ke>9m;a)w8Sjuq(>u5=iN{~1>X<6-fqwLJT%ft{xq>Y+rD1v^;5qe{2ReF zuiL|L9x!casF=_dW~2(>UQ(A*T!p&~Zbqt}8W}5=mg=|5Qj}|Dmql(_-NHH%*I3MH z$XPXj`x1u|aJghm8Wak%v$L+TO_OOp=SH$xXkF_-D*vksWm&l5jE{|vv>(8CJ!c3X zmJ1xLp5hG+pECt~%tQ=8RANeVGx#_hrG0ImJ!_gPIwB%jOhg<&-&A4_rwpJhory|K zu?iiPs;UDJ>3*sQ{Q+n#2fYD@@BzPJYY`, 2016 +# Jannis Leidel , 2011 +# Le Tartuffe , 2014 +# Chr0m3 , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jiyoon, Ha \n" +"Language-Team: Korean (http://www.transifex.com/django/django/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "사이트" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "도메인 이름은 공백이나 탭을 포함 할 수 없습니다." + +msgid "domain name" +msgstr "도메인 명" + +msgid "display name" +msgstr "표시명" + +msgid "site" +msgstr "사이트" + +msgid "sites" +msgstr "사이트들" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5b7937f60831ed7f8a2584d2470803c9833582d3 GIT binary patch literal 474 zcmYLFO-lnY5LNWFN6#K2cu;hjq*$z}74f4`X|a^mdv-V7M$%+SvbO#Z@BT7>i?gk? z4<4CE-c07@_vr9@53!FtMxG)MkeA2?UE~j5-r(7IwwQSLq4EgB0^XGm+F3!04{1x6 zOjYH4gmEZ!0S|QtWugDrx$FBl>j$q*s+(gq`=^MbrcYjq$ar3+=qEpCJI-mGOy+nKw=9$VJ3RFEpU z5M)%Z)FN}WFLjucvw4h_pme!hwqi3^&(x}wy9KQ_X#=h3CL}fggQ&^qc`_c3pLhSj zTP%5WHY$tzeN`AVs#TIYHPWptO_maIo)MJbs literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po new file mode 100644 index 0000000..9e43bb9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lb/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2014-10-05 20:12+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/django/" +"language/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8cdaf71ebfd0fb48a448a9c61252105fad1335a2 GIT binary patch literal 869 zcmYk4y>1jS5XTJ!kd_Z23Mz`BAW9VZ*1iBqHras4hZHF%qOc&^$*!~Kuxqc@z9c8* z5omb|$~4eGbAcgo$x=#8+ z>XN>ZZj*kI0{4eB6UJ92+&%K|qz9zH{k+Q9BKdFfyX5gT#_o`>lZX0U^1!_#rxHdO zyFm*334KF^^)G_3NxarxIhOSm6t+ffz+kN)M`Nsq+!`PLp&5c}Fjo$23my+#hZWj2 z6%NNd`>&Qc>Nx&5w%6Jtm3zKZ@VBaU+L{E4BQ&Lr_ElqB&wH-a1%Ejx9nWk6(cY_! zZ?pK{RU!HPdtwYuFEtA_qn=*mr1MM$&nn2~Fy=u^6#kXx+y97)#PF=dV3X@?vXC6zD zrV?gnAq>T%R7!Xb0tlykJ?)06F(%fefU~m+M-yV6KuKVCel=p5Ht#E}u+ga5rmdAx zU{r~fhJ(>3ujz@j&FCC({8$E+#$#Pu7=2Y#H#+aI)`l13;27HiU3fmq*o(|xc6V$# Hrj`Bz)`9LK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po new file mode 100644 index 0000000..f919c3b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lt/LC_MESSAGES/django.po @@ -0,0 +1,40 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kostas , 2011 +# Matas Dailyda , 2015 +# Simonas Kazlauskas , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Matas Dailyda \n" +"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sites" +msgstr "Tinklalapiai" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domene negali būti tarpų ar tabuliavimo ženklų." + +msgid "domain name" +msgstr "domeno vardas" + +msgid "display name" +msgstr "rodomas vardas" + +msgid "site" +msgstr "tinklalapis" + +msgid "sites" +msgstr "tinklalapiai" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a3ffa5f8e9a16433f94bbd311d4fd00b0ca322a2 GIT binary patch literal 823 zcmYk4&1w}f6vv}hg;7LA1i{7W!qQT5C#l+xsbj@{K%vD_NB6li=``(3G9;O4yX@Xw z@c~>5u65<+cIhkl5Waw(%x$d)e)*q-e@;F)zaC6{A{e)kCrF0eK|UfOz9Bb}@5mhT z1G$U*MuP7TG7<7?W8Zz$ugD`L)I7gV$UN##)Q7=)gOGcuk5O--PNN22jEY+b+WPgd z7V3rw=U)ce#_>*h=}5LOp)j>j8nmb->rII?5Sfy_PKEa(SmoiaLs;y~!qM7y#v*3)fQs)D|0OGh)4K(zBVqpMa5 zk6yYayi8z@@fVbF$`^q1ge}Z6&KMf$uIyB(dF5N6Y>DzE;Pc6IHp?)gE#W-PtkA9! z-q-{h>7`X}2rrxAYuD;hxk1&vLZdEQQA(OgQ75n^e5Ztl>3#2;B#w`cjs`xIQG4=u zkefOlKjc!Xi|ujM#WT_N=Jxv4llg!}tN4{t<5f-?e3O^QKF04;dKvP4VV(5p`)q?Q zUirdVd(zT%otr}GGJ(aR^8c=xK-EP%Rcl2>H;k=a0=ns^E`7EP<20StPdQ6d4pUPQ zQZ|`#4lBR_?J${QvH~0@b2G~k`JklN*bQr@9-V0c+Bnf3w)N-~wCse1;rSO2zCAqu r+|~*@p+YaT{l}^S5#Eo^Dsv#Pj~sNPQ(L&u8GWsbY1bb?#^T6dSODTh literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po new file mode 100644 index 0000000..65fceb0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/lv/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# edgars , 2011 +# Jannis Leidel , 2011 +# peterisb , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: peterisb \n" +"Language-Team: Latvian (http://www.transifex.com/django/django/language/" +"lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +msgid "Sites" +msgstr "Vietnes" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domēna nosaukumā nevar būt tukšumi vai tabulatori." + +msgid "domain name" +msgstr "domēna vārds" + +msgid "display name" +msgstr "attēlojamais vārds" + +msgid "site" +msgstr "vietne" + +msgid "sites" +msgstr "vietnes" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..15763b6b135ed69e3a6836cc57789f4ea51bc5de GIT binary patch literal 885 zcmYjNT~8B16de^mQjIY_7$1DNK1d*B+TAKCE>?{Q35Lc7tBDUj47<~^(9SeFgTR~c z?4u^U`VXoBsYc-+nCTDDAK@R+GhG31a`xOid+wQg=hxMd_Y83!xB)bPi@;mJM;|x~ zd;!Y9A#e%!4S3xjV8rLAa@`g1K5z}VjPoC-8G8x-3BC@loXPv^;0vf9)n@P|yDBWd@GJk74ypugKW)`GmianMt*ZC|MDzr3;I)t24`Mrj;iA(OS#!hK{IE zf7;+PnG_aU{#aNUQ8@@Fc@XljLSYyMm5Cq>0toq{e4TpF6J3P|cX|0Xg;UYworwTZ zSP;hYMkbVL3#+q;o?x}q(1J`8*`|A#2Ia%{uq>vksqdplwbn#S@`e+ z#+I$^My1mF`g+lN)3hl!im~pL^0khr{m-G)SuKqhYV)<(lLrWkL16|DD-{OY>|#SJ zH*5)ynW|}umqliztv+we@u?G?zpE)TKC5D#q^cFs)KY4XCyl7HTBx_zGSTL9I_sE- zRCidKYI&OSv^u8f7KH&-s}$1cDCK29H&KV<^ne12D4Z@Z_rdiBJA-X^;6AxNbMKIR zb9;jw_uU-~wh6RHI5}{ieX{F%G}uD5J9vYWKDk3AJ+}`X3g5W}vmT-H>^|nkMdtec bFF}c)zNzoN`bGxN<0~1whvOV4c{}?HucRon literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po new file mode 100644 index 0000000..ad7a47d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mk/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Vasil Vangelovski , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Macedonian (http://www.transifex.com/django/django/language/" +"mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +msgid "Sites" +msgstr "Сајтови" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домејнот не може да содржи празни места и табови." + +msgid "domain name" +msgstr "домејн" + +msgid "display name" +msgstr "име за приказ" + +msgid "site" +msgstr "сајт" + +msgid "sites" +msgstr "сајтови" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..49940c2e65f45207f3d1da0ec64052c7db62e61e GIT binary patch literal 708 zcmZ9I&ubJh6vv}hgwa#aBC)3}B|DR%Zku&QY`akD;!;-caVI-X$t1%h>$W%bRE1uI zidO}HASjBn;>kZnf`5rGv+6=0eDcjpzVA)m{90T%K@jJG%fKdZ0Z>4QBj6J747doq z1QvidK&W{SygGx>C(s7aJ&Vv1r~zFBeF1s}^ergZ>Iik`063~6^h2q%h2n=;^IV|R zSS;$7W?u{)*-ps=QCev1+%y#d)M z1$W>jo7@S8R}*@jB$Ut=rj#YEm4qe<7|E`9Bty@+uSJq|Lf0|9!LB7M2}HERts{ey zYpb|3CBt{Q*3#k~Ayc97O?VBYw^f}sr5>4EP@}Uk&jc9=o-^FzFei}X#-4Kpi{r^; z(sZGx9EpSG(B$!Ks(+&XHi&Z-FGs!Y-qw76+DxJiqn*(3uEPQbbmG9p@Gqrq!MC=XSI!I+fGB{ zs~t?2+Y$2BM?XFG)fZpA3+wdw_hU%E`|1M*eD%{;pMCWdjIaIlc}S*5;i5L4w*06s Vzt$bY3RS0$p7`p-SKnsk=nvAx^KbwF literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po new file mode 100644 index 0000000..e294a63 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ml/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Malayalam (http://www.transifex.com/django/django/language/" +"ml/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ഡൊമൈന്‍ നാമം" + +msgid "display name" +msgstr "പ്രദര്‍ശന നാമം" + +msgid "site" +msgstr "സൈറ്റ്" + +msgid "sites" +msgstr "സൈറ്റുകള്‍" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6b1748bbc009268de77bbecb37bd6a8740d8dde8 GIT binary patch literal 867 zcmZ9I-%b-j6vjuzKUs}28uiA+;~j)dyIUp2#To-bLbS2L#Vc>7+hJL zSzQ%KBUa6XwR?W@UoBDCvG-A=mdO-fj4EQX;npWgHEqT ziU!gLr}iSCGZ|+Zz4R&5+=r6uO;FdPUKu>kcgy3h=elU53;a!Nd!G2p)O|=x_raU= zCmxKu7|wI1Gz~H)RKm2(e3)i!merXqEW)GuAb%3!)ssRf)5lmKqE!}g8gQ2SP?b1s z5;Fm#%UU=6VzJd~6|`*_FYz^7Q|w>qSdu}5Vk(MbPIbOIdvbZN;5sw-s9fMs?Izw% z^EF+>hm6G(gv%^bTvrx@IXZdbvu7>wjLwQsHewO^Fj+th52gx*zLpoojEjLhEBBY|N3k?1%labzK*_qbAZ{_ R-~fWF(}$AdxrWJLz<+MDD}Dd~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po new file mode 100644 index 0000000..1ab16b7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mn/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Bayarbat.U , 2015 +# Jannis Leidel , 2011 +# Zorig , 2014 +# Анхбаяр Анхаа , 2011,2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Bayarbat.U \n" +"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Вэб сайтууд" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домэйн нэрэнд таб болон хоосон зай бичиж болохгүй." + +msgid "domain name" +msgstr "домэйн нэр" + +msgid "display name" +msgstr "харагдах нэр" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайтууд" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50 GIT binary patch literal 468 zcmYLF!A=4(5Y^~ukDfi$!~+C}wnPFJF-C+01Cfx`d)+Nd$!@!8i{OWN@#Fj!XTiWr zUOF#*Go9Dpi}UXj#3}L;d5t_n-XJS~1MyesFmHG-roX)+tl zRcT#-sn2u@PwUJ>Yz2vCuQ3dqk^#N&EQ1oH#dsSS2i_r^3)X2c&KMeDu0C}&^XR(; z&VaSCMetUGA)<-&0b(bO&t- zGL=q-r6#py2&JHOv)MF5HBm3rwwc(1miwHZmUJJF=KmvT;b=XYj;F)p5AY_72G#^+ zaI>!xBL=k%w9KV8J(4V?^D6Y;;t_O@zUsY&axgTBO|{7c>3-;NSXGe1MYDYEWDX\n" +"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/my/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..e706a9d3fd03cd541e4eadeaee7bfd1fc0d5b45e GIT binary patch literal 961 zcma)2O>5Oa6dkoHL_u*Of-YufOPTkQLT#H`(bg6V7E6tS%W2*;FD03IWG1$6H-flO z5h->dsNlktic9Mk;vW&_FZc)aB+ut-yYj-xxpU{-Gxz4_siAFxI0~EtBH$SC7^q?g zI1GFO#(?j@ao`tF>3#!4ReqqSI|+UQoCeOK{^lSdTi_qyGvMeDA?Lw4_yl+xT{DHD2ez06f9FDF<&Ys4zQgcg~UJP|AsJP+w? zS>!?sI@~s<6E>S08ygK%8K!Guv+8K}R_assx4oHnn, 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:50+0000\n" +"Last-Translator: Yhal Htet Aung \n" +"Language-Team: Burmese (http://www.transifex.com/django/django/language/" +"my/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: my\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "ဆိုက်များ" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ဒိုမိန်းနာမည်တွင်ကွက်လပ်(သို့)အမည်များမပါဝင်နိုင်။" + +msgid "domain name" +msgstr "ဒိုမိန်းနာမည်" + +msgid "display name" +msgstr "ပြသနာမည်" + +msgid "site" +msgstr "ဆိုက်" + +msgid "sites" +msgstr "ဆိုက်များ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/nb/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b18fe64e308e87b712a1a8153c73989acfdfed4d GIT binary patch literal 793 zcmYk3&2G~`5XTp20U3l42TmM@TT8Wx9YH@_f>6JtqPA4UaNpPyXB&Ig+TAqGJ8_0LOnTYeBuM6>n{de}E?ic%z|HJ+^`^6ix_#S&M5u6q`nJ`c2 z8!X&^X)K%B8|~4FY=BUhT4@4OHA1e4jECHi4>?5>aE;2*fwACK&$UFMT~n#aR4@Lk z6^=VjKTaH5bBei_`-Oam)@eg26sL+x6P;jVte1zb)P>v{l}=_Rh3NQoCbumr&sw>o zJf_fzlV>tcWU>ZHlE!N*aT3QYlqYzmL(jQxO~xBC*??p, 2013 +# Jannis Leidel , 2011 +# Jon , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Bokmål (http://www.transifex.com/django/django/" +"language/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Nettsteder" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domenenavnet kan ikke inneholde mellomrom." + +msgid "domain name" +msgstr "domenenavn" + +msgid "display name" +msgstr "visningsnavn" + +msgid "site" +msgstr "nettsted" + +msgid "sites" +msgstr "nettsteder" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..3fe91bc3e12c2d87edf259c00986243ef2367c35 GIT binary patch literal 899 zcmZ8dO;6Q86de^csVYhOg)b z>7+W(_;$@Fe`$$E$NHnmVxiVWY}i7FJrjjal?-WToy$adOCnc=VQrnH9rj=&(JWFS z^%kE*Y_<^GfXg0oBSJdn2X~ntuwa4)LFiA6`ho9*$d<&*)b$+jCYV3Pf+-q|hj;u@ zALc#c+OVkLQfJ(#BBaYa;RT&t<5{W&y%+Za?W!{gE|4{1)x8g$Og4BTSR{Biq>n`o z0Ucg5CJ&p<&CSh*aZS@zvE>BK-fx|{?2o!BMRUY!FSO?d2M8LzH;cmxiN&^a{GkzB zrio*wa++eFLJQM+8qKrG0ng1^6$P7;$D37Tv-`Cu4 zwt9u+Q=PoAJju#Qtk8;#{8dYkmlGGX6qS;B!+yxUeu*E(e|C_vrMgDmo M>F+>(1Mb{G8~^|S literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po new file mode 100644 index 0000000..9320696 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ne/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Sagar Chalise , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sagar Chalise \n" +"Language-Team: Nepali (http://www.transifex.com/django/django/language/ne/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "साइटहरु" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "डोमेनमा खाली ठाउँहरु हुनु हुँदैन ।" + +msgid "domain name" +msgstr "डोमेनको नाम" + +msgid "display name" +msgstr "देखिने नाम" + +msgid "site" +msgstr "साइट" + +msgid "sites" +msgstr "साइटहरु" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..150ac183f43f0a3e916f209d71dd8f2d0aca24b1 GIT binary patch literal 788 zcmY+C!EO^V5QY~hAQprW2TmM@TdT;)ZUm&=5QJ!2sS*)Uvv8m6PByM~?Un5$%{y@A z33v(M0#Cv_zyko|Y)Z>W-;O>0$2<1;$HSeE0o!fnF_SWPnGcM&&&*Bc3)5x3G545X zjMx2PcKrBSqkF*q6Z2?0|9U+LB3}Q_-sk;fAF}_=-sj!9(d6A{&nW?igIkQR$FF>_ga$TWRps*syP$}&o)5`f6sx{aeGqRu!IGoyckV{*axZdc4E4hK? z9XB5vjEz2{%!!j+yeDI&Rte;1s0tmPQmu^>BU{K^yj~Pmq&k6c{5BPbhS0HA4AD^n z-6(!0qFBT|h~p&cwW2tRSSU_uDgB<8x}Jy*M0^18^Wg6 zoD57H&1QT`cp(*LPA;isx1m?g%jJyD+nKIj@)oLCU_l}!tP&V5TsDW@xpQ^W>8w_( z_J8_LbHEE%Zj(Ez?Cgc3lhM)TRmANmJmf1T#U-w5KC7d1*WqiGst?&5jU_jDmmZ7# zOP#N6Mn)W|Oy^P+3G7d$`&VQFstm{F!eA+mwW%xz>dn*+x_xMdgIxtr1`zM{!=QNp u!%hE5Duq}oBDyI, 2013 +# Jannis Leidel , 2011 +# Sander Steffann , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Sander Steffann \n" +"Language-Team: Dutch (http://www.transifex.com/django/django/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "De domeinnaam mag geen spaties of tabs bevatten." + +msgid "domain name" +msgstr "domeinnaam" + +msgid "display name" +msgstr "weergavenaam" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/nn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f5e3f7ea51901eecaa172399c8645abcfc8f2dc7 GIT binary patch literal 633 zcmYL`&2AGh5XTJ^ffi1jIhb3k%2~St(mDho`XLoHA*vP*+)Q?|b-O!W*$!#mpnU*( zuDEdGm3S7$o0g39+y9I`Gds5bzS#K5$Q~0fi38#ZQ4`6oi08yL@r<}3Hi%zDs`*Xa zK49z*Y1$t@WGo~7M*5T#?qVdRw9Zo9BZ8JXOZ`}BLtC3AN7Dc+U1Kb+{9q%n^a*U@ z-8oF7I4;Fk@WDFNygWBpx$G2L=c5>f%9i5eyb7XlnrD;Gh1mCCBISw$6G8JGson^w zgz9spwCrz7B_$<_Q}|(1&vjm3$UUL?J zuE|%YyO;W|QI42zWuxQK;rbp_PiFfLBOuMUZ0Vp8E@Mu2YH`4)XT}GJ!!N~=*j?wP zf6c&)L!7$OVx{@+cN_l?tT|#fspsC*;>h_X&_dgVVYoBkD|fhw{MC@FtwF}p1!5KG U4KckTAapK5j3Jtm-8, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Norwegian Nynorsk (http://www.transifex.com/django/django/" +"language/nn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "domenenamn" + +msgid "display name" +msgstr "visingsnamn" + +msgid "site" +msgstr "nettstad" + +msgid "sites" +msgstr "nettstader" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..6dbbccd67cf9abf70f19b02497b47b17ecc146a0 GIT binary patch literal 806 zcmZ8d&ubGw6kfH8tR6)1Ab5D*TFPX11GVYKh*(>wBsP@jeY!hIrfg=y&crm}#fTTZ z8vPga7Jq?-q<_OKy^2S{KfsH4@J-e>;)8F#_uhQ(y?OKP^1{eLJBPTAs3I;Po*=Bf zMHCV55El_&5%&HEVgd0JaTf6l@%j`VhzCe-PCL$3?{f{=%B|UY zJ0DXsvwe>Z%W`Y98N{+fxd1^s3?eFo)DTIbZH|fos4k6|0-1uQyQ<*CTy+yVnCYE= zY8}Njn;pujr*e-)nry}75la=9B7}I4ik5VDSXZW+)KrVd1L9rl>po^#zQ@z+SO2Eom6rL^p$xmBt(X{1!B zgld_Fa35FW3aX69EP-428Vv6wv#`KLQ{KiJ(dy9_BMnA7A#5wfG>>4ht#vo_yner5 z(6%FQvi(9NJ6^uiF(rS?J*m7Ux3*Q=m~S5xe0Lpxl?i;+po{Biwy!<>NiNC|wP}j8 zDi0f*q%_yrSxuIb4H3zhi&hAwU9L}_8G=-9J?W)1A)7Mos1QVV7OG0I47pob6mX*g z!BW|E%qw$fCg!u5W-q}^ZD5^=8AJ9wdyzdeV>3A#0Xm1~0J0&*@3SFhjz;+fs?eR< jT){!_gZX5>WKYdU)Z`5v%=|yZLB-e{WWy83HgNs`JFX6i literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po new file mode 100644 index 0000000..f0bcd2a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/os/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Soslan Khubulov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:58+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Ossetic (http://www.transifex.com/django/django/language/" +"os/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: os\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Домены номы ма хъуамӕ уой табтӕ ӕмӕ хъӕнтӕ." + +msgid "domain name" +msgstr "домены ном" + +msgid "display name" +msgstr "ӕвдисгӕ ном" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайттӕ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/pa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..2d6701ff77e3046dc717221dbc3dc067970929db GIT binary patch literal 684 zcmY+A&u`N(6vqP$Aq7smA#pI;rPbudnSgFCohJ4}8d@Qm0(Y-*GgpZn*)H9#T<8Q> zCUN4|0q+0@BqUD!Dad~cFX^D-NuPY*v%l}f_V4ATw*ka;;0~|@+yDxoju~(ZI0J41 z=fD#138;I%03WUd!B@}~;K|h>xDBd7>%KRj%b@Q-!PZ3GcMX80ChB=XCQMbZQzTi* zgG`l7$a!vrP?Dl-%w(>@LtZIu@xbIF!;dDp!KtDsOrEBA zTXSZ?i+7mi6s?i?J|;1ayC{w+>8_HP5HR9H{zB9<7rrhg8#vxT@dJ8~tP+UufEkNZ z&7>)qRhpv5OiE$U0T&rB&_g&4lv_npc7z zwzi^CG@VX6ww^6U{G>BfWi-FtUnwpJMHP$M;b4ETyLgAVL&9w(Ethb<(+VzX`H79- zO@-{C;W5*O+y1k353etL^}j}3<6SvanUFa}>qo-=J1|8R3zK4^S%LSIE)7MpYD&{z z>!EqtZ%K5wkK%SO47~f{FJ5_f?%gl%&b<4Ky!-Cm48%2SFTwNCU%dA2TjO;9?fh&! NGw, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Panjabi (Punjabi) (http://www.transifex.com/django/django/" +"language/pa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pa\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ਡੋਮੇਨ ਨਾਂ" + +msgid "display name" +msgstr "ਵੇਖਾਉਣ ਲਈ ਨਾਂ" + +msgid "site" +msgstr "ਸਾਈਟ" + +msgid "sites" +msgstr "ਸਾਈਟਾਂ" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fde457031803c67e15d1a20f5baea233480b8ee3 GIT binary patch literal 944 zcmYjPF>ezw6gE&mIv7v~CWhC6s-bdXr>)vvdnr&_Q9&VU4|ezBCQk3{)7jygsuK$f zYbQ1~W)_f;7@&WHAHg4h=SxC((s!Tlz3+R^zVolynG1q(6LAj_BW@wyBYb>8Tt|FG zG!fqsw-LV)UiSwv2`6==&@>^u@zd-i&k7NFXj242{ zD)0B>`}*+nCxNn294aR*iF*<{CKF177MX-ZXl)!MMmwJqdI&ZbiL_t}aN@|;Nk`c{ z6~jtT{__%x9jk{W?ZWhB;^DD%*pFo^yHF zXq07HcfO}OmZ$Z^WR20OCX|ldjXZ7Cg8jYyo$2{`odw(YU8Tl-4Rbu8lcx@q_@Or- z>50Nh7rlyi>DpB1XC2Fe?&!pHl7myn#hu zi57Geao7R|AuQW|N5o#@J04lh5T)Zrfx, 2011 +# Mattia Procopio , 2014 +# Tomasz Kajtoch , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tomasz Kajtoch \n" +"Language-Team: Polish (http://www.transifex.com/django/django/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" +"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" +"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "Sites" +msgstr "Strony" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Nazwa domeny nie może zawierać spacji ani tabulatorów." + +msgid "domain name" +msgstr "nazwa domeny" + +msgid "display name" +msgstr "nazwa wyświetlana" + +msgid "site" +msgstr "strona" + +msgid "sites" +msgstr "strony" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..5d885d185c84b3359d9a0466e165dadbad797f9f GIT binary patch literal 797 zcmZ8fv2N5r5Zyok$xuWoprIJLMA4q@gD4jthY%r=f^y0!82XJp=iA8MwRYEB?jL9= zs41wBXh2X=+<)*9h#qFo2^TTa^Xz!vyq%rdpX;md7}+hteL_mOO?XT2_Kk3Z@SV^l z{2<&R{33YXAHu3%ue7{1^6v?EFXGSF7#q<3SMomZH~BU4E7#k+b@E>S9(hV(w9Rf3 zd_7**o8P}QqP6x?I2YC9~Kwl2kN z!Dm-;nI*-=$Fh;pXP7yDnDf_Ytkf!j{7k4q2Par-^Jlf^mhYH55KA7hy-Lv3^21s%S)kJVj9@Frq@6qCtzWF>$U=!f-mB zcAOWLV?6IVa8k Ku>XawK7+rm#NB@Y literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..ba716ae --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Nuno Mariz , 2013 +# Raúl Pedro Fernandes Santos, 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Portuguese (http://www.transifex.com/django/django/language/" +"pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "O nome do domínio não pode conter espaços ou tabulações." + +msgid "domain name" +msgstr "nome do domínio" + +msgid "display name" +msgstr "mostrar nome" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..81c63003828b402e662f431a666d913529fea74c GIT binary patch literal 824 zcmY*X!EO^V5H(P!v~Z{p;?%<&6ID)j169%usZdHQRU&E>7Ou$Ioo-xh?3L{$4d1|( zFX({_9FgF}At!!=F{feZmKVw{L{IgztnF z;RoRX;Wxqa{t&kO|E(2ohx}*4MqH@4fl^8zb7vUP*_RB@={9PlZ&V#1tVFN@)kFR?eRZH3wUY6fI~2PK<4XWzv>~ zm@oNkBbQmKxcpc)H2MNl$4@i<291?k#gJVHmFr-Hr8bTaY%Vk2uX4*19YZiYOZbsN z;fTv$2!}DW!f2m|5s%ssMRC~P3!^Y3A|K&9>1(ceZ5|%*))R<2@&41jkSus9tmBCh z$`-U3Vx$PO=E zleQ~W7t)C^7G3Xka>6@no`3Ef4L???rb+S`I%DbnbsfX, 2014 +# Eduardo Cereto Carvalho, 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: andrewsmedina \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/django/django/" +"language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "Sites" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "O nome do domínio não pode conter espaços ou tabulações." + +msgid "domain name" +msgstr "nome do domínio" + +msgid "display name" +msgstr "nome para exibição" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "sites" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ro/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..7ebbf59254602525b67de32e44d2ea9613f42bd0 GIT binary patch literal 857 zcmYjPJ#W-N5M3aEWGD~?6~#~x*^2hg4um8QPEbN3MIzyp82XKG&$p3p*4ka?5|oaX zmICodprWBj!(X7HN8%5_tep==dVaI3H*a^x^Yi}9M@Dg*@Q{!b?hrl@e0(9?Bzz^z z6TT7d68;dp?k{1+=hr&jJ>nmP2ZVt3e_dy6iTF3MuM2N2V0&z+Y+Z?y zR?q&cWtJSa^dVPNzNR{nbbw`;vb5!V9X->-$FcqhM!yXY;BTNiPmIsK*lNjwdxe*2!bnr@ks& zfnqF-l`eaeZ}Fuooj+?N4d28<4;7XvEFCC!dCwG#4hB_YM8&tXnb;JtZkINDvI1S2 zg_vc@TAYSqh>xkCtI2Y7dV0RdvN)QZ4e=3i6s^stNffOFY#>U73a0Xa?KTrx(a5w@ zBT+Sg4b+, 2014 +# Jannis Leidel , 2011 +# Razvan Stefanescu , 2015 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Razvan Stefanescu \n" +"Language-Team: Romanian (http://www.transifex.com/django/django/language/" +"ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +msgid "Sites" +msgstr "Pagini web" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Numele de domeniu nu poate conține spații sau tab-uri." + +msgid "domain name" +msgstr "nume domeniu" + +msgid "display name" +msgstr "nume afișat" + +msgid "site" +msgstr "pagină web" + +msgid "sites" +msgstr "pagini web" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..cd6daf44551d5c6b906b79f92c69d5ba3a087997 GIT binary patch literal 1016 zcmZut&rcIU6do0SqS3@Z{Bt|A2neQt;s0eEYq5`+e`dogcUQJ~G5r;4V-Gt^?bE zi#Bi>H~{j%32+1W4LIE&pwHzOy1JX-{)>#=24_$&Tw<&Wehj_`{tUhY{tmtd{t0%v zUtm}mtn3Ql_Hlh(xcR++tQ*fFBQ+~8ORB~V5h+rlA*mviiVam_Wn4|Db<#~yk(%O! zjCiTDtQzTNU95NX>>n@F=-7E_wvfatvSRprmA{aQj$##1bw#LJoLQ93I5E7WYf+Uy zY}GU`#{p#)o|gGcB87pLKN3a;l=u8G?)lswC*Kde@nO&RJP7%sd=+&9-V%Nh-<8vQUvOQ9*Vp4;rVHMz)#6MHp4BC2EqF zrDz1S*wQ)@iUyaBX$HC6>gsCNxVF)fT+3GCMy~r~J*uDDb4e>Vlqt=ZX3wv{&w7~| zT&+}CZM}(qG;+=4aGjBwBJ7oDX~O5_IX-c&bF-FY!e><_u12aB(8SBgoUIv9(#kB< zTZyRixj1R)fK;<{)Zyq9b<=QA_4{5J`ZO>=F7@t*zE9KS5#%@*!+h^kAslsS$Ke(H zJZ)@rEk%EH2p0d;5{91p)X^2gv2*+6&{-XQF{U@O5Te60<>> z*$?*E9@%~S4bQRNC)>71=?>w9{0OD5c0b*u^bOK4NMEC{3+p!76C9519?Xa7mNOpO uHl>^By_dd4Z6|$a+v)o(v&X1H3H`3K!{IvjhA}k$-x3T%JA0lbSokmI_)&cT literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000..353ed76 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,41 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Eugene MechanisM , 2013 +# Eugene MechanisM , 2016 +# Jannis Leidel , 2011 +# Алексей Борискин , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Eugene MechanisM \n" +"Language-Team: Russian (http://www.transifex.com/django/django/language/" +"ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" +"%100>=11 && n%100<=14)? 2 : 3);\n" + +msgid "Sites" +msgstr "Сайты" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Доменное имя не может содержать пробелы или табуляцию." + +msgid "domain name" +msgstr "доменное имя" + +msgid "display name" +msgstr "отображаемое имя" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайты" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..fbcf69a0d4814401536d059a65c511ff238f8d1c GIT binary patch literal 822 zcmY+C!EVz)5QY~hAPfS;0SSr2oT^mS#&+5&!Kn+Pv{EGkQDeAo?5*R*-nDi&Nt0*b z$^-Pkp@*K}02erzo_Gfyf){|s8~YK zHqYDr*uFOG`WJz=Mf5VmHHiis5?QcJfM5lOmNmmn1FyO2`JRVHy3fa%?Rn{IQtt_EtbyMOHr7`?4Cf`& zhDM4Boiig<03D_bjucfN%>Xv}EGshgEXC3DdMt}AED-64rJP2b6#?{eIc7ts4U8!R z*PTozbz{3_2mHtuxQlr%BtNfq_0U~$I(wa+%gOz^=WOGNa)CRVmN=T>N5;id%tRaF z0aKcr@J+N!TbDk&)&W;^N5nG8L>fS=pP9eA3_uT^Zaz{hr@K-WIsj45A9c9ahQ)1I z6JhADz*F!bfST9}8?d|#Vl!N~NgtDqwnKW=X_7PYsyd#@vHcyY6a4Oi7uBb;uN-7w yvjHB)*#{_iGUI9rEa!b`|A$dt9pmXv>trVTip{vFPS7PJ5&v}~+O8oN!pI*0x#vLu literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 0000000..9b3f318 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Marian Andre , 2013 +# Martin Tóth , 2017 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Martin Tóth \n" +"Language-Team: Slovak (http://www.transifex.com/django/django/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +msgid "Sites" +msgstr "Sídla" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Názov domény nemôže obsahovať medzery alebo tabulátory." + +msgid "domain name" +msgstr "názov domény" + +msgid "display name" +msgstr "zobrazené meno" + +msgid "site" +msgstr "sídlo" + +msgid "sites" +msgstr "sídla" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..77d008fca7a637a78764d75d120f9b15638bb651 GIT binary patch literal 845 zcmYjP!EV$r5H(Oh3Lqg4oO+lGqE+Q=vfZjB%R)ull`2uO>IUv^GR?Y8?8x?J+p3?y zm4AT?ocIII`~bK90E{;*%Sg}9W51bELisZJmmy-WF?LE%Wt z_l3g*x>3BvqnO9r5XVWhy%EJxL_&Uyjr2K}x@{i4;N4A#cap8%Mno3871r_82xUv* zv`JuOWTn4<1u7_4@*G~){@^NXT7S2oE|g)Wt5+1Oim51&rzolf#-(mhNugkE;#{3{ zI1$)$AR8-$(O%HW=;X2e)srryj zgt6!b@6#dQS?c_^PSNlKmFZlnB7vO~>HZa(fGvYjIW?l>Lv1RXfU4)N9rXIpZU<}X z8Fg?lh~YIvK$6z&k{d7GO}M^ZT=nRxOIMrg{eX@AizVCF6)FJ=!P3Aq7Eg3TzYS`G pw#58gHy}#shh;kN{24YOqh6njE1@*V3K_vq9V(g^pR`>i`vc0k, 2011 +# Primož Verdnik , 2017 +# zejn , 2013,2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Primož Verdnik \n" +"Language-Team: Slovenian (http://www.transifex.com/django/django/language/" +"sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +msgid "Sites" +msgstr "Strani" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domena ne sme vsebovati presledkov ali tabulatorjev." + +msgid "domain name" +msgstr "ime domene" + +msgid "display name" +msgstr "prikazano ime" + +msgid "site" +msgstr "stran" + +msgid "sites" +msgstr "strani" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f4147bebe6b0a86f6aeb83d4bdd7faf1dd0540cc GIT binary patch literal 810 zcmYjP!EV$r5H(Oh3Y9=TaH_;0acEU}H(7*QQWinWR#c**Y6JJ##Laq}*jbO4c5i$D zSCIIIiW3(&ap-?=;1f6_!Fac&9qHxSo;S}P$3GY5J_?STj73JqxW)Lu2=R?^o$;N~ zVfo3S!6Uhs3V4LzR2EUC6h}k+vpE0jpLP=BYK78W#-UO zh2FXpHWV3s2v7P`e%3f!I&PT;Bi*#DE1z0NZ6wBl%!Z&evS)uiF}ygK%6zDaG?As?V4 z<-2dPExC4~3ws?XCwnHhg*IghYklqipECs-MZ4A5VI{Y$t0@K3OsCZCtix>BT{3XL z3(4|&B=&L0zo=I`4H}x$6L*OI^n^5>o&f!N|G6HU0(fPbtNS?Q;Q(1k+96m{;R%c@ f%=z+FOQ@PHfCdLR8mgf>n_u$f=fFEoKT7-q9oOe# literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 0000000..3ce9830 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Besnik , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-11-29 23:00+0000\n" +"Last-Translator: Besnik \n" +"Language-Team: Albanian (http://www.transifex.com/django/django/language/" +"sq/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sq\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Sajte" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Emri i përkatësisë s’mund të përmbajë hapësira ose tabulacione." + +msgid "domain name" +msgstr "emër përkatësie" + +msgid "display name" +msgstr "emër shfaqjeje" + +msgid "site" +msgstr "sajt" + +msgid "sites" +msgstr "sajte" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ac57bb43961646cfe438ce8dd08b6619c68ec43 GIT binary patch literal 935 zcmY*VOHWiW6t0SojK&yEOiWxH7ZM2ROgm^G7cLqQ5~4%`7x$ezWw0>uJtlSZE6$PsA}t?CTSu?BZ5U~Dw$9) zu;N@ZDwQ@jH;XQe&6ed>G1ZMy_hCJ%pSG8*DGe6pX6L5QzknB6VG6%iDqL;5iEngr z%a!muGc^Y3iZE8Xcqy5oqvyJC*RnKpTBW+0sagc1mCT*38G$v0`TDvMbvmO>!$zQ* zozTX^W6*Wu0rilxIOfpb55Z**V$R_SFhDuR6LGm$8jl|Zx6{GKIfI>@ZVPJIAog(V zDG!bni2vyG_Fj9}AN$X~Mf{#W^atSgF-FH9`5f@T%pqpJbW1t3-}>C|x8Go<1xUI7 vih|sK4}znR+r{WpXXrtZ_!HE$uo`qZ3XTCooKL#+-+d$u4=bHHr@Q?Hd*?T@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po new file mode 100644 index 0000000..47e2e65 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Branko Kokanovic , 2018 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-01-30 10:13+0000\n" +"Last-Translator: Branko Kokanovic \n" +"Language-Team: Serbian (http://www.transifex.com/django/django/language/" +"sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sites" +msgstr "Сајтови" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Име домена не може да садржи размаке ни табове." + +msgid "domain name" +msgstr "име домена" + +msgid "display name" +msgstr "приказано име" + +msgid "site" +msgstr "сајт" + +msgid "sites" +msgstr "сајтови" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a07485531e7921d2a3858c0ed2f855102090f7eb GIT binary patch literal 714 zcmYL{&2AGh5XTJ^AuVv>%wagRN>n*(hd^2!NBVhYcKFiwA@cP$Aqn~)=%el@`q=LmdX&``>+T@B~jo>DUTLMz6&e zfLGEO?O~vFu1e_RG??y|b=uNqYIm^46bo4>I#zNn;Ei%8S{i5!a4ge=#%TzZNYmwV z*$T0{mCmb>y&WIYts7n3bE+IYFcX_=QwZ2P(c%Bt0=(O;w@XIl!pV{zS~vFsOjV~o zd)k9lm^I8gXIaK!V*_Hyo@AWE3t)h9%y+W(^{;-`iD6yA`kcYl)v5$Ftcf)oYue3T dLMo@vXnY$8;QLTU5-(?=UhKIhe*sfTzzzTa literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po new file mode 100644 index 0000000..5e8304a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sr_Latn/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Serbian (Latin) (http://www.transifex.com/django/django/" +"language/sr%40latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ime domena" + +msgid "display name" +msgstr "prikazano ime" + +msgid "site" +msgstr "sajt" + +msgid "sites" +msgstr "sajtovi" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d67d082bcf7f3c016f80b7c580aab571f68fcde7 GIT binary patch literal 792 zcmYjOzi-n(6h2A;VLBiNrVfv-Rdul)0cjm&=`X3M5m9SkzSys}Tl<~myClud$jZbD zLi`6XG35W?4`5_rgm+0pc+z*@^Z9!}@5iI{_k!&nW0Mgx9x&c9oPA~7VSHn>8Q&Qj zj9(0=`@>jw{;h@XA@f_tV}|?xVNHmA=FiM7?kBUy{G0hc^V;o&ZiAUa1Ye804A+m# z>&(?(8p{@TURX3D&Jj{wse*u1g^(yBZ6VQQ-JPN-m|7)hKsR93(6mHan7UNcxnBGi zD-36xA4UuseTj*cC#igmjVUxmkX|avw0DNJZmjH^tVrelC^ItF5qN`_u{>x{S=P!! zWif(w5I&PZD8mkfVH9+Bf-neJD9>eNAt~DOs, 2011 +# Jonathan Lindén, 2014 +# Thomas Lundqvist , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jonathan Lindén\n" +"Language-Team: Swedish (http://www.transifex.com/django/django/language/" +"sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Webbplatser" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domännamnet kan inte innehålla mellanslag eller tabulatortecken." + +msgid "domain name" +msgstr "domännamn" + +msgid "display name" +msgstr "visningsnamn" + +msgid "site" +msgstr "webbplats" + +msgid "sites" +msgstr "webbplatser" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/sw/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..1447715c8170a59dc299829e66bcaeceff181939 GIT binary patch literal 781 zcmYjO&2G~`5MH1Z$$*47aN;oBT2U>0Vyh_Eu>mm7em#6DKQlWbOjdAjn6V^$^x5K&;HA0 zhAOs;VWUbZtzfmT;B z9Mfphz=@EVDBvY^L+J%GwKpmj6&CzZS924CDqGhKI(=Af2U`lB4ItX?do0lx z3oF^NR0svaOwKgI1PfV5lXh(=ohGkOwea3*{, 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Swahili (http://www.transifex.com/django/django/language/" +"sw/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "Tovuti" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Jina la kikoa haliwezi kuwa na nafasi yeyote kati yake." + +msgid "domain name" +msgstr "jina la kikoa" + +msgid "display name" +msgstr "jina" + +msgid "site" +msgstr "tovuti" + +msgid "sites" +msgstr "tovuti" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9cdaa1e61499291b4abd0b89d000a27b97421518 GIT binary patch literal 714 zcmZvY&ubJh6vs!c2%{&jdWhhmOUX`B)NQk_l>UNB7nd@6k2~3EN+ua5S+_m*BJH6! zD|iy5A_!*1;?+Mz@~8M_R^3Y5|x!kGn5^0ott=1l%{gHZ*!U9^>J=-Y8Z+KFH*cw z3GP6PH@OoGEfe|}6N+gEQOZbXiBLj7i1)-BS$ocP9ZXg+T}AW>dqkE9M7+zb!)e8} zRot11q32v{Y0<8bnNa8{+y=@u)s$_iN9Gyy=zPp`fm6W?hEiTgg%H;i^d!<~*wc$^c5E`fiPx{HSUyt2ae zUZ&f4Wv;8w8i@*T>7mJ_&KX*HE#3c1f(MTWYFu%Jw@p=8hIHAKwzu3xvuSTpqX#`i zTirMc{yg|!!G8?Xvt~RF-oqTB;J=3H+u*0ce}{#c^0HYyyJGWa@IS)zB>0QQ=^}X0 R)=toP<=%%z2d7`wqCa?I_#6NL literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po new file mode 100644 index 0000000..883c04a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ta/LC_MESSAGES/django.po @@ -0,0 +1,35 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tamil (http://www.transifex.com/django/django/language/ta/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "களப் பெயர்" + +msgid "display name" +msgstr "காட்டும் பெயர்" + +msgid "site" +msgstr "வலைத்தளம்" + +msgid "sites" +msgstr "வலைத்தளங்கள்" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/te/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9be611dfde741b1038b00badd4eb6934ed7a7fc8 GIT binary patch literal 687 zcmY+A&ubJh6vv}hgwa#a9-^l$B|DR%ZaeFWxNV`*#ifki<4$&(GLsBR#%+(DT7}|i zJ%}KBQ3PeilPCR8B!7x8v+Cl5Pri9S=VgAauFMhGW#Brn4O{_oz}p#c4R`@u1zrOy zzz4whd<5nf5c&ez0frY5x(S+t`o347tDtW|p{zCEcL{({YknR|g(-7(f+Z_BN>#yx zT-=SY9Qnhbu~tWXV#!`go^Wl1k}*z?n9Njgz)Phq8JSF^7Dpiv>t&4`^;F9XeLe0 ztkN-l$fOho?{ksz9N&d)z`dWhZdb^ux(7Wnt60WK!dVgHgy&UO;m)D8WgLdH*{o~* zKr!XV-H9r~#gqO@{--;%JX{M#d!wD@<7qbvhDus4VX2c6UT68S4dF)$*~gPZrVY1) z$H^|)T-Nz-O}QpJa-vcpvlwqa753kjenv3PE6sAUt8`&vEX&q4gN;63Tn8PAZwxS9 z>j%iyb60, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Telugu (http://www.transifex.com/django/django/language/te/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "డొమైన్ నామము" + +msgid "display name" +msgstr "కనిపిచ్చే పేరు" + +msgid "site" +msgstr "సైట్" + +msgid "sites" +msgstr "సైట్లు" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..bd461b668dca342ee05db498f43f27c480f420b4 GIT binary patch literal 898 zcmZ9I&ubJh6vv}hh0%j}@S=x!^9R|Psc4s3SH#*vv5QL`y{EJ3%(Sz~l4RZPO+~0b zdbCKr6%T?Uh#+PT;(sFf8~g|KWv1)4KKRb}P4am!FZp$LW(Pr>1YH2dpi`i2kP8Dk z4k|&jpr4@Apx+?J{Q=Fm{7B860pA6k13B)?QG^QcAK(|kuN*_@JoqxW+t2oW2o5C( zFmwXs=5c*pxbr6gSRD^?%@m3=hI^tm&$CIETY93g)f`VGsaFR@md*^_+4|5&(Jw2hHdja1h=y zRhq<-a#c_*WQ6aDQLgcPMx|g}Qk`TJE|gJ@Z*I7)hH50YQ+SG^k%;~+Xu#7UO&N(9 z?MFDyXpS#sS`Q-MAB{#0?Rw{HY}4U>eY=Sj`?bE#{L5Zvsk1PBhp-WN^YFfm!+hfb zTvW47?ZcbqyoF&ZshDm*j2B6B%DJ=Fm?R545xtzJ5pJ&L`rnMuBlEh&P||`d3fWf? z=7Z{2wZj&!({|AEkS(8E^V*snTW%w3URm?qmM^UNY|CfXys>82mQSqNbBTjqx-GL+ zmF+pw)mI7B)`hTZK2-TvN19L8ymxI~&!^VBwIwXRJA4?dnr~G*AU;+HZyhG;aVE3; JH}}Cy`~^lQND%-4 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po new file mode 100644 index 0000000..89df6a6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Kowit Charoenratchatabhan , 2013,2018 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2018-05-06 08:37+0000\n" +"Last-Translator: Kowit Charoenratchatabhan \n" +"Language-Team: Thai (http://www.transifex.com/django/django/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "ไซต์" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "ชื่อโดนเมนต้องไม่ไม่ช่องว่างหรือแท็บ" + +msgid "domain name" +msgstr "ชื่อโดเมน" + +msgid "display name" +msgstr "ชื่อที่แสดง" + +msgid "site" +msgstr "ไซต์" + +msgid "sites" +msgstr "ไซต์" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..714a178e1bf831461d515920135349de44da3996 GIT binary patch literal 799 zcmZ9KL2uJA6vsUnAO(b`9pJ*@9XAcPNnvV9>4X@aG_;Cp1nzF~mUvC<%693>XW+Us zM=o3@Ap{Z+xfY^ddetn5ci0LxJkSte0(9U5nqW0 z@twFuToB&(i&*vVD+}Km=_zrC@HIbPVXQ;?iS#z<1?d{;%GE{QI;r>FC8ZQbpV@W7 z&-uDO{Q8$cwne;@4lPRxgiKdLDo~yyc( z=6pqYgeSFBSM|l7E~WgFUU#Ox8T9sh-R171S{UrosiLB;rX$*(!xLAhla#6rX(5b7 z*Ljuf@z&Dk*E&MOyDHV0RCx@ofpmY{q#7pZmt!MJzNbxPV^E{{&~_SaSiE*N6zo8> z*$$Y$@)8Z}x}gL?-JYL;$j;C1LxHBC<|PcIfr0+Dj*YJaY+A#oP9up6~3*p XeD>MQzA02dmrybMuh{Z8@Jsy$N3h=y literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po new file mode 100644 index 0000000..2372c14 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/tr/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Ahmet Emre Aladağ , 2014 +# BouRock, 2014 +# Caner Başaran , 2013 +# Jannis Leidel , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Turkish (http://www.transifex.com/django/django/language/" +"tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "Sites" +msgstr "Siteler" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Etki alanı adı, herhangi bir boşluk ya da sekme içeremez." + +msgid "domain name" +msgstr "etki alanı adı" + +msgid "display name" +msgstr "görünen isim" + +msgid "site" +msgstr "site" + +msgid "sites" +msgstr "siteler" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..384d79a9ab5c1feb2313bbd70ceb3b827b801da3 GIT binary patch literal 706 zcmZXQ&ubJh6vv}hkx@Jd-aG`nC?z|IsN2qVMXW7Uc5$hr_qdatrpzQml670~P`!94 z-t-Ufrd}*;3yP~}FG2?I{w==j*6zUvpZUI*_aiU!=kmfk1a=O%3Uq)AzzZPQ2jDF5 z5x59^210%UEC4@&kpBg|Ifc+~&`SV6jnFmF3iJx-ThQ~MpFl%?3<~84WZEC@KLZ2{ zbN{o)(g}+)X{&$V?P?1-60kUNH?DQVsN7=u!EQ=Yphy zmkCa};|5>fa;{3^cr+R{T$m>ZVyDs9WjuS)KPirzW9Q-vZnevlPXW}(lhB!mV_BD>J>x73$m_F zX%nofX=vN5g=cP?wj$);`vd>Ae&xUUgL)6uuOS@Q`w$-1`}N+`8^hUm?7!46{gIy_ Wf9QYs3Apn!e}o`89dzOxPy7pgINxvp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po new file mode 100644 index 0000000..519ece3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/tt/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Azat Khasanshin , 2011 +# v_ildar , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Tatar (http://www.transifex.com/django/django/language/tt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tt\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Сайтлар" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "домен исеме" + +msgid "display name" +msgstr "чагылдырылган исем" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайтлар" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/udm/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..af7ab53bb6735a670114ecf738e973e4f5831251 GIT binary patch literal 462 zcmYLF!A=4(5XI3XRZ0i%-OX{0*q65Q_gE^1WDJ@WHy?s z(z*aspXn5ys?0-d1&L;_F$|oN0k!ZfgA(ML@is6HyhAt_tkYziF%-gFedyZrpt}Xm zfVHtj@S7$>L=)))#7-KY%V3=#FVYz8$wcW?<>VgIVELHu%9b`u`+z+rt7N7iRZRJY5?j!6zow@p-ET+pKL=W+1-*=>\n" +"Language-Team: Udmurt (http://www.transifex.com/projects/p/django/language/" +"udm/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: udm\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "" + +msgid "display name" +msgstr "" + +msgid "site" +msgstr "" + +msgid "sites" +msgstr "" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ffb1b948f77e5bb1c9d537bcd875c273abb6418 GIT binary patch literal 960 zcmZWlO-~d-5N#FIj2?^!P991V5kh*mXMunNgGPje#Ek?O58j&DW*K&-do$Autl2^rF?X@{w4RH?OOz^BN%!kQ3xCv++OX%J1aX{e+J)kQ9A%9#-jm1tT{Yhjf> zYt~X)Q64zcFDrCB5nQ8|KId9^P-5;NWiEAxz;!(~)W=-LP)KLQQfPZ#=!PhJOiTUX z4ts+GeGJ2S!Bb5u372WawMslFx9Te5@P@~AwWLBAm0?hS%j2gtyna*&R6K?zS!?o| zpcTPm4`%BLzCy?)^ekxI@QTId<>i95O~ZMyVm-z7wazH|*Pz&}7ki!ZRC(g!0o(#} z#_?f=#KBq(yrC8=x`>Y%$`J?_c#;b3&sHYs@P*EvH7^o6Ap=znWzB=(xlo@E>Or&a zOh?UxM|4spaq59=iOCv(l(PV3)ar zjk*k0SKAiUuwL}I=qdG%IK+H0+vYHPXAX$@WKPVn*)!kq+kONL?kuM!g^74Q45Nw`Le7?ZZ{{n8uNHPEb literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000..232940a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,39 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Oleksandr Chernihov , 2014 +# Jannis Leidel , 2011 +# Alex Bolotov , 2013 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Mykola Zamkovoi \n" +"Language-Team: Ukrainian (http://www.transifex.com/django/django/language/" +"uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "Sites" +msgstr "Сайти" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Доменне ім'я не може містити пробіли або символи табуляції." + +msgid "domain name" +msgstr "доменне ім'я" + +msgid "display name" +msgstr "відображуване ім'я" + +msgid "site" +msgstr "сайт" + +msgid "sites" +msgstr "сайти" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/ur/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..733aebd7bfef635e9d9f269dca428d4526b5fcbc GIT binary patch literal 654 zcmYL_&2G~`5XToN0vS#mIB}TXT2&j{6_9pAP@x}EQ6r+t<-XV(cPo20+Fg^jS7;O@ zP9S&y4n!O{pkCn8=de?WXJMRBGSYAVGwYf0%>KEz@R^|9L>?ep$Sov8Y8xSUk@v_Q zFPLTSrq-*q%h#lQc=qq8Y)QUlJ#8s-jebLv((T+`JLZ26@rIBXfbzeqw z(+KV`mu_(<7_0{2BN~J>Y(f~apt%x+L4b*LU%ZiZ&v{;x2J19jhww3b7_0ELl1Ctc6bm&~4`Tk%q zXt=ta?1|$>taE?1(3NEWYW>3a%U)-R!%4!>7=;!sMbFRm01VP>srQ^{yO4HALr(Oh)+O?D9i3gvs~$b$MQn%Wu_h Ja^;lg, 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "" + +msgid "domain name" +msgstr "ڈومین کا نام" + +msgid "display name" +msgstr "ظاھر ھونے والا نام" + +msgid "site" +msgstr "سائٹ" + +msgid "sites" +msgstr "سائٹس" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/uz/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1c68e3283c417e7c985d650d85756b2ab30d5da GIT binary patch literal 799 zcmYjP&2H2%5H?V#6gZ#?!G*)z3aY$GwnE){S%m11v=R%eHsy>raT9kFJJ`-{cb|bP zXWjzA1>S^*=nKGj)3S{8<+I1%%y`E6y|wX$plu?aA`--X#Ak%J?})pIABZmE7vcfp z3gLBs5F37dtJOV3{)%{v@HxNTCS(`+C-NiYE93xq^G+MLh3s`tkTHbdF}df@5k9Xs zU;oBX*4n9b!jhyAkm-s`1&UV!Qm&MCkZR?;kE;dPny12oHsJWgc1R{|UGl|BPyUM~ z7Bj9smW++Q5UHcXjD8TtO05`V7hL5!I1#lrj*e_DGy0~, 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 01:18+0000\n" +"Last-Translator: Nuruddin Iminokhunov \n" +"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uz\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "Saytlar" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Domen ismi tab`lar va bo'shliqlarsiz bo'lishi kerak" + +msgid "domain name" +msgstr "domen nomi" + +msgid "display name" +msgstr "ko'rsatiladigan ismi" + +msgid "site" +msgstr "sayt" + +msgid "sites" +msgstr "saytlar" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..36fa0755f7903ef1d48e25bd69289c7cbcb630f6 GIT binary patch literal 762 zcmYk3&x;c=6vszh1xFF|?BN}iC7qeNOKWOHTz6q%i)9&mPiL|-*>;j4Nq>PC@hA!+ z{sG=p@E{0+J@#+#Cc+%WvlmakwC;8veDX~)-}jQd`FUgGt%q?5xrrPgSCFTOi}y$! z`G8zSejx7qFJuGxgIq-ZA}`P3fNY_>I`4VcQ5UGr{~h%*YK3|Y^*5@syKwpL{0nY@ z;p(0Q+Ex+g98y&pfp(4H#IL6rW~@_((j$g^^CB5 zIT)|2)iF;j*-uH2Ya^7TkRCIcDgTg{N?Xz~nMldQQD#W2DEQsSG1<|aS@e=e%yJ6# zFxnn5e*xgVHAdFB!_$~T+OwwLBhMFeg~o^-QL;^G5iB&EQvLfX2`746xc3M1`v0SNIqH3eTeYDGL#4=7|&I$@W!L4hE;czRrwxmHYnM`Wd)e}d2ifKi# zdeMmt|5pgcBDn2$_B*@lw@0S< literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po new file mode 100644 index 0000000..6f7d6a0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/vi/LC_MESSAGES/django.po @@ -0,0 +1,38 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Thanh Le Viet , 2013 +# Tran , 2011 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-23 18:54+0000\n" +"Last-Translator: Tran Van \n" +"Language-Team: Vietnamese (http://www.transifex.com/django/django/language/" +"vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "Tên miền không gồm kí tự trống hoặc tab" + +msgid "domain name" +msgstr "Tên miền" + +msgid "display name" +msgstr "Tên hiển thị" + +msgid "site" +msgstr "trang web" + +msgid "sites" +msgstr "các trang web" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..028280ce343e717a76c42128ca4d3769cf7e904c GIT binary patch literal 779 zcmYk2zi$&U6vqt&kPZgKz{KFORps1W1*E+Ygb1xv)Id}YR^;BfiK~kpogLCJp(3OX zt<LR0yeYAcZ!2RJ5?F(|{=~W31_- z%A$~~dPG~PAN^O06m(2K3YBBI%mPj3LUNbIic8_)aG8pVv=&%h#+sB=g@@!?qoRl} zJ#3Y4`J@;#s=-UHQ_Va)>9`k(;}SQAUDtDR6OQXRU?dCdJ~ur_z8rC;i93zmOWp-% z!hx{nsnW!csZbHsGWPHdxEfb@p7D@H_%cib>D4Grvs^66D^MdU4O(HuXSC+wVwDS~ z7#=eVI*!MxTGu_>ZZ?})Z94NMwvr8G&FTpxdRY$KB1HPP^SX*h=2* o_g;MNtv%_keL8&kHhKU0`@>b#d-^4LwGRc!n-7E1VWUC6zdJAQaR2}S literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po b/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po new file mode 100644 index 0000000..82f53fa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hans/LC_MESSAGES/django.po @@ -0,0 +1,37 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Jannis Leidel , 2011 +# Ronald White , 2014 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Jannis Leidel \n" +"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "站点" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "域名不能包含任何空格或制表符。" + +msgid "domain name" +msgstr "域名" + +msgid "display name" +msgstr "显示名称" + +msgid "site" +msgstr "站点" + +msgid "sites" +msgstr "站点" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo b/env/lib/python3.5/site-packages/django/contrib/sites/locale/zh_Hant/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..f1c3d67b36ab955e95d10a730f0ebeb859363d8d GIT binary patch literal 790 zcmY+A&ubGw6vtPsKUf9DgC`GjY$=n>7B%h0h!|Ta7z}mQqfB?Fn<<-_WoOnjJ&C2@ zp@Cjh^b!RRN>R~6sm0)b;>B*G7Y|-N=$mY7>VwaIXWx9^n|br~?8sva;y7>~@PL!R z8en1zI0}3MCV(%%Dc~1ie1Cuuvp$sj&VY7-bHFjkZyvTR0@?#LbwBs?H>lY^aU|E% zpip8#dXP8wF?~&#^Y;U6dEDZfDa&gx6v!s!0twn=$frU`jeIGz$x+cpDyBYDNG3?r zc~!6iuHuNc2Y%~7t)-yj;G?X1A{Uvj@oa$autaewTof!)5lVZG#WK;jra~UzYiX#k zCtYOMZ+f_zFsi|euT#xjG(nt;m^j!eA;)n^X`DEOfDzBJ``q*#`bwBgVP^_Cm)r|v zoIuz&sM6R=s8A8rGI5c&oZ^^^5LFu~d@rZ4m#W3&Y6#;;1z$F=K#>Sj8ZzuL+H}Fm z1yc--dX%@Q7(=5Ctz)-XY_(biZF=(swq#0+`E>gd?e!@xH|}|Ni(__ewl+O{3a3Eq zDm*b0aK&~Evud`ai}0*ml#$<{iDJ5P+nd3YL!UWrfhBla_%eVwTr@e)^}j2-XmFNY zk6^F}&&Z^yTqNSbuc|m@lrJl!Y+L=!kNu5jMzU@dLnV53L_B-}hf_=LP>&ALwWr{{, 2015 +# Jannis Leidel , 2011 +# mail6543210 , 2013 +# Tzu-ping Chung , 2016 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-01-17 11:07+0100\n" +"PO-Revision-Date: 2017-09-19 16:40+0000\n" +"Last-Translator: Tzu-ping Chung \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/django/django/" +"language/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "Sites" +msgstr "網站" + +msgid "The domain name cannot contain any spaces or tabs." +msgstr "網域名稱不能包含空格或定位字元。" + +msgid "domain name" +msgstr "網域名稱" + +msgid "display name" +msgstr "顯示名稱" + +msgid "site" +msgstr "網站" + +msgid "sites" +msgstr "網站" diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/management.py b/env/lib/python3.5/site-packages/django/contrib/sites/management.py new file mode 100644 index 0000000..3426233 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/management.py @@ -0,0 +1,38 @@ +""" +Creates the default Site object. +""" + +from django.apps import apps as global_apps +from django.conf import settings +from django.core.management.color import no_style +from django.db import DEFAULT_DB_ALIAS, connections, router + + +def create_default_site(app_config, verbosity=2, interactive=True, using=DEFAULT_DB_ALIAS, apps=global_apps, **kwargs): + try: + Site = apps.get_model('sites', 'Site') + except LookupError: + return + + if not router.allow_migrate_model(using, Site): + return + + if not Site.objects.using(using).exists(): + # The default settings set SITE_ID = 1, and some tests in Django's test + # suite rely on this value. However, if database sequences are reused + # (e.g. in the test suite after flush/syncdb), it isn't guaranteed that + # the next id will be 1, so we coerce it. See #15573 and #16353. This + # can also crop up outside of tests - see #15346. + if verbosity >= 2: + print("Creating example.com Site object") + Site(pk=getattr(settings, 'SITE_ID', 1), domain="example.com", name="example.com").save(using=using) + + # We set an explicit pk instead of relying on auto-incrementation, + # so we need to reset the database sequence. See #17415. + sequence_sql = connections[using].ops.sequence_reset_sql(no_style(), [Site]) + if sequence_sql: + if verbosity >= 2: + print("Resetting sequence") + with connections[using].cursor() as cursor: + for command in sequence_sql: + cursor.execute(command) diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/managers.py b/env/lib/python3.5/site-packages/django/contrib/sites/managers.py new file mode 100644 index 0000000..91c034e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/managers.py @@ -0,0 +1,60 @@ +from django.conf import settings +from django.core import checks +from django.core.exceptions import FieldDoesNotExist +from django.db import models + + +class CurrentSiteManager(models.Manager): + "Use this to limit objects to those associated with the current site." + + use_in_migrations = True + + def __init__(self, field_name=None): + super().__init__() + self.__field_name = field_name + + def check(self, **kwargs): + errors = super().check(**kwargs) + errors.extend(self._check_field_name()) + return errors + + def _check_field_name(self): + field_name = self._get_field_name() + try: + field = self.model._meta.get_field(field_name) + except FieldDoesNotExist: + return [ + checks.Error( + "CurrentSiteManager could not find a field named '%s'." % field_name, + obj=self, + id='sites.E001', + ) + ] + + if not field.many_to_many and not isinstance(field, (models.ForeignKey)): + return [ + checks.Error( + "CurrentSiteManager cannot use '%s.%s' as it is not a foreign key or a many-to-many field." % ( + self.model._meta.object_name, field_name + ), + obj=self, + id='sites.E002', + ) + ] + + return [] + + def _get_field_name(self): + """ Return self.__field_name or 'site' or 'sites'. """ + + if not self.__field_name: + try: + self.model._meta.get_field('site') + except FieldDoesNotExist: + self.__field_name = 'sites' + else: + self.__field_name = 'site' + return self.__field_name + + def get_queryset(self): + return super().get_queryset().filter(**{self._get_field_name() + '__id': settings.SITE_ID}) diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/middleware.py b/env/lib/python3.5/site-packages/django/contrib/sites/middleware.py new file mode 100644 index 0000000..bc3bf20 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/middleware.py @@ -0,0 +1,12 @@ +from django.utils.deprecation import MiddlewareMixin + +from .shortcuts import get_current_site + + +class CurrentSiteMiddleware(MiddlewareMixin): + """ + Middleware that sets `site` attribute to request object. + """ + + def process_request(self, request): + request.site = get_current_site(request) diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/migrations/0001_initial.py b/env/lib/python3.5/site-packages/django/contrib/sites/migrations/0001_initial.py new file mode 100644 index 0000000..a763986 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/migrations/0001_initial.py @@ -0,0 +1,31 @@ +import django.contrib.sites.models +from django.contrib.sites.models import _simple_domain_name_validator +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [] + + operations = [ + migrations.CreateModel( + name='Site', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('domain', models.CharField( + max_length=100, verbose_name='domain name', validators=[_simple_domain_name_validator] + )), + ('name', models.CharField(max_length=50, verbose_name='display name')), + ], + options={ + 'ordering': ('domain',), + 'db_table': 'django_site', + 'verbose_name': 'site', + 'verbose_name_plural': 'sites', + }, + bases=(models.Model,), + managers=[ + ('objects', django.contrib.sites.models.SiteManager()), + ], + ), + ] diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py b/env/lib/python3.5/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py new file mode 100644 index 0000000..6a26ebc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/sites/migrations/0002_alter_domain_unique.py @@ -0,0 +1,20 @@ +import django.contrib.sites.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('sites', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='site', + name='domain', + field=models.CharField( + max_length=100, unique=True, validators=[django.contrib.sites.models._simple_domain_name_validator], + verbose_name='domain name' + ), + ), + ] diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/migrations/__init__.py b/env/lib/python3.5/site-packages/django/contrib/sites/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/contrib/sites/migrations/__pycache__/0001_initial.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/sites/migrations/__pycache__/0001_initial.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4a3d3d65f38e22d31ea27f5848e84ec7188841b GIT binary patch literal 1111 zcmYjQ$#T;`5N)mAlwb&$EQIAm`4Btg21QY!LWSaxa0sU%cVS zu91nVLTc@ILT?i8tV%V`XH^5LyGiZj0{$AA;yX;$V$uYMeVY_ifDs zgj|FYY_tLVA@HZb9|0d(^fB;F;9DTknQi-QAI?$O4)7-+29QROt{J1!b>soVV|oP` z33lH_-=68-$;uAx8?T6eCL5u{b15=jYgcj-T?rMJwXj|i_tOX6tA>9sf}5t}z9 zohiW@!M~6}rDV?3f?kS+4%;E1=j=PpM3FQXw>Vz79<;!7+p+&|JoW8?K_f2fDq{-^ z>rPqOX_0QJIQA_P(&aI2Seywm;3+GT5{HhWeG|#XUAeT%=89!HFi@?7nALdc=B!|e zP&Mh4aVlm_jjMCLR68E(E^YUQ>OQ5oBXis*sv}Cj%~@tQijs(nN)%iaGbw82p>8rb zvM!vMrBc56rS~4qIW|_3-q8h9HdU^H0$YX_*%#2ASy?nn#%gGp%n(jmk-A@2V!5$D zL2V&!!=KY>lULJ9R(tVWW_+(m>1%#)*-Tr?)n!RMwGK@GZ~t_EfBzMgg=}z?lWL&? zWDfDHw=qO+==Ge?ed$Ebru)JR9rKCY$hCFj4%unjOqTo;%Rg!VQEFsV+V|`&%Xn-} dvc6b~|8LS}rmOD0ZS8*N7$HVY#P0vC^<8bKWb z3!#pHMG(Bl5HNzDR2YE_p^RZi`PlY-n#Xqp0w3oilhtaY#h}`zH%Z;1topUh9j;>v zE@|`|n&g3yjQ}6OCa{Duvf!Q$DM$dvAQLFZfD^zJFaw+d<{&3frch>3Qg&+FaRzt< zJBW4=TC^PSnB<+9^us}xiF-B3-sI=!=g+xn)SyJgGAETcqLwDI1txNFf^98SW8$w$ zR!FN8-+3jQ&2V)`o`FfWjk?~-&n&wUl|nJJx@Y-~)T_3a4(@j9A)Z=1a_H9c>xA0p zGc)0?igS~3P9nCIq&VmNdMhg1!a2)PcCta)td;CFZ6vVlO*KgU&Wh5Z{gJ-C68_sH zSc+!Tn(?}A2CY^)wgpdkuj-D_y&TW_PqfL}PVV>Z7wCu7;if;V80xO*RCl)8stV7V zl3(ER+faCt!)s4fIB$#lGffL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(mzRD?Zh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rYWD=ErM(l5>|NiEjT%}g&!EXmBzE7p&X&&fL;wu?l8g+&noL!ODOrhm>G^ue`FSNp znMr!ZC5a`O$!VE6sl|GU1qH==!C(P5kbrZ3URq|lpC)6JP)cfAVrfoEJWxqIP%BV) zB|{O&7BKP4Rlg*+K))cfKsTv0GbcqiFDu?M#VET(A7UGff?BGNWT}39d}dx|NqoFs WLFFwDo80`A(wtN~kjceB%m4u6y+Q>5 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/apps.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/apps.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ceb9cf9de420332916495ca76661b4210742ef2a GIT binary patch literal 861 zcmZ{i&5qMB5P-+|YuaYDi-Z7if@4MNb0_!;ZjrAcW{q(MF zmrcDba&*qJPa?Z#+oI+|Dm)16fw7`oXf3{KR;Jw{GszFjMdKDly+I|wkRm8`3_DT^ z&p;p1Mi>`3x<2Gc5*R9kK|DGE9wODWf3()AF0yw;Db#?~J?Fc$&YL7_YAuURqHM(0 zM0C**{=&vncllx6Imu<`Tz<>2vv!%?ATCkVV^kVoM?hP?qhq_aj-3^qj|#`G^f0s! zrN|4Vg_NcQw!u@P-2MbPMfcC$LRamgE!wNiz9{)sy<@NV^}SvU#1GpEd@-uONZVE= z?V_%?fuk(!ya0M!IVg{UGDkcgZ+_H-4`==?Mda{+0P z>C6AmCmB8;+q{378DiM((r2g4y)H_XXqnck#OXJ+^s%tKFv`%32umZA_alcUSzNJt_EG{7bod z@-KLDl2+)Dc{6#;zP!wCI8J*f+Q0o|z&94cr2dFfZ4q#K7*Zf(=rb^GfSceJKIol# z1DBrtLxb>G)ro~343nG-sm>$PZNes8p**8h7X&ddHSp4d2Ht_=yIo98ytgd3t|taYCMFi%$qNxzL|l68&FejgXxt6cv@1oNC@rMmU8O^v zM8hN%synykdzLiFLuE(xiE914(5G3MicI8M@DnKuS+&HA7CHCqekUx;K~&_!Bvw^x z{2a=R?8HK`zq=etUt=%Aicj?fa)B<=gpau*Y}CI^d%)kBk38;#wy6 z!GhPIv8Md;wQ`#Ff2UTxL6-nVi@D6CbeL_dGT9-{Gy9t}ZGSH6FNpf{1vG!(%r`a{ WpiLUp(m_`6r&Ju)x2Nh&x#l0T|BN31 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/finders.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/finders.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbed1d2407aac20f22634559784c99099a2d952f GIT binary patch literal 9852 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/handlers.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/handlers.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cafb724b73fd5921912ca13e609f79f65e0bec92 GIT binary patch literal 3011 zcmZ`*+iu%N5FLut{SsSg(zwlq2~ea88o4!6pbd&%5VT2v!Vi&)q(lLN7FQN+id1(g zI~J0@xRQ4xQ7#RTLl^83a0)#w={vaA*9z%zI z$I~)}_*d8~uR>v!;3Ufs>g*fKaJxxiOUsySQ`pgRqp$`P*0i-|F|$r#SI@L~X3#so z=nk?Vi-zAtu~4})^A`;l7rW<9q7eQa1yZ=#ILO>6$%JGKlsgRKSh-n>2f|g_iaTO6 zZWu{1%u;#$ksBy&D-@$B5uv+#thEO_-|RfR=l}5Ndp8Fknn{QOK!?q7s)VuC*RSsk zOF4*q=fQ9g5IhcM2O;ym5Rkto! z^Y`BjQ@_~L&|*DYeCKu#O*!atk7XBf&ys7nY1wq=FrO~$MH&!fq zMt$|#>oAf5cT3}*m1y5K&^xk>M_y+*7Q+L-ICzrx>NQSTv3jqv1+}Ya+BdQq*8JLv z9ljdL*LY*&RSnGz2;j{=dc8>;#0^j;y0uP&Km?EjnYpR4T=4G9Yf}6? z6DqsO%2+y5$<552C83bo>O_Q5U><##N*BsO+*_J>$sfHm|tApm-i<2C4!1b+kQ&r1ZdJi{5b zz!!V|c$jjVaLf0!9cd9vk z&N!j9KY^Z!X=#3G#pZQJUT&Pj$Vr63QcuyDJ(`M-;8`401Q0IR978##<8>WrhbK9z zkCQEO5aELc$vv{3$H;&t@l_lr%v>Ed-*`U)+tJQu9Bw^g2e zg*I14{*LnfMZ@o`L4h8bn)F`IsJvwN0U$n>%^X qy^WPhM`|yU`0OUB?) literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/storage.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/storage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7f193eee33c52ba99bf4f2bd3c2d0bdc5845d5ff GIT binary patch literal 15397 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

    2dZ9gEWknyzpk*DK%C>d^AI`bl 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/testing.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/testing.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63e827d02e762038edaa8e18ec05be2ff5aea153 GIT binary patch literal 763 zcmZWnJ#X7E5ItG4le$R}WGFgxIG{t}!7`AoK@k+_=TKyECZPa9i|3fBM5-iZ#9iAz z(_howYp4E#0-bu49MnJvkvcu;-g|ea$H&Lxv-14Y&jjEX?5&LBSG@f>ABwL8Du6nH zB7r1651<-AokEd9@?NE&GWgDL29&}#hBHt@m`_H(IUgp;_H-U((B(T_k^dl#s>nt3 zqh8aT+?w1K`S4nLDr3UkVq3k9ryLMObrvrM(GM$A2E{OXnNQN~lV0IIS+SI}B)-G1Ya}dOo(%HhD*VIT>vag)p)vA+}>7YOC5R#z#VYX=Sy0b0CDW zr4VkwT`nH=a$?m_=?Az640p%hH?vSTvqm@5MXM_{H8pr8U9n#cZ$o zS!|v**LkyX8S@Q!`xqRJMuQHyoD7R+yXou*@;!ol=g0RhAMVZ3rO{v{`){?6#*A$b QU-orh#J{Q2JV{Q{fA~e$d;kCd literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/urls.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/urls.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63a67a3009128c70d6befeaea73d9f33632501f9 GIT binary patch literal 651 zcmYjOyKdA#6g}hDKC%&MAni01E@De*5C|bch#&%`V3Wo|TJ757l{bEAW*i<0Rrncx z$!#iHN-FM*LHOGDY5SaW$B*{+=f~-@kG~jjkCC}lza&>Vg^X^75~vsw24;E(rGv^v z;tsuw(nIAV@xiu05+L)C`N#r%r>`au47(}h1|q;>NMeFJ;K}grGMxM*E`+R~Dxq~z zZxz*n(raC$RQXEC8*!16RBI-CeAwGqk zbVxxmUtXSEo}aD=K$;_zMxfcEl_D=b|A3s(;P*+at2SI(gfM|6m{QpxUAsVqoW?^MFOZG<0ma6w(pS`+zW7ix7qpF`iubQkY#S8Q2)PlkR Mqss~02lE5=2XxS$J^%m! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01f9028a4610e2e823bff2167ea3ebbe50d3cfae GIT binary patch literal 1906 zcmZ`)&2HO95S}HeU)!>|%v`%X)4Jss%XmTY{qDXpo z=^w$mG(rEKqnAELUxU}4`U*L9W<|-W(Jr{7+1YPqXJ=+d8!IdINB)O&K_L*`aIY zm2PYf&6f(s_mn`n)%Yy06vts49rFGUc)z=;N9kr7rVmfDFbW>VgZ3A}qoLjm2437t zWO@7k8iEv9T2;J_dEW zF~_4LHipKvWEGY2>MR_xhD(AG~m_6w{T^niRUmW8x!T3iC^LL)R_4F-zLh&1cK3u@$?EMHata#pEFc> zWgdey9u+m}XHtb{BD&<~UNkhNsB|K|9@c6og^zrQ1$P;W$doPBD&<-k{iMsiDB>o8 zsO#zL^5uS#h9a1j;h|g3D^aL4+MI^hO4Kw-&L9cnyw(%CZOpipR;BPDU%gS*d6iPG z!z9j^7QD+#Ml-j%ac<7g{?B%aJ2>AVCRp99uJk@ z9!_zhec=x|wgSq+!rS4qj>h}m8SZ$o;AdWx2~~uD-25TQ9!SA6MZM>yx|gQ> zJk;2EG+7`BS~M^zPBW~7fFC!XG!ORLFOR;Soz@udG|`W5p6(w!F>){dFPP$^Oc}dW zQr)hQBG!d_FEMLu+R;x=}UxE$p=Zus!qO6RLqbNWfWUH7p#P)vQ&vY^}3(Chwu#tx5W`khhVv zmZlA_ft{{9^>1S?k)k0ke34QiE90wq6Q=fzr3F_^DVvs6-5Mo97Kv@DO0|q+8Bbqh KYxZh&ed8aRE7y+z literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/views.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/__pycache__/views.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66b298d85ea2f4c6eb975ac9fb9d3eec0b260c0b GIT binary patch literal 1463 zcmZ8hL2ukd6n^&ZdL3uC2^FLWE^`2F7NxtW>ZMUtP!*tvszoH>U{$Of&un&_@r*k& z-ZWuz0j}^rkoZNua^l9hC*F*gB;eINzZrk;d(Yo{-ksqvd64hF`nwD8C)~O^=zosO zyhcL-QnUfk5JUheI;|f<8hXD2q61|Y(k=wB2Z}DN0{A(AqUUr)=c)@ff}#(ruHW`x)dTaRgB7Tn$C#PhqHt#+ z=rcez+HqjViN5FDS?@QXNTAqsEO_!NgsTXy5I2Bg2rKYJm?MH!2YwBM!*P@?1Av6! zb%@Hd|LBg&33ZO5o$@7y7qAbFE4uRE`aFUFCAl zw8mEXa~Io6=v#{o_99~wTn$Icb#;$awZ*i@-#sT)W-Zf_m^xpO%0A!kCA)vWb(=QqtRZAnz-p>;}(oBdZB9V zszCPny27umtI)I>w7GqPb>@~~ckKDxoO(u&o~znTyB}!(vTuWF1DB(NYbBi&Z;;!~ zxm2itK>1O)1=DPDd2jTw8IfGog8HZU1$fG4NL60D$)9PZ?D&ojaSEH>!52@DztZ^W zL$gsS!{4~qZDOf(>Agr`=Xj;vAU9pthbCr{nsbh@P?@IdVLej`ZgtOdw)*s&zGkm$ zhVk2YoW@)lmg598(b;*XPffbzvSfl^GCFfC=`cGnO4OG5t&TD5chK+Q?d{X4Evsq8 ztNSN47xca?W{>EDGdpct`|oYt;pwdoPg~`y3w;-fws4tu(ZJR_K@_|nY@z)y7zEqs zd&GFq^k*|vYc|sktrIlq=FJGry>#gZHz)reDzDac$O8Wsyu#^V9pWqUV)=~z4R4tp cOxVPaOZ*QK?1|IV+(8pzm4k2_E5%>uAFHI0tpET3 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/apps.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/apps.py new file mode 100644 index 0000000..adf9f7e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/apps.py @@ -0,0 +1,13 @@ +from django.apps import AppConfig +from django.contrib.staticfiles.checks import check_finders +from django.core import checks +from django.utils.translation import gettext_lazy as _ + + +class StaticFilesConfig(AppConfig): + name = 'django.contrib.staticfiles' + verbose_name = _("Static Files") + ignore_patterns = ['CVS', '.*', '*~'] + + def ready(self): + checks.register(check_finders, 'staticfiles') diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/checks.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/checks.py new file mode 100644 index 0000000..fb57bf7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/checks.py @@ -0,0 +1,14 @@ +from django.contrib.staticfiles.finders import get_finders + + +def check_finders(app_configs=None, **kwargs): + """Check all registered staticfiles finders.""" + errors = [] + for finder in get_finders(): + try: + finder_errors = finder.check() + except NotImplementedError: + pass + else: + errors.extend(finder_errors) + return errors diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/finders.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/finders.py new file mode 100644 index 0000000..afce4ca --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/finders.py @@ -0,0 +1,290 @@ +import functools +import os +from collections import OrderedDict + +from django.apps import apps +from django.conf import settings +from django.contrib.staticfiles import utils +from django.core.checks import Error +from django.core.exceptions import ImproperlyConfigured +from django.core.files.storage import ( + FileSystemStorage, Storage, default_storage, +) +from django.utils._os import safe_join +from django.utils.functional import LazyObject, empty +from django.utils.module_loading import import_string + +# To keep track on which directories the finder has searched the static files. +searched_locations = [] + + +class BaseFinder: + """ + A base file finder to be used for custom staticfiles finder classes. + """ + def check(self, **kwargs): + raise NotImplementedError( + 'subclasses may provide a check() method to verify the finder is ' + 'configured correctly.' + ) + + def find(self, path, all=False): + """ + Given a relative file path, find an absolute file path. + + If the ``all`` parameter is False (default) return only the first found + file path; if True, return a list of all found files paths. + """ + raise NotImplementedError('subclasses of BaseFinder must provide a find() method') + + def list(self, ignore_patterns): + """ + Given an optional list of paths to ignore, return a two item iterable + consisting of the relative path and storage instance. + """ + raise NotImplementedError('subclasses of BaseFinder must provide a list() method') + + +class FileSystemFinder(BaseFinder): + """ + A static files finder that uses the ``STATICFILES_DIRS`` setting + to locate files. + """ + def __init__(self, app_names=None, *args, **kwargs): + # List of locations with static files + self.locations = [] + # Maps dir paths to an appropriate storage instance + self.storages = OrderedDict() + for root in settings.STATICFILES_DIRS: + if isinstance(root, (list, tuple)): + prefix, root = root + else: + prefix = '' + if (prefix, root) not in self.locations: + self.locations.append((prefix, root)) + for prefix, root in self.locations: + filesystem_storage = FileSystemStorage(location=root) + filesystem_storage.prefix = prefix + self.storages[root] = filesystem_storage + super().__init__(*args, **kwargs) + + def check(self, **kwargs): + errors = [] + if not isinstance(settings.STATICFILES_DIRS, (list, tuple)): + errors.append(Error( + 'The STATICFILES_DIRS setting is not a tuple or list.', + hint='Perhaps you forgot a trailing comma?', + id='staticfiles.E001', + )) + for root in settings.STATICFILES_DIRS: + if isinstance(root, (list, tuple)): + _, root = root + if settings.STATIC_ROOT and os.path.abspath(settings.STATIC_ROOT) == os.path.abspath(root): + errors.append(Error( + 'The STATICFILES_DIRS setting should not contain the ' + 'STATIC_ROOT setting.', + id='staticfiles.E002', + )) + return errors + + def find(self, path, all=False): + """ + Look for files in the extra locations as defined in STATICFILES_DIRS. + """ + matches = [] + for prefix, root in self.locations: + if root not in searched_locations: + searched_locations.append(root) + matched_path = self.find_location(root, path, prefix) + if matched_path: + if not all: + return matched_path + matches.append(matched_path) + return matches + + def find_location(self, root, path, prefix=None): + """ + Find a requested static file in a location and return the found + absolute path (or ``None`` if no match). + """ + if prefix: + prefix = '%s%s' % (prefix, os.sep) + if not path.startswith(prefix): + return None + path = path[len(prefix):] + path = safe_join(root, path) + if os.path.exists(path): + return path + + def list(self, ignore_patterns): + """ + List all files in all locations. + """ + for prefix, root in self.locations: + storage = self.storages[root] + for path in utils.get_files(storage, ignore_patterns): + yield path, storage + + +class AppDirectoriesFinder(BaseFinder): + """ + A static files finder that looks in the directory of each app as + specified in the source_dir attribute. + """ + storage_class = FileSystemStorage + source_dir = 'static' + + def __init__(self, app_names=None, *args, **kwargs): + # The list of apps that are handled + self.apps = [] + # Mapping of app names to storage instances + self.storages = OrderedDict() + app_configs = apps.get_app_configs() + if app_names: + app_names = set(app_names) + app_configs = [ac for ac in app_configs if ac.name in app_names] + for app_config in app_configs: + app_storage = self.storage_class( + os.path.join(app_config.path, self.source_dir)) + if os.path.isdir(app_storage.location): + self.storages[app_config.name] = app_storage + if app_config.name not in self.apps: + self.apps.append(app_config.name) + super().__init__(*args, **kwargs) + + def list(self, ignore_patterns): + """ + List all files in all app storages. + """ + for storage in self.storages.values(): + if storage.exists(''): # check if storage location exists + for path in utils.get_files(storage, ignore_patterns): + yield path, storage + + def find(self, path, all=False): + """ + Look for files in the app directories. + """ + matches = [] + for app in self.apps: + app_location = self.storages[app].location + if app_location not in searched_locations: + searched_locations.append(app_location) + match = self.find_in_app(app, path) + if match: + if not all: + return match + matches.append(match) + return matches + + def find_in_app(self, app, path): + """ + Find a requested static file in an app's static locations. + """ + storage = self.storages.get(app) + if storage: + # only try to find a file if the source dir actually exists + if storage.exists(path): + matched_path = storage.path(path) + if matched_path: + return matched_path + + +class BaseStorageFinder(BaseFinder): + """ + A base static files finder to be used to extended + with an own storage class. + """ + storage = None + + def __init__(self, storage=None, *args, **kwargs): + if storage is not None: + self.storage = storage + if self.storage is None: + raise ImproperlyConfigured("The staticfiles storage finder %r " + "doesn't have a storage class " + "assigned." % self.__class__) + # Make sure we have a storage instance here. + if not isinstance(self.storage, (Storage, LazyObject)): + self.storage = self.storage() + super().__init__(*args, **kwargs) + + def find(self, path, all=False): + """ + Look for files in the default file storage, if it's local. + """ + try: + self.storage.path('') + except NotImplementedError: + pass + else: + if self.storage.location not in searched_locations: + searched_locations.append(self.storage.location) + if self.storage.exists(path): + match = self.storage.path(path) + if all: + match = [match] + return match + return [] + + def list(self, ignore_patterns): + """ + List all files of the storage. + """ + for path in utils.get_files(self.storage, ignore_patterns): + yield path, self.storage + + +class DefaultStorageFinder(BaseStorageFinder): + """ + A static files finder that uses the default storage backend. + """ + storage = default_storage + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + base_location = getattr(self.storage, 'base_location', empty) + if not base_location: + raise ImproperlyConfigured("The storage backend of the " + "staticfiles finder %r doesn't have " + "a valid location." % self.__class__) + + +def find(path, all=False): + """ + Find a static file with the given path using all enabled finders. + + If ``all`` is ``False`` (default), return the first matching + absolute path (or ``None`` if no match). Otherwise return a list. + """ + searched_locations[:] = [] + matches = [] + for finder in get_finders(): + result = finder.find(path, all=all) + if not all and result: + return result + if not isinstance(result, (list, tuple)): + result = [result] + matches.extend(result) + if matches: + return matches + # No match. + return [] if all else None + + +def get_finders(): + for finder_path in settings.STATICFILES_FINDERS: + yield get_finder(finder_path) + + +@functools.lru_cache(maxsize=None) +def get_finder(import_path): + """ + Import the staticfiles finder class described by import_path, where + import_path is the full Python path to the class. + """ + Finder = import_string(import_path) + if not issubclass(Finder, BaseFinder): + raise ImproperlyConfigured('Finder "%s" is not a subclass of "%s"' % + (Finder, BaseFinder)) + return Finder() diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py new file mode 100644 index 0000000..9546635 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py @@ -0,0 +1,66 @@ +from urllib.parse import urlparse +from urllib.request import url2pathname + +from django.conf import settings +from django.contrib.staticfiles import utils +from django.contrib.staticfiles.views import serve +from django.core.handlers.exception import response_for_exception +from django.core.handlers.wsgi import WSGIHandler, get_path_info + + +class StaticFilesHandler(WSGIHandler): + """ + WSGI middleware that intercepts calls to the static files directory, as + defined by the STATIC_URL setting, and serves those files. + """ + # May be used to differentiate between handler types (e.g. in a + # request_finished signal) + handles_files = True + + def __init__(self, application): + self.application = application + self.base_url = urlparse(self.get_base_url()) + super().__init__() + + def load_middleware(self): + # Middleware are already loaded for self.application; no need to reload + # them for self. + pass + + def get_base_url(self): + utils.check_settings() + return settings.STATIC_URL + + def _should_handle(self, path): + """ + Check if the path should be handled. Ignore the path if: + * the host is provided as part of the base_url + * the request's path isn't under the media path (or equal) + """ + return path.startswith(self.base_url[2]) and not self.base_url[1] + + def file_path(self, url): + """ + Return the relative path to the media file on disk for the given URL. + """ + relative_url = url[len(self.base_url[2]):] + return url2pathname(relative_url) + + def serve(self, request): + """Serve the request path.""" + return serve(request, self.file_path(request.path), insecure=True) + + def get_response(self, request): + from django.http import Http404 + + if self._should_handle(request.path): + try: + return self.serve(request) + except Http404 as e: + return response_for_exception(request, e) + return super().get_response(request) + + def __call__(self, environ, start_response): + if not self._should_handle(get_path_info(environ)): + return self.application(environ, start_response) + return super().__call__(environ, start_response) diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/collectstatic.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8717221729c3e121d4d3d3171808c38d3f91205d GIT binary patch literal 10021 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/findstatic.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/__pycache__/findstatic.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a90a1f7cf7e430449efdb7771a20f8c6e6b7166 GIT binary patch literal 1782 zcmZuyUvJ|?5TEtmBu%(bXifzQ%tO`lLmfCIB&w=H0u`h?m4`|^1d!#}o5bnH_U&%& zXp}w$!Dr!-kHFX1R~}Hm!aXr#r)`9=vg`5e?#ypzelr>LdY$L#=})!?@Hgx{4$5EQ zP!~95_+uadMvZKNV6d=YWC5c!8-xuD2SyICZ!-rn7k)*x3*3Q?4I`J1UxnTs+JeiF z8Gn)&8J7yh?#pD%#nO81F4>6?#+h+Ztv>s{5I2G3dMS$L(4ddi;3~7L@F*ZHSIV~MWR$3{{e4*9O^|i ztn%t)yv#**Qq1Eov**`(n9Y-7THe3Xvd}Ug4<7@jhM3u8%E{+2ZSt&!M1W>bRNcru z3?B_e0R`4)9@}TDgKgTPU7YG60kqe}@dAhHGk|p+?ZaD}QqklALr+=@4mXV5I56oTEsQf ze1itI9@@2sKey&_jh4`Ehp4gkVC}-hhQU>~NA8>TtKtP@UD_}p+x`yJe_-vy95rsk zE4)MFq080?y#@0&Y)uih>P1W8CZEBaIp(1`3mOz)!fwtY6`1^=az=O5#zBBvg#j_>I(!%iW1EU0lr zXM|X&^XTEs9f4gvy(pJO791a`<6y=mZ|-xX4C}0d%d#mLx-k_s77lHuCO`+Gup`N- zafqhInU{HC_7zWLI^$XV5F^vcRbC*CixewWy1PLj3+fq8z&h-ZbuF6> zY!8d*fVJ6stjnHYzj?>%TRoI%tls~>SYoGa#c`1=cpRHf952dji8x}@jpJ9#L^Lb1 zO%UBW`gP&T5EYO3LMES(f-)%`oO~R0VRsRcXYKp7HuU5HE{r~C`bV^F9MMkWsBf;YYf;w$YdPkaTQm{~iQ9M0|R?CjjkZ)Se>!{g)OqxA7lpZfrR!@=XB{xvT3 zJ&Fwf91sA70}BTnI`=^Ipm1T~wr3ZF2Zaxd0GyYZ2bmAQqMHvqfE#r4Aq!w0_W!|n z5ISa{xYl{OQm9YoI?;LhA{Sh}O3F-diPrvURTOwi=|6Ul+bQZXDjWz7qFM9^AVT>a zV2Ktyy6_v?y`9AZB8yL!c^F6!18jf5%u*|sFp;m;`ihfeKk`eaxO~SYTUL@~{2don zUGP#f#KRJys`g$nWs$QbL66d2hmQ6EE<&r$QD}f0fQOxj-YJtMn$0hsU3_;Mzde5) z5sJK2JZ&U5!#2B?4L6gWHKtzTsJCA}6Qa7prnTq0QL)J-%a`o=x8J;d$#TVBPzh1! z8ecUvm*zOhvN(~eh6bU``0yC^jHkF*nxIZ3hDZ7w#c?VUrQ-N6_;)eWMLnzY`sA|7 zMRrnd;;*ttKkHd$OW$p2Rce`E&e~?#q0W$k$%<3XS=tg(&18cG6F;K*y*$SGj%d&y zp#W#%1kTjy_egFZbR3Qj!K&0DPkaJg#F3A2sn;kDd2-!@KL9?sfC{qv(+{52dZ_tu z?SXs+x(6E<)Kj?j?GZg(;@2FvdFXEc9J1~?=em(4(`$aW>$_2OykJ){scW2-_00G( zX@q9o59XKGzFB4d{roZ6B_>pYxS7$4 z>m6Aoy-vor#E{f3e0!;5#zQtJ)30h`J}Mo~gJ_PthmLYe;y#H_P&~w?C=2)xoFV>5 zZtw3#b&xp>%pi`-q~LLEhH+d}StCdv$MG*sBH9~ygrO`AZ1^@Cr3}0DHZy&1s7yse zA3H&BIHCmPgaa&zn&_(C96%h dn4Is(+ZDXWyYG`3JZWovN>sIwC&=uH{~sbUqWu5> literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py new file mode 100644 index 0000000..a07b5f3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py @@ -0,0 +1,354 @@ +import os +from collections import OrderedDict + +from django.apps import apps +from django.contrib.staticfiles.finders import get_finders +from django.contrib.staticfiles.storage import staticfiles_storage +from django.core.files.storage import FileSystemStorage +from django.core.management.base import BaseCommand, CommandError +from django.core.management.color import no_style +from django.utils.functional import cached_property + + +class Command(BaseCommand): + """ + Copies or symlinks static files from different locations to the + settings.STATIC_ROOT. + """ + help = "Collect static files in a single location." + requires_system_checks = False + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.copied_files = [] + self.symlinked_files = [] + self.unmodified_files = [] + self.post_processed_files = [] + self.storage = staticfiles_storage + self.style = no_style() + + @cached_property + def local(self): + try: + self.storage.path('') + except NotImplementedError: + return False + return True + + def add_arguments(self, parser): + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help="Do NOT prompt the user for input of any kind.", + ) + parser.add_argument( + '--no-post-process', action='store_false', dest='post_process', + help="Do NOT post process collected files.", + ) + parser.add_argument( + '-i', '--ignore', action='append', default=[], + dest='ignore_patterns', metavar='PATTERN', + help="Ignore files or directories matching this glob-style " + "pattern. Use multiple times to ignore more.", + ) + parser.add_argument( + '-n', '--dry-run', action='store_true', dest='dry_run', + help="Do everything except modify the filesystem.", + ) + parser.add_argument( + '-c', '--clear', action='store_true', dest='clear', + help="Clear the existing files using the storage " + "before trying to copy or link the original file.", + ) + parser.add_argument( + '-l', '--link', action='store_true', dest='link', + help="Create a symbolic link to each file instead of copying.", + ) + parser.add_argument( + '--no-default-ignore', action='store_false', dest='use_default_ignore_patterns', + help="Don't ignore the common private glob-style patterns (defaults to 'CVS', '.*' and '*~').", + ) + + def set_options(self, **options): + """ + Set instance variables based on an options dict + """ + self.interactive = options['interactive'] + self.verbosity = options['verbosity'] + self.symlink = options['link'] + self.clear = options['clear'] + self.dry_run = options['dry_run'] + ignore_patterns = options['ignore_patterns'] + if options['use_default_ignore_patterns']: + ignore_patterns += apps.get_app_config('staticfiles').ignore_patterns + self.ignore_patterns = list(set(ignore_patterns)) + self.post_process = options['post_process'] + + def collect(self): + """ + Perform the bulk of the work of collectstatic. + + Split off from handle() to facilitate testing. + """ + if self.symlink and not self.local: + raise CommandError("Can't symlink to a remote destination.") + + if self.clear: + self.clear_dir('') + + if self.symlink: + handler = self.link_file + else: + handler = self.copy_file + + found_files = OrderedDict() + for finder in get_finders(): + for path, storage in finder.list(self.ignore_patterns): + # Prefix the relative path if the source storage contains it + if getattr(storage, 'prefix', None): + prefixed_path = os.path.join(storage.prefix, path) + else: + prefixed_path = path + + if prefixed_path not in found_files: + found_files[prefixed_path] = (storage, path) + handler(path, prefixed_path, storage) + else: + self.log( + "Found another file with the destination path '%s'. It " + "will be ignored since only the first encountered file " + "is collected. If this is not what you want, make sure " + "every static file has a unique path." % prefixed_path, + level=1, + ) + + # Storage backends may define a post_process() method. + if self.post_process and hasattr(self.storage, 'post_process'): + processor = self.storage.post_process(found_files, + dry_run=self.dry_run) + for original_path, processed_path, processed in processor: + if isinstance(processed, Exception): + self.stderr.write("Post-processing '%s' failed!" % original_path) + # Add a blank line before the traceback, otherwise it's + # too easy to miss the relevant part of the error message. + self.stderr.write("") + raise processed + if processed: + self.log("Post-processed '%s' as '%s'" % + (original_path, processed_path), level=2) + self.post_processed_files.append(original_path) + else: + self.log("Skipped post-processing '%s'" % original_path) + + return { + 'modified': self.copied_files + self.symlinked_files, + 'unmodified': self.unmodified_files, + 'post_processed': self.post_processed_files, + } + + def handle(self, **options): + self.set_options(**options) + + message = ['\n'] + if self.dry_run: + message.append( + 'You have activated the --dry-run option so no files will be modified.\n\n' + ) + + message.append( + 'You have requested to collect static files at the destination\n' + 'location as specified in your settings' + ) + + if self.is_local_storage() and self.storage.location: + destination_path = self.storage.location + message.append(':\n\n %s\n\n' % destination_path) + should_warn_user = ( + self.storage.exists(destination_path) and + any(self.storage.listdir(destination_path)) + ) + else: + destination_path = None + message.append('.\n\n') + # Destination files existence not checked; play it safe and warn. + should_warn_user = True + + if self.interactive and should_warn_user: + if self.clear: + message.append('This will DELETE ALL FILES in this location!\n') + else: + message.append('This will overwrite existing files!\n') + + message.append( + 'Are you sure you want to do this?\n\n' + "Type 'yes' to continue, or 'no' to cancel: " + ) + if input(''.join(message)) != 'yes': + raise CommandError("Collecting static files cancelled.") + + collected = self.collect() + modified_count = len(collected['modified']) + unmodified_count = len(collected['unmodified']) + post_processed_count = len(collected['post_processed']) + + if self.verbosity >= 1: + template = ("\n%(modified_count)s %(identifier)s %(action)s" + "%(destination)s%(unmodified)s%(post_processed)s.\n") + summary = template % { + 'modified_count': modified_count, + 'identifier': 'static file' + ('' if modified_count == 1 else 's'), + 'action': 'symlinked' if self.symlink else 'copied', + 'destination': (" to '%s'" % destination_path if destination_path else ''), + 'unmodified': (', %s unmodified' % unmodified_count if collected['unmodified'] else ''), + 'post_processed': (collected['post_processed'] and + ', %s post-processed' + % post_processed_count or ''), + } + return summary + + def log(self, msg, level=2): + """ + Small log helper + """ + if self.verbosity >= level: + self.stdout.write(msg) + + def is_local_storage(self): + return isinstance(self.storage, FileSystemStorage) + + def clear_dir(self, path): + """ + Delete the given relative path using the destination storage backend. + """ + if not self.storage.exists(path): + return + + dirs, files = self.storage.listdir(path) + for f in files: + fpath = os.path.join(path, f) + if self.dry_run: + self.log("Pretending to delete '%s'" % fpath, level=1) + else: + self.log("Deleting '%s'" % fpath, level=1) + try: + full_path = self.storage.path(fpath) + except NotImplementedError: + self.storage.delete(fpath) + else: + if not os.path.exists(full_path) and os.path.lexists(full_path): + # Delete broken symlinks + os.unlink(full_path) + else: + self.storage.delete(fpath) + for d in dirs: + self.clear_dir(os.path.join(path, d)) + + def delete_file(self, path, prefixed_path, source_storage): + """ + Check if the target file should be deleted if it already exists. + """ + if self.storage.exists(prefixed_path): + try: + # When was the target file modified last time? + target_last_modified = self.storage.get_modified_time(prefixed_path) + except (OSError, NotImplementedError, AttributeError): + # The storage doesn't support get_modified_time() or failed + pass + else: + try: + # When was the source file modified last time? + source_last_modified = source_storage.get_modified_time(path) + except (OSError, NotImplementedError, AttributeError): + pass + else: + # The full path of the target file + if self.local: + full_path = self.storage.path(prefixed_path) + # If it's --link mode and the path isn't a link (i.e. + # the previous collectstatic wasn't with --link) or if + # it's non-link mode and the path is a link (i.e. the + # previous collectstatic was with --link), the old + # links/files must be deleted so it's not safe to skip + # unmodified files. + can_skip_unmodified_files = not (self.symlink ^ os.path.islink(full_path)) + else: + full_path = None + # In remote storages, skipping is only based on the + # modified times since symlinks aren't relevant. + can_skip_unmodified_files = True + # Avoid sub-second precision (see #14665, #19540) + file_is_unmodified = ( + target_last_modified.replace(microsecond=0) >= + source_last_modified.replace(microsecond=0) + ) + if file_is_unmodified and can_skip_unmodified_files: + if prefixed_path not in self.unmodified_files: + self.unmodified_files.append(prefixed_path) + self.log("Skipping '%s' (not modified)" % path) + return False + # Then delete the existing file if really needed + if self.dry_run: + self.log("Pretending to delete '%s'" % path) + else: + self.log("Deleting '%s'" % path) + self.storage.delete(prefixed_path) + return True + + def link_file(self, path, prefixed_path, source_storage): + """ + Attempt to link ``path`` + """ + # Skip this file if it was already copied earlier + if prefixed_path in self.symlinked_files: + return self.log("Skipping '%s' (already linked earlier)" % path) + # Delete the target file if needed or break + if not self.delete_file(path, prefixed_path, source_storage): + return + # The full path of the source file + source_path = source_storage.path(path) + # Finally link the file + if self.dry_run: + self.log("Pretending to link '%s'" % source_path, level=1) + else: + self.log("Linking '%s'" % source_path, level=2) + full_path = self.storage.path(prefixed_path) + try: + os.makedirs(os.path.dirname(full_path)) + except OSError: + pass + try: + if os.path.lexists(full_path): + os.unlink(full_path) + os.symlink(source_path, full_path) + except AttributeError: + import platform + raise CommandError("Symlinking is not supported by Python %s." % + platform.python_version()) + except NotImplementedError: + import platform + raise CommandError("Symlinking is not supported in this " + "platform (%s)." % platform.platform()) + except OSError as e: + raise CommandError(e) + if prefixed_path not in self.symlinked_files: + self.symlinked_files.append(prefixed_path) + + def copy_file(self, path, prefixed_path, source_storage): + """ + Attempt to copy ``path`` with storage + """ + # Skip this file if it was already copied earlier + if prefixed_path in self.copied_files: + return self.log("Skipping '%s' (already copied earlier)" % path) + # Delete the target file if needed or break + if not self.delete_file(path, prefixed_path, source_storage): + return + # The full path of the source file + source_path = source_storage.path(path) + # Finally start copying + if self.dry_run: + self.log("Pretending to copy '%s'" % source_path, level=1) + else: + self.log("Copying '%s'" % source_path, level=2) + with source_storage.open(path) as source_file: + self.storage.save(prefixed_path, source_file) + self.copied_files.append(prefixed_path) diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/findstatic.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/findstatic.py new file mode 100644 index 0000000..cd58015 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/findstatic.py @@ -0,0 +1,43 @@ +import os + +from django.contrib.staticfiles import finders +from django.core.management.base import LabelCommand + + +class Command(LabelCommand): + help = "Finds the absolute paths for the given static file(s)." + label = 'staticfile' + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + '--first', action='store_false', dest='all', + help="Only return the first match for each static file.", + ) + + def handle_label(self, path, **options): + verbosity = options['verbosity'] + result = finders.find(path, all=options['all']) + if verbosity >= 2: + searched_locations = ( + "\nLooking in the following locations:\n %s" % + "\n ".join(finders.searched_locations) + ) + else: + searched_locations = '' + if result: + if not isinstance(result, (list, tuple)): + result = [result] + result = (os.path.realpath(path) for path in result) + if verbosity >= 1: + file_list = '\n '.join(result) + return ("Found '%s' here:\n %s%s" % + (path, file_list, searched_locations)) + else: + return '\n'.join(result) + else: + message = ["No matching file found for '%s'." % path] + if verbosity >= 2: + message.append(searched_locations) + if verbosity >= 1: + self.stderr.write('\n'.join(message)) diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/runserver.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/runserver.py new file mode 100644 index 0000000..fe050f4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/runserver.py @@ -0,0 +1,32 @@ +from django.conf import settings +from django.contrib.staticfiles.handlers import StaticFilesHandler +from django.core.management.commands.runserver import ( + Command as RunserverCommand, +) + + +class Command(RunserverCommand): + help = "Starts a lightweight Web server for development and also serves static files." + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + '--nostatic', action="store_false", dest='use_static_handler', + help='Tells Django to NOT automatically serve static files at STATIC_URL.', + ) + parser.add_argument( + '--insecure', action="store_true", dest='insecure_serving', + help='Allows serving static files even if DEBUG is False.', + ) + + def get_handler(self, *args, **options): + """ + Return the static files serving handler wrapping the default handler, + if static files should be served. Otherwise return the default handler. + """ + handler = super().get_handler(*args, **options) + use_static_handler = options['use_static_handler'] + insecure_serving = options['insecure_serving'] + if use_static_handler and (settings.DEBUG or insecure_serving): + return StaticFilesHandler(handler) + return handler diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/storage.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/storage.py new file mode 100644 index 0000000..371e9f2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/storage.py @@ -0,0 +1,494 @@ +import hashlib +import json +import os +import posixpath +import re +from collections import OrderedDict +from urllib.parse import unquote, urldefrag, urlsplit, urlunsplit + +from django.conf import settings +from django.contrib.staticfiles.utils import check_settings, matches_patterns +from django.core.cache import ( + InvalidCacheBackendError, cache as default_cache, caches, +) +from django.core.exceptions import ImproperlyConfigured +from django.core.files.base import ContentFile +from django.core.files.storage import FileSystemStorage, get_storage_class +from django.utils.encoding import force_bytes +from django.utils.functional import LazyObject + + +class StaticFilesStorage(FileSystemStorage): + """ + Standard file system storage for static files. + + The defaults for ``location`` and ``base_url`` are + ``STATIC_ROOT`` and ``STATIC_URL``. + """ + def __init__(self, location=None, base_url=None, *args, **kwargs): + if location is None: + location = settings.STATIC_ROOT + if base_url is None: + base_url = settings.STATIC_URL + check_settings(base_url) + super().__init__(location, base_url, *args, **kwargs) + # FileSystemStorage fallbacks to MEDIA_ROOT when location + # is empty, so we restore the empty value. + if not location: + self.base_location = None + self.location = None + + def path(self, name): + if not self.location: + raise ImproperlyConfigured("You're using the staticfiles app " + "without having set the STATIC_ROOT " + "setting to a filesystem path.") + return super().path(name) + + +class HashedFilesMixin: + default_template = """url("%s")""" + max_post_process_passes = 5 + patterns = ( + ("*.css", ( + r"""(url\(['"]{0,1}\s*(.*?)["']{0,1}\))""", + (r"""(@import\s*["']\s*(.*?)["'])""", """@import url("%s")"""), + )), + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._patterns = OrderedDict() + self.hashed_files = {} + for extension, patterns in self.patterns: + for pattern in patterns: + if isinstance(pattern, (tuple, list)): + pattern, template = pattern + else: + template = self.default_template + compiled = re.compile(pattern, re.IGNORECASE) + self._patterns.setdefault(extension, []).append((compiled, template)) + + def file_hash(self, name, content=None): + """ + Return a hash of the file with the given name and optional content. + """ + if content is None: + return None + md5 = hashlib.md5() + for chunk in content.chunks(): + md5.update(chunk) + return md5.hexdigest()[:12] + + def hashed_name(self, name, content=None, filename=None): + # `filename` is the name of file to hash if `content` isn't given. + # `name` is the base name to construct the new hashed filename from. + parsed_name = urlsplit(unquote(name)) + clean_name = parsed_name.path.strip() + filename = (filename and urlsplit(unquote(filename)).path.strip()) or clean_name + opened = content is None + if opened: + if not self.exists(filename): + raise ValueError("The file '%s' could not be found with %r." % (filename, self)) + try: + content = self.open(filename) + except IOError: + # Handle directory paths and fragments + return name + try: + file_hash = self.file_hash(clean_name, content) + finally: + if opened: + content.close() + path, filename = os.path.split(clean_name) + root, ext = os.path.splitext(filename) + if file_hash is not None: + file_hash = ".%s" % file_hash + hashed_name = os.path.join(path, "%s%s%s" % + (root, file_hash, ext)) + unparsed_name = list(parsed_name) + unparsed_name[2] = hashed_name + # Special casing for a @font-face hack, like url(myfont.eot?#iefix") + # http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax + if '?#' in name and not unparsed_name[3]: + unparsed_name[2] += '?' + return urlunsplit(unparsed_name) + + def _url(self, hashed_name_func, name, force=False, hashed_files=None): + """ + Return the non-hashed URL in DEBUG mode. + """ + if settings.DEBUG and not force: + hashed_name, fragment = name, '' + else: + clean_name, fragment = urldefrag(name) + if urlsplit(clean_name).path.endswith('/'): # don't hash paths + hashed_name = name + else: + args = (clean_name,) + if hashed_files is not None: + args += (hashed_files,) + hashed_name = hashed_name_func(*args) + + final_url = super().url(hashed_name) + + # Special casing for a @font-face hack, like url(myfont.eot?#iefix") + # http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax + query_fragment = '?#' in name # [sic!] + if fragment or query_fragment: + urlparts = list(urlsplit(final_url)) + if fragment and not urlparts[4]: + urlparts[4] = fragment + if query_fragment and not urlparts[3]: + urlparts[2] += '?' + final_url = urlunsplit(urlparts) + + return unquote(final_url) + + def url(self, name, force=False): + """ + Return the non-hashed URL in DEBUG mode. + """ + return self._url(self.stored_name, name, force) + + def url_converter(self, name, hashed_files, template=None): + """ + Return the custom URL converter for the given file name. + """ + if template is None: + template = self.default_template + + def converter(matchobj): + """ + Convert the matched URL to a normalized and hashed URL. + + This requires figuring out which files the matched URL resolves + to and calling the url() method of the storage. + """ + matched, url = matchobj.groups() + + # Ignore absolute/protocol-relative and data-uri URLs. + if re.match(r'^[a-z]+:', url): + return matched + + # Ignore absolute URLs that don't point to a static file (dynamic + # CSS / JS?). Note that STATIC_URL cannot be empty. + if url.startswith('/') and not url.startswith(settings.STATIC_URL): + return matched + + # Strip off the fragment so a path-like fragment won't interfere. + url_path, fragment = urldefrag(url) + + if url_path.startswith('/'): + # Otherwise the condition above would have returned prematurely. + assert url_path.startswith(settings.STATIC_URL) + target_name = url_path[len(settings.STATIC_URL):] + else: + # We're using the posixpath module to mix paths and URLs conveniently. + source_name = name if os.sep == '/' else name.replace(os.sep, '/') + target_name = posixpath.join(posixpath.dirname(source_name), url_path) + + # Determine the hashed name of the target file with the storage backend. + hashed_url = self._url( + self._stored_name, unquote(target_name), + force=True, hashed_files=hashed_files, + ) + + transformed_url = '/'.join(url_path.split('/')[:-1] + hashed_url.split('/')[-1:]) + + # Restore the fragment that was stripped off earlier. + if fragment: + transformed_url += ('?#' if '?#' in url else '#') + fragment + + # Return the hashed version to the file + return template % unquote(transformed_url) + + return converter + + def post_process(self, paths, dry_run=False, **options): + """ + Post process the given OrderedDict of files (called from collectstatic). + + Processing is actually two separate operations: + + 1. renaming files to include a hash of their content for cache-busting, + and copying those files to the target storage. + 2. adjusting files which contain references to other files so they + refer to the cache-busting filenames. + + If either of these are performed on a file, then that file is considered + post-processed. + """ + # don't even dare to process the files if we're in dry run mode + if dry_run: + return + + # where to store the new paths + hashed_files = OrderedDict() + + # build a list of adjustable files + adjustable_paths = [ + path for path in paths + if matches_patterns(path, self._patterns) + ] + # Do a single pass first. Post-process all files once, then repeat for + # adjustable files. + for name, hashed_name, processed, _ in self._post_process(paths, adjustable_paths, hashed_files): + yield name, hashed_name, processed + + paths = {path: paths[path] for path in adjustable_paths} + + for i in range(self.max_post_process_passes): + substitutions = False + for name, hashed_name, processed, subst in self._post_process(paths, adjustable_paths, hashed_files): + yield name, hashed_name, processed + substitutions = substitutions or subst + + if not substitutions: + break + + if substitutions: + yield 'All', None, RuntimeError('Max post-process passes exceeded.') + + # Store the processed paths + self.hashed_files.update(hashed_files) + + def _post_process(self, paths, adjustable_paths, hashed_files): + # Sort the files by directory level + def path_level(name): + return len(name.split(os.sep)) + + for name in sorted(paths, key=path_level, reverse=True): + substitutions = True + # use the original, local file, not the copied-but-unprocessed + # file, which might be somewhere far away, like S3 + storage, path = paths[name] + with storage.open(path) as original_file: + cleaned_name = self.clean_name(name) + hash_key = self.hash_key(cleaned_name) + + # generate the hash with the original content, even for + # adjustable files. + if hash_key not in hashed_files: + hashed_name = self.hashed_name(name, original_file) + else: + hashed_name = hashed_files[hash_key] + + # then get the original's file content.. + if hasattr(original_file, 'seek'): + original_file.seek(0) + + hashed_file_exists = self.exists(hashed_name) + processed = False + + # ..to apply each replacement pattern to the content + if name in adjustable_paths: + old_hashed_name = hashed_name + content = original_file.read().decode(settings.FILE_CHARSET) + for extension, patterns in self._patterns.items(): + if matches_patterns(path, (extension,)): + for pattern, template in patterns: + converter = self.url_converter(name, hashed_files, template) + try: + content = pattern.sub(converter, content) + except ValueError as exc: + yield name, None, exc, False + if hashed_file_exists: + self.delete(hashed_name) + # then save the processed result + content_file = ContentFile(force_bytes(content)) + # Save intermediate file for reference + saved_name = self._save(hashed_name, content_file) + hashed_name = self.hashed_name(name, content_file) + + if self.exists(hashed_name): + self.delete(hashed_name) + + saved_name = self._save(hashed_name, content_file) + hashed_name = self.clean_name(saved_name) + # If the file hash stayed the same, this file didn't change + if old_hashed_name == hashed_name: + substitutions = False + processed = True + + if not processed: + # or handle the case in which neither processing nor + # a change to the original file happened + if not hashed_file_exists: + processed = True + saved_name = self._save(hashed_name, original_file) + hashed_name = self.clean_name(saved_name) + + # and then set the cache accordingly + hashed_files[hash_key] = hashed_name + + yield name, hashed_name, processed, substitutions + + def clean_name(self, name): + return name.replace('\\', '/') + + def hash_key(self, name): + return name + + def _stored_name(self, name, hashed_files): + # Normalize the path to avoid multiple names for the same file like + # ../foo/bar.css and ../foo/../foo/bar.css which normalize to the same + # path. + name = posixpath.normpath(name) + cleaned_name = self.clean_name(name) + hash_key = self.hash_key(cleaned_name) + cache_name = hashed_files.get(hash_key) + if cache_name is None: + cache_name = self.clean_name(self.hashed_name(name)) + return cache_name + + def stored_name(self, name): + cleaned_name = self.clean_name(name) + hash_key = self.hash_key(cleaned_name) + cache_name = self.hashed_files.get(hash_key) + if cache_name: + return cache_name + # No cached name found, recalculate it from the files. + intermediate_name = name + for i in range(self.max_post_process_passes + 1): + cache_name = self.clean_name( + self.hashed_name(name, content=None, filename=intermediate_name) + ) + if intermediate_name == cache_name: + # Store the hashed name if there was a miss. + self.hashed_files[hash_key] = cache_name + return cache_name + else: + # Move on to the next intermediate file. + intermediate_name = cache_name + # If the cache name can't be determined after the max number of passes, + # the intermediate files on disk may be corrupt; avoid an infinite loop. + raise ValueError("The name '%s' could not be hashed with %r." % (name, self)) + + +class ManifestFilesMixin(HashedFilesMixin): + manifest_version = '1.0' # the manifest format standard + manifest_name = 'staticfiles.json' + manifest_strict = True + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.hashed_files = self.load_manifest() + + def read_manifest(self): + try: + with self.open(self.manifest_name) as manifest: + return manifest.read().decode() + except IOError: + return None + + def load_manifest(self): + content = self.read_manifest() + if content is None: + return OrderedDict() + try: + stored = json.loads(content, object_pairs_hook=OrderedDict) + except json.JSONDecodeError: + pass + else: + version = stored.get('version') + if version == '1.0': + return stored.get('paths', OrderedDict()) + raise ValueError("Couldn't load manifest '%s' (version %s)" % + (self.manifest_name, self.manifest_version)) + + def post_process(self, *args, **kwargs): + self.hashed_files = OrderedDict() + yield from super().post_process(*args, **kwargs) + self.save_manifest() + + def save_manifest(self): + payload = {'paths': self.hashed_files, 'version': self.manifest_version} + if self.exists(self.manifest_name): + self.delete(self.manifest_name) + contents = json.dumps(payload).encode() + self._save(self.manifest_name, ContentFile(contents)) + + def stored_name(self, name): + parsed_name = urlsplit(unquote(name)) + clean_name = parsed_name.path.strip() + hash_key = self.hash_key(clean_name) + cache_name = self.hashed_files.get(hash_key) + if cache_name is None: + if self.manifest_strict: + raise ValueError("Missing staticfiles manifest entry for '%s'" % clean_name) + cache_name = self.clean_name(self.hashed_name(name)) + unparsed_name = list(parsed_name) + unparsed_name[2] = cache_name + # Special casing for a @font-face hack, like url(myfont.eot?#iefix") + # http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax + if '?#' in name and not unparsed_name[3]: + unparsed_name[2] += '?' + return urlunsplit(unparsed_name) + + +class _MappingCache: + """ + A small dict-like wrapper for a given cache backend instance. + """ + def __init__(self, cache): + self.cache = cache + + def __setitem__(self, key, value): + self.cache.set(key, value) + + def __getitem__(self, key): + value = self.cache.get(key) + if value is None: + raise KeyError("Couldn't find a file name '%s'" % key) + return value + + def clear(self): + self.cache.clear() + + def update(self, data): + self.cache.set_many(data) + + def get(self, key, default=None): + try: + return self[key] + except KeyError: + return default + + +class CachedFilesMixin(HashedFilesMixin): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + try: + self.hashed_files = _MappingCache(caches['staticfiles']) + except InvalidCacheBackendError: + # Use the default backend + self.hashed_files = _MappingCache(default_cache) + + def hash_key(self, name): + key = hashlib.md5(force_bytes(self.clean_name(name))).hexdigest() + return 'staticfiles:%s' % key + + +class CachedStaticFilesStorage(CachedFilesMixin, StaticFilesStorage): + """ + A static file system storage backend which also saves + hashed copies of the files it saves. + """ + pass + + +class ManifestStaticFilesStorage(ManifestFilesMixin, StaticFilesStorage): + """ + A static file system storage backend which also saves + hashed copies of the files it saves. + """ + pass + + +class ConfiguredStorage(LazyObject): + def _setup(self): + self._wrapped = get_storage_class(settings.STATICFILES_STORAGE)() + + +staticfiles_storage = ConfiguredStorage() diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__init__.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3625838062c1513720c0129bf85f95f1e8a2e0ca GIT binary patch literal 165 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(SCD>5Zh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rYWD=ErM(l0JaEXhnx%gjkF)-OrTEyzhMNi9iC hFV>Hb&&wDlV4g z(X z2<+PZ+*YD%n>0m5)cpemSh`)s=F@jjL$v>TKQVbVsnY6VzDYB2QLJXq#O2yd+U&>U zP|u`O&!h{idl6PUWn*lLuRRpN9AuBdAEDA^c#qT4a(l~=XzVVZ z-due-_p>q57on?u)z>n@ql>LDpm+@>4dpPWjLpdcOgp0P&Il literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py new file mode 100644 index 0000000..9fa3926 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py @@ -0,0 +1,28 @@ +import warnings + +from django import template +from django.templatetags.static import ( + do_static as _do_static, static as _static, +) +from django.utils.deprecation import RemovedInDjango30Warning + +register = template.Library() + + +def static(path): + warnings.warn( + 'django.contrib.staticfiles.templatetags.static() is deprecated in ' + 'favor of django.templatetags.static.static().', + RemovedInDjango30Warning, + stacklevel=2, + ) + return _static(path) + + +@register.tag('static') +def do_static(parser, token): + warnings.warn( + '{% load staticfiles %} is deprecated in favor of {% load static %}.', + RemovedInDjango30Warning, + ) + return _do_static(parser, token) diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/testing.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/testing.py new file mode 100644 index 0000000..546a24a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/testing.py @@ -0,0 +1,13 @@ +from django.contrib.staticfiles.handlers import StaticFilesHandler +from django.test import LiveServerTestCase + + +class StaticLiveServerTestCase(LiveServerTestCase): + """ + Extend django.test.LiveServerTestCase to transparently overlay at test + execution-time the assets provided by the staticfiles app finders. This + means you don't need to run collectstatic before or as a part of your tests + setup. + """ + + static_handler = StaticFilesHandler diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/urls.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/urls.py new file mode 100644 index 0000000..6278f35 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/urls.py @@ -0,0 +1,19 @@ +from django.conf import settings +from django.conf.urls.static import static +from django.contrib.staticfiles.views import serve + +urlpatterns = [] + + +def staticfiles_urlpatterns(prefix=None): + """ + Helper function to return a URL pattern for serving static files. + """ + if prefix is None: + prefix = settings.STATIC_URL + return static(prefix, view=serve) + + +# Only append if urlpatterns are empty +if settings.DEBUG and not urlpatterns: + urlpatterns += staticfiles_urlpatterns() diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/utils.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/utils.py new file mode 100644 index 0000000..d4025cf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/utils.py @@ -0,0 +1,54 @@ +import fnmatch +import os + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured + + +def matches_patterns(path, patterns=None): + """ + Return True or False depending on whether the ``path`` should be + ignored (if it matches any pattern in ``ignore_patterns``). + """ + return any(fnmatch.fnmatchcase(path, pattern) for pattern in (patterns or [])) + + +def get_files(storage, ignore_patterns=None, location=''): + """ + Recursively walk the storage directories yielding the paths + of all files that should be copied. + """ + if ignore_patterns is None: + ignore_patterns = [] + directories, files = storage.listdir(location) + for fn in files: + if matches_patterns(fn, ignore_patterns): + continue + if location: + fn = os.path.join(location, fn) + yield fn + for dir in directories: + if matches_patterns(dir, ignore_patterns): + continue + if location: + dir = os.path.join(location, dir) + yield from get_files(storage, ignore_patterns, dir) + + +def check_settings(base_url=None): + """ + Check if the staticfiles settings have sane values. + """ + if base_url is None: + base_url = settings.STATIC_URL + if not base_url: + raise ImproperlyConfigured( + "You're using the staticfiles app " + "without having set the required STATIC_URL setting.") + if settings.MEDIA_URL == base_url: + raise ImproperlyConfigured("The MEDIA_URL and STATIC_URL " + "settings must have different values") + if ((settings.MEDIA_ROOT and settings.STATIC_ROOT) and + (settings.MEDIA_ROOT == settings.STATIC_ROOT)): + raise ImproperlyConfigured("The MEDIA_ROOT and STATIC_ROOT " + "settings must have different values") diff --git a/env/lib/python3.5/site-packages/django/contrib/staticfiles/views.py b/env/lib/python3.5/site-packages/django/contrib/staticfiles/views.py new file mode 100644 index 0000000..9987f49 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/staticfiles/views.py @@ -0,0 +1,39 @@ +""" +Views and functions for serving static files. These are only to be used during +development, and SHOULD NOT be used in a production setting. + +""" +import os +import posixpath + +from django.conf import settings +from django.contrib.staticfiles import finders +from django.http import Http404 +from django.views import static + + +def serve(request, path, insecure=False, **kwargs): + """ + Serve static files below a given point in the directory structure or + from locations inferred from the staticfiles finders. + + To use, put a URL pattern such as:: + + from django.contrib.staticfiles import views + + url(r'^(?P.*)$', views.serve) + + in your URLconf. + + It uses the django.views.static.serve() view to serve the found files. + """ + if not settings.DEBUG and not insecure: + raise Http404 + normalized_path = posixpath.normpath(path).lstrip('/') + absolute_path = finders.find(normalized_path) + if not absolute_path: + if path.endswith('/') or path == '': + raise Http404("Directory indexes are not allowed here.") + raise Http404("'%s' could not be found" % path) + document_root, path = os.path.split(absolute_path) + return static.serve(request, path, document_root=document_root, **kwargs) diff --git a/env/lib/python3.5/site-packages/django/contrib/syndication/__init__.py b/env/lib/python3.5/site-packages/django/contrib/syndication/__init__.py new file mode 100644 index 0000000..2c3f525 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/contrib/syndication/__init__.py @@ -0,0 +1 @@ +default_app_config = 'django.contrib.syndication.apps.SyndicationConfig' diff --git a/env/lib/python3.5/site-packages/django/contrib/syndication/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/contrib/syndication/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8aa6b7d95c83ae497391fcce449b8f4f0e8ff019 GIT binary patch literal 226 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/__pycache__/paginator.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/__pycache__/paginator.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc2e5078159b43d9cf2478b94c35f7b88816ab6c GIT binary patch literal 6755 zcmbVR-H+T>6~7*PW@lz+zdzG7)M-iEshSB5ph74mA%v(^wS{g<>455b?Yq0)_1M$v zJ8fo?l@J?vp+X?_2?+^_g4Aau9{5l2D^L9wc;a`?9eZZCo6yv=zP>*9`hJ|x-?_U! zH`lxxT>GWBA;f>g)a9Ul9e4I`6e0dB5ew0^ih4zKD_pOL*cLrUbRA()KU>6A(W{AW z&AdAzo)Nve=r)9PJFJSZCLW+$O~|G=wncYV+zw|%SZ8Wo$QD!QKy8Sy$<(Hhb4;BF zbykEernU;|0;qE$oM-C1IL6Wzg9rH3H3_N3PGuJ&SoGz{p2;<8Y=jyqdKAq)NxXK3(B{>0l! zszRw`_~y=m4D=gOrr+^Z5+!?EZ9A`fUgGzp=jBb$>!sl!rh3csJ{b71Y57d32FB*% zzb{|Wz5bPc)W5tlh~n^aa^QV8yn3jwga>}Imlls8Rq{&T--{Aor>fH*sw#${VX_K} zmc{RnwUOD^k`Mhj3V-77NvvGeXiYOz)Tt!Q^DV~fm;D23V+1?B^zSrXwg83IvSB3u#SD!q1LIcw0> z^}K-%8;wz<)^`F@8oKC7dUF$Z_9}||mbfp3hl&sfmN*u|(iL&PLSs{dE$G!QULA2C zf1qO%0#jLA?OHyYvO#z;EF!<)!Q_HNZ;IwcnKw3_+>R2R*I|ubAL^ISq^iH~Ct1Gk z$8q|RCrMh~Zlp5J9op60$z;5%7O+;eOvMTnt5i%hm6Vh$FiIlrdFSz#5lK`UR?}L* zZ?s%;q*HVYh!J$LA>qkP`4=j~t3oqtG&oWb>JqW(06c-g;YHix*Ot&=1ez^zWQli@ z7lfm$)UsOCMY3Fc=+Fwv54YRZ(Q`i|diu`3uct|Fl(|W&T|aRlC9=}bNqa_5oz*dxS%w+V_odN=Nrxa!v>zojkgH@i zh;`PU&6`mMn)Z`G=GEOe^)-Tvi7`jXV@RVlf~zjr^pWT2G-7c zk+BA}D~e1tubC~KR)__5bKrz$+Mhw+>(DnGdE*YhznD!B>lILM6$19wI;5S0aM2^?Iv8rEojqL?I)fGm?Pdwjo%XGTV1 zJQsHRdv?&Hzm-BRc1q@LjL}VZp(e1+y;!nVb(&@GJNs}4`)PXU1~Bp+=?=()>p+feypVeMuEE_DtK28L{o*n3f*f#oLzgL*!=#O&l3eC)J849BW%(R zlsU_5hab`NG?%`PZN5(XWe+|xTAA>siS*>4*lIQsUOkE9@Oxl*wl#?c==%a1i89_8*+t7;@XS6WcH>+K_XW~m~RJZX$*1^D^ z0?7q_wGhiLFt~+BLWnV4j2Uer>cL-`5J#k{I1kUZ-L^*;AF=yB1ekRgaunu43uj-Q z+dcoT3Es3ij^%~_cJ?Fv1tF8~c@Ot^%jYb|I%iFbx{L+own^0Gwh1D@79cd*0DF-Q zY>RCEu++`MB+3ZMev!6SFRd_iF zattCGLVZm279IraOg~@`D8(-bw!(uNBE=zYh2#%v)FA;3MZM?%ZGbNZx;X$studW3 zqXx9)6!5r$s7LH>jNU9cMfnniEP`~MDTGMKV^E}5?(=%sj{=y^(DmJ)4x}1xOWmHZ zlu#olVq19?nU;)4)q6+oy`zzH@1i;yy)kB3lqPP^AG*Ux#vxoDph*UVN&#|=OjwZQ zy(V){E$SME?Bq?jui!97u#G<_X1AO941Bu}`(=C1XZHP!-troR-}ANl26`a?c(mu|(4E7~jG#Rw`|7mEqntFsol&F_&YHDif74p7)Bs}W zH+pWOB#*@3TkZMN`QADPG*Rqns$Hal9IT?{`lq9-l- zChm+Nk%1JHMzL9WFgdmqj}KNjPqK~sr`~x3mTdB~0vT{(8u7UGoxQV<9P^;o(Duz zPS+Z5pBn<2fi8NIaCrBxqeAWwfee4VZ#c5-e38HzmN){58_|D274mwVQ=#G+Cy3G# z=S;4vHZi8jQL0%S1yVgp1d?9vQ2twlv}%-u^6n`)=CdB*69kl==lv1im@E~!N6lVF z7Bb>v63DddbT%7T@F^{HN~Xvr$6EH~BnYSFB{&EB6Rm=|S4gmEIeTi7pqUzag$$MS z$b>kHb>|@()1p!PN`4rngY3^!b1tzMr&~|VOWMP-BnvR}9t+W5<2n-G@vbZChiF$f zP&{M-3p7Ov$Yu^6vcI5fv2Tj7vU94#iDlU6&C4KzGRpv>pb8%kZXELw;g}J&ViR`J z^-(NYB=&RKG)_?6py7EBQql z1EjIepmR($CatI}X z%!;&x;kt?O86W|V(Jy@Q1Yt};SjR~78ImTad1PM?QLa|~!8W<7*Y4Vi?7OaGW~X$_|ZoaM?++59lL@;!W}UZLVT6=e6u0}v0@ zkEpms#gD0={AbD$Pms#9Xn24-Bj?hpw5lx|zXq37vs+CL`|UOSCn1ev9Qp%OW*vVg z$Y-Yr>ScVNJHUSXiUir+FlYFkfsW#=vpY!mLqBFn)!jVNssZ>j($F+f6uFR-VX*nP zaEcK1BmriiMuv-d-t03pN+xb##DDGKr8x}>(ToeIu<4PVNY6E8sG z#5OcoyR+*V?W}z{8l5f6o5ybe_@w+lF?IKpeoY`K7*qf|2Alyy1|kB{1Ige3j7LDs z0f6_8%~9%iQomzj5DADBWUn2e>i|}>;TPG%j5WzhNnKR@+&Z&YLTQ;7PWmQAy;siY zCUy8)qYpgw7y{`{yf3O6d5k)sdzdABEVhM~W+9ZfMJP8eB5yuE4dy-+E}-C(j(ApD z`3*4_(uBNY@vTG~l+k>A+LV_Y@9 grE!?~_HTY+-Y{;hU7xtxWA^-pY literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/__pycache__/signing.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/__pycache__/signing.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0e49402ce2e54195268501b2d9ebd73e23abd15 GIT binary patch literal 7723 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 BDRBS* literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/__pycache__/validators.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/__pycache__/validators.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..632fa6cf0b695e4e7e871e821a05d81ff00249d5 GIT binary patch literal 17284 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/cache/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6c8f17e3e04ea624c7c9767ffa9489cd8b3034b GIT binary patch literal 727 zcmZ`$&2AGh5FXo`OL~4%ldBij>7Nr(fkG06FEYiY{qj)C#R|++z zHVef;v#4*;)Hif1>AdPyN!2}HBpL4(X?VmB=DNqzsF;@9BQB-r)vM?&bdo8* zTCR8cQ&EV^N)C4IKo-S?t8O06MYvsGIFZpb7ljVzV(Is@GLAAe@b4-;*EngJ6s9?g z)GSNR4a@nVaYYfAT$mT*;pyj3C*xuG{>#aS)8S|wejI)ew^6e*6PG-h3Z*?K=-goy zQ7(cevRsB`VHiRiCz4ZDQ{K3i-O026&uW*WEH5B!;*#g&3BkVw@EY;~9;UsJ8IJ2$ lkyN7IuzZN|I_DmYZ6j-}RzENKA`=7qo61GkCVSLn{{Y8FsP_N> literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/__init__.py b/env/lib/python3.5/site-packages/django/core/cache/backends/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2df5a1b2cee522bc769a51da6c50d16b22208d34 GIT binary patch literal 152 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m#cnBZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rWgO4UzJOwLHvPfASAPR&ax){l?R%*!l^kJl@x Uyv1RYo1apelWGStz8HuZ0PUb9EdT%j literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f721eec5b12b85efb201cc027855d4515bda049 GIT binary patch literal 10209 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/db.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/db.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1f51faf872a611d6922ff45fc03173a9b981c51 GIT binary patch literal 7577 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 VAhf1wHjOpo90IawEibKA{s}#x@cIA% literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/dummy.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/dummy.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..251808a547c5ded51a1899b9d5a08ca0a9f9c4b1 GIT binary patch literal 1851 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 QbE9yQ_1)^PQhvSzN5&jz0Y6 zyC%{1RCrwUe~mZ&3!0dyjaE@yqC`;}9osKayCi*w5{G&&wOvyD&85VnUYXiuJN784 zP_IhuD)nmAu952C%sO$qAZ>#_iOUpM=mq{$g>;RcJJep}f4T2hPv1W{GCGXc)9_HQ zb^7Z)-5Z#bwJ3~^^xC&!)YbiX<0WLJU0>x3dnVRK$M-r>hM~JNh`N3$Z{EAV{hKd$ z4uXSEKfAy8vJxFTbfzeC`NQ)Poe>2dW##catU8`7Q&yQQt`-(ULzY18 z`t{sPM?-D$Y7lh#oh%6QN+4!U^LnbYSRaO?Br_!ll9%n5yb{S#P*G>7@d)8xzfT zBaheMDdSzhdlzr|1Pu^8Ml0kx1FT9t1Kt*ORYbi+3_n(s=$R)gJUZVb#cRua04!u4 z$%hIL&#=g0UsCKzVA1|VK>zs{Ux@+S-MsQdo3u0NA8h;8yxI%9I_T?-$ot_?yGIN=~RP52QS;ojVmt;p6gUoSf!0&8$E$!`caO=56#q`&cJB(}u;*7kYyyI>-hA0-IUo87~=x zaq4>lsJSLvCf>nFnl*0bQGBGccQK!~&{z~1!$n}YsIJZ7h_zE38BczNp#eIG0<5tR z%p%tH$oyC)p*ju+LUsiJ+Oj7}on0J8wCz`NC((UDq1_02 z;Zs16nT}53+tDaV%==iDFGJX1?2f^NPz`+X-B$paA7R2==Vlfc^A6^2;Z5sk2tHc} z9xLi}smLoP@S9zh0byPKf0tb?xa=z*E&683lE$wT*uq3GSGc*#4SSuaGIldzMM3HR zP77#u2b;(0Pn>Jktyp`e06+Yfp%OYgL}y0(S+_dBZFK`3Y&g0tS)6ykxg>{hU#PM5 zdPEXe***Z##Y;p-b`bMZZeBC7SXUICHF54`gHd$!AvUGFiOJ8@ciGGri)NN}FBO(d z)vaJKjUxZV;0M&TN(!|RMb77<$XBv;8bvY`2!hKBLd;(aPQVeR7&JJz2%uqtv*@1c_Y2K)*obRhl3H~i*>w4 zfoQK#e-GN{_1|;kzHiLHh+|4bGB@z4z()2`(+!YoXSI}vqjH28q~TtMIxW)ygVxVw&xFaM1P!m_KFn`m;EqiRw7 z+(FefXERA%xExR_kpc!fT`dY+tOz1@F@88lPo;*$W2uoQx+OBVWT?h6ieEXCL4Svf zPF8Z7hlsACRC;=c;9Axd@BQ(HXf3PYAJFt0;NZ|WX(I?Z^wHxz;%K|?BhIp5ex==% z{1O}*{dlDN(TUB(UXzY6A|^0E0( zc*j=eEWA`&K|KS|W&)CkF|{$qexwywu(fxi>4H1Moi<#CI(iK^Xpd3 zH?y;ty#cvv^E2Dd{DK?FUCKf}hcO{xb$ZxD|X z?l*$q@hD8}7rBxc_DAzBH|)()C77Ra?-n;7aKmI02R2MivAEgdo=7{D&{u}5N5f^g zVfnZsmk`}ht#Yg0T4+{Ul~%RYY}OiXqu!`A%d*bDfTA{t2T>5%gmDKO^Mz=TBs$7) z=Sc0fu9nH=zSDmscewU-d;i+ti`PcP*Yl0Z#S5KOTirN{7`Bmh%|-69bOpB)734Ni Z-LhEyiVZ8pa9K6*v&1gwmKA=S{{TD#C&&N* literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/memcached.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/cache/backends/__pycache__/memcached.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..706186cf27850c3311f595a15e951b215e24e763 GIT binary patch literal 7337 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/base.py b/env/lib/python3.5/site-packages/django/core/cache/backends/base.py new file mode 100644 index 0000000..0d0b1dd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/backends/base.py @@ -0,0 +1,283 @@ +"Base Cache class." +import time +import warnings + +from django.core.exceptions import ImproperlyConfigured +from django.utils.module_loading import import_string + + +class InvalidCacheBackendError(ImproperlyConfigured): + pass + + +class CacheKeyWarning(RuntimeWarning): + pass + + +# Stub class to ensure not passing in a `timeout` argument results in +# the default timeout +DEFAULT_TIMEOUT = object() + +# Memcached does not accept keys longer than this. +MEMCACHE_MAX_KEY_LENGTH = 250 + + +def default_key_func(key, key_prefix, version): + """ + Default function to generate keys. + + Construct the key used by all other methods. By default, prepend + the `key_prefix'. KEY_FUNCTION can be used to specify an alternate + function with custom key making behavior. + """ + return '%s:%s:%s' % (key_prefix, version, key) + + +def get_key_func(key_func): + """ + Function to decide which key function to use. + + Default to ``default_key_func``. + """ + if key_func is not None: + if callable(key_func): + return key_func + else: + return import_string(key_func) + return default_key_func + + +class BaseCache: + def __init__(self, params): + timeout = params.get('timeout', params.get('TIMEOUT', 300)) + if timeout is not None: + try: + timeout = int(timeout) + except (ValueError, TypeError): + timeout = 300 + self.default_timeout = timeout + + options = params.get('OPTIONS', {}) + max_entries = params.get('max_entries', options.get('MAX_ENTRIES', 300)) + try: + self._max_entries = int(max_entries) + except (ValueError, TypeError): + self._max_entries = 300 + + cull_frequency = params.get('cull_frequency', options.get('CULL_FREQUENCY', 3)) + try: + self._cull_frequency = int(cull_frequency) + except (ValueError, TypeError): + self._cull_frequency = 3 + + self.key_prefix = params.get('KEY_PREFIX', '') + self.version = params.get('VERSION', 1) + self.key_func = get_key_func(params.get('KEY_FUNCTION')) + + def get_backend_timeout(self, timeout=DEFAULT_TIMEOUT): + """ + Return the timeout value usable by this backend based upon the provided + timeout. + """ + if timeout == DEFAULT_TIMEOUT: + timeout = self.default_timeout + elif timeout == 0: + # ticket 21147 - avoid time.time() related precision issues + timeout = -1 + return None if timeout is None else time.time() + timeout + + def make_key(self, key, version=None): + """ + Construct the key used by all other methods. By default, use the + key_func to generate a key (which, by default, prepends the + `key_prefix' and 'version'). A different key function can be provided + at the time of cache construction; alternatively, you can subclass the + cache backend to provide custom key making behavior. + """ + if version is None: + version = self.version + + new_key = self.key_func(key, self.key_prefix, version) + return new_key + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + """ + Set a value in the cache if the key does not already exist. If + timeout is given, use that timeout for the key; otherwise use the + default cache timeout. + + Return True if the value was stored, False otherwise. + """ + raise NotImplementedError('subclasses of BaseCache must provide an add() method') + + def get(self, key, default=None, version=None): + """ + Fetch a given key from the cache. If the key does not exist, return + default, which itself defaults to None. + """ + raise NotImplementedError('subclasses of BaseCache must provide a get() method') + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + """ + Set a value in the cache. If timeout is given, use that timeout for the + key; otherwise use the default cache timeout. + """ + raise NotImplementedError('subclasses of BaseCache must provide a set() method') + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + """ + Update the key's expiry time using timeout. Return True if successful + or False if the key does not exist. + """ + raise NotImplementedError('subclasses of BaseCache must provide a touch() method') + + def delete(self, key, version=None): + """ + Delete a key from the cache, failing silently. + """ + raise NotImplementedError('subclasses of BaseCache must provide a delete() method') + + def get_many(self, keys, version=None): + """ + Fetch a bunch of keys from the cache. For certain backends (memcached, + pgsql) this can be *much* faster when fetching multiple values. + + Return a dict mapping each key in keys to its value. If the given + key is missing, it will be missing from the response dict. + """ + d = {} + for k in keys: + val = self.get(k, version=version) + if val is not None: + d[k] = val + return d + + def get_or_set(self, key, default, timeout=DEFAULT_TIMEOUT, version=None): + """ + Fetch a given key from the cache. If the key does not exist, + add the key and set it to the default value. The default value can + also be any callable. If timeout is given, use that timeout for the + key; otherwise use the default cache timeout. + + Return the value of the key stored or retrieved. + """ + val = self.get(key, version=version) + if val is None: + if callable(default): + default = default() + if default is not None: + self.add(key, default, timeout=timeout, version=version) + # Fetch the value again to avoid a race condition if another + # caller added a value between the first get() and the add() + # above. + return self.get(key, default, version=version) + return val + + def has_key(self, key, version=None): + """ + Return True if the key is in the cache and has not expired. + """ + return self.get(key, version=version) is not None + + def incr(self, key, delta=1, version=None): + """ + Add delta to value in the cache. If the key does not exist, raise a + ValueError exception. + """ + value = self.get(key, version=version) + if value is None: + raise ValueError("Key '%s' not found" % key) + new_value = value + delta + self.set(key, new_value, version=version) + return new_value + + def decr(self, key, delta=1, version=None): + """ + Subtract delta from value in the cache. If the key does not exist, raise + a ValueError exception. + """ + return self.incr(key, -delta, version=version) + + def __contains__(self, key): + """ + Return True if the key is in the cache and has not expired. + """ + # This is a separate method, rather than just a copy of has_key(), + # so that it always has the same functionality as has_key(), even + # if a subclass overrides it. + return self.has_key(key) + + def set_many(self, data, timeout=DEFAULT_TIMEOUT, version=None): + """ + Set a bunch of values in the cache at once from a dict of key/value + pairs. For certain backends (memcached), this is much more efficient + than calling set() multiple times. + + If timeout is given, use that timeout for the key; otherwise use the + default cache timeout. + + On backends that support it, return a list of keys that failed + insertion, or an empty list if all keys were inserted successfully. + """ + for key, value in data.items(): + self.set(key, value, timeout=timeout, version=version) + return [] + + def delete_many(self, keys, version=None): + """ + Delete a bunch of values in the cache at once. For certain backends + (memcached), this is much more efficient than calling delete() multiple + times. + """ + for key in keys: + self.delete(key, version=version) + + def clear(self): + """Remove *all* values from the cache at once.""" + raise NotImplementedError('subclasses of BaseCache must provide a clear() method') + + def validate_key(self, key): + """ + Warn about keys that would not be portable to the memcached + backend. This encourages (but does not force) writing backend-portable + cache code. + """ + if len(key) > MEMCACHE_MAX_KEY_LENGTH: + warnings.warn( + 'Cache key will cause errors if used with memcached: %r ' + '(longer than %s)' % (key, MEMCACHE_MAX_KEY_LENGTH), CacheKeyWarning + ) + for char in key: + if ord(char) < 33 or ord(char) == 127: + warnings.warn( + 'Cache key contains characters that will cause errors if ' + 'used with memcached: %r' % key, CacheKeyWarning + ) + break + + def incr_version(self, key, delta=1, version=None): + """ + Add delta to the cache version for the supplied key. Return the new + version. + """ + if version is None: + version = self.version + + value = self.get(key, version=version) + if value is None: + raise ValueError("Key '%s' not found" % key) + + self.set(key, value, version=version + delta) + self.delete(key, version=version) + return version + delta + + def decr_version(self, key, delta=1, version=None): + """ + Subtract delta from the cache version for the supplied key. Return the + new version. + """ + return self.incr_version(key, -delta, version) + + def close(self, **kwargs): + """Close the cache connection""" + pass diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/db.py b/env/lib/python3.5/site-packages/django/core/cache/backends/db.py new file mode 100644 index 0000000..d782f21 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/backends/db.py @@ -0,0 +1,262 @@ +"Database cache backend." +import base64 +import pickle +from datetime import datetime + +from django.conf import settings +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.db import DatabaseError, connections, models, router, transaction +from django.utils import timezone +from django.utils.inspect import func_supports_parameter + + +class Options: + """A class that will quack like a Django model _meta class. + + This allows cache operations to be controlled by the router + """ + def __init__(self, table): + self.db_table = table + self.app_label = 'django_cache' + self.model_name = 'cacheentry' + self.verbose_name = 'cache entry' + self.verbose_name_plural = 'cache entries' + self.object_name = 'CacheEntry' + self.abstract = False + self.managed = True + self.proxy = False + self.swapped = False + + +class BaseDatabaseCache(BaseCache): + def __init__(self, table, params): + super().__init__(params) + self._table = table + + class CacheEntry: + _meta = Options(table) + self.cache_model_class = CacheEntry + + +class DatabaseCache(BaseDatabaseCache): + + # This class uses cursors provided by the database connection. This means + # it reads expiration values as aware or naive datetimes, depending on the + # value of USE_TZ and whether the database supports time zones. The ORM's + # conversion and adaptation infrastructure is then used to avoid comparing + # aware and naive datetimes accidentally. + + def get(self, key, default=None, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + db = router.db_for_read(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + table = quote_name(self._table) + + with connection.cursor() as cursor: + cursor.execute( + 'SELECT %s, %s, %s FROM %s WHERE %s = %%s' % ( + quote_name('cache_key'), + quote_name('value'), + quote_name('expires'), + table, + quote_name('cache_key'), + ), + [key] + ) + row = cursor.fetchone() + if row is None: + return default + + expires = row[2] + expression = models.Expression(output_field=models.DateTimeField()) + for converter in (connection.ops.get_db_converters(expression) + + expression.get_db_converters(connection)): + if func_supports_parameter(converter, 'context'): # RemovedInDjango30Warning + expires = converter(expires, expression, connection, {}) + else: + expires = converter(expires, expression, connection) + + if expires < timezone.now(): + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + with connection.cursor() as cursor: + cursor.execute( + 'DELETE FROM %s WHERE %s = %%s' % ( + table, + quote_name('cache_key'), + ), + [key] + ) + return default + + value = connection.ops.process_clob(row[1]) + return pickle.loads(base64.b64decode(value.encode())) + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + self._base_set('set', key, value, timeout) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + return self._base_set('add', key, value, timeout) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + return self._base_set('touch', key, None, timeout) + + def _base_set(self, mode, key, value, timeout=DEFAULT_TIMEOUT): + timeout = self.get_backend_timeout(timeout) + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + table = quote_name(self._table) + + with connection.cursor() as cursor: + cursor.execute("SELECT COUNT(*) FROM %s" % table) + num = cursor.fetchone()[0] + now = timezone.now() + now = now.replace(microsecond=0) + if timeout is None: + exp = datetime.max + elif settings.USE_TZ: + exp = datetime.utcfromtimestamp(timeout) + else: + exp = datetime.fromtimestamp(timeout) + exp = exp.replace(microsecond=0) + if num > self._max_entries: + self._cull(db, cursor, now) + pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL) + # The DB column is expecting a string, so make sure the value is a + # string, not bytes. Refs #19274. + b64encoded = base64.b64encode(pickled).decode('latin1') + try: + # Note: typecasting for datetimes is needed by some 3rd party + # database backends. All core backends work without typecasting, + # so be careful about changes here - test suite will NOT pick + # regressions. + with transaction.atomic(using=db): + cursor.execute( + 'SELECT %s, %s FROM %s WHERE %s = %%s' % ( + quote_name('cache_key'), + quote_name('expires'), + table, + quote_name('cache_key'), + ), + [key] + ) + result = cursor.fetchone() + + if result: + current_expires = result[1] + expression = models.Expression(output_field=models.DateTimeField()) + for converter in (connection.ops.get_db_converters(expression) + + expression.get_db_converters(connection)): + if func_supports_parameter(converter, 'context'): # RemovedInDjango30Warning + current_expires = converter(current_expires, expression, connection, {}) + else: + current_expires = converter(current_expires, expression, connection) + + exp = connection.ops.adapt_datetimefield_value(exp) + if result and mode == 'touch': + cursor.execute( + 'UPDATE %s SET %s = %%s WHERE %s = %%s' % ( + table, + quote_name('expires'), + quote_name('cache_key') + ), + [exp, key] + ) + elif result and (mode == 'set' or (mode == 'add' and current_expires < now)): + cursor.execute( + 'UPDATE %s SET %s = %%s, %s = %%s WHERE %s = %%s' % ( + table, + quote_name('value'), + quote_name('expires'), + quote_name('cache_key'), + ), + [b64encoded, exp, key] + ) + elif mode != 'touch': + cursor.execute( + 'INSERT INTO %s (%s, %s, %s) VALUES (%%s, %%s, %%s)' % ( + table, + quote_name('cache_key'), + quote_name('value'), + quote_name('expires'), + ), + [key, b64encoded, exp] + ) + else: + return False # touch failed. + except DatabaseError: + # To be threadsafe, updates/inserts are allowed to fail silently + return False + else: + return True + + def delete(self, key, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + table = connection.ops.quote_name(self._table) + + with connection.cursor() as cursor: + cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % table, [key]) + + def has_key(self, key, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + + db = router.db_for_read(self.cache_model_class) + connection = connections[db] + quote_name = connection.ops.quote_name + + if settings.USE_TZ: + now = datetime.utcnow() + else: + now = datetime.now() + now = now.replace(microsecond=0) + + with connection.cursor() as cursor: + cursor.execute( + 'SELECT %s FROM %s WHERE %s = %%s and expires > %%s' % ( + quote_name('cache_key'), + quote_name(self._table), + quote_name('cache_key'), + ), + [key, connection.ops.adapt_datetimefield_value(now)] + ) + return cursor.fetchone() is not None + + def _cull(self, db, cursor, now): + if self._cull_frequency == 0: + self.clear() + else: + connection = connections[db] + table = connection.ops.quote_name(self._table) + cursor.execute("DELETE FROM %s WHERE expires < %%s" % table, + [connection.ops.adapt_datetimefield_value(now)]) + cursor.execute("SELECT COUNT(*) FROM %s" % table) + num = cursor.fetchone()[0] + if num > self._max_entries: + cull_num = num // self._cull_frequency + cursor.execute( + connection.ops.cache_key_culling_sql() % table, + [cull_num]) + cursor.execute("DELETE FROM %s " + "WHERE cache_key < %%s" % table, + [cursor.fetchone()[0]]) + + def clear(self): + db = router.db_for_write(self.cache_model_class) + connection = connections[db] + table = connection.ops.quote_name(self._table) + with connection.cursor() as cursor: + cursor.execute('DELETE FROM %s' % table) diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/dummy.py b/env/lib/python3.5/site-packages/django/core/cache/backends/dummy.py new file mode 100644 index 0000000..942b72e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/backends/dummy.py @@ -0,0 +1,38 @@ +"Dummy cache backend" + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache + + +class DummyCache(BaseCache): + def __init__(self, host, *args, **kwargs): + super().__init__(*args, **kwargs) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + return True + + def get(self, key, default=None, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + return default + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + self.validate_key(key) + return False + + def delete(self, key, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + + def has_key(self, key, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + return False + + def clear(self): + pass diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/filebased.py b/env/lib/python3.5/site-packages/django/core/cache/backends/filebased.py new file mode 100644 index 0000000..287d647 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/backends/filebased.py @@ -0,0 +1,164 @@ +"File-based cache backend" +import glob +import hashlib +import os +import pickle +import random +import tempfile +import time +import zlib + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.core.files import locks +from django.core.files.move import file_move_safe + + +def _write_content(f, expiry, value): + f.write(pickle.dumps(expiry, pickle.HIGHEST_PROTOCOL)) + f.write(zlib.compress(pickle.dumps(value, pickle.HIGHEST_PROTOCOL))) + + +class FileBasedCache(BaseCache): + cache_suffix = '.djcache' + + def __init__(self, dir, params): + super().__init__(params) + self._dir = os.path.abspath(dir) + self._createdir() + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + if self.has_key(key, version): + return False + self.set(key, value, timeout, version) + return True + + def get(self, key, default=None, version=None): + fname = self._key_to_file(key, version) + try: + with open(fname, 'rb') as f: + if not self._is_expired(f): + return pickle.loads(zlib.decompress(f.read())) + except FileNotFoundError: + pass + return default + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + self._createdir() # Cache dir can be deleted at any time. + fname = self._key_to_file(key, version) + self._cull() # make some room if necessary + fd, tmp_path = tempfile.mkstemp(dir=self._dir) + renamed = False + try: + with open(fd, 'wb') as f: + expiry = self.get_backend_timeout(timeout) + _write_content(f, expiry, value) + file_move_safe(tmp_path, fname, allow_overwrite=True) + renamed = True + finally: + if not renamed: + os.remove(tmp_path) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + try: + with open(self._key_to_file(key, version), 'r+b') as f: + try: + locks.lock(f, locks.LOCK_EX) + if self._is_expired(f): + return False + else: + previous_value = pickle.loads(zlib.decompress(f.read())) + f.seek(0) + _write_content(f, self.get_backend_timeout(timeout), previous_value) + return True + finally: + locks.unlock(f) + except FileNotFoundError: + return False + + def delete(self, key, version=None): + self._delete(self._key_to_file(key, version)) + + def _delete(self, fname): + if not fname.startswith(self._dir) or not os.path.exists(fname): + return + try: + os.remove(fname) + except FileNotFoundError: + # The file may have been removed by another process. + pass + + def has_key(self, key, version=None): + fname = self._key_to_file(key, version) + if os.path.exists(fname): + with open(fname, 'rb') as f: + return not self._is_expired(f) + return False + + def _cull(self): + """ + Remove random cache entries if max_entries is reached at a ratio + of num_entries / cull_frequency. A value of 0 for CULL_FREQUENCY means + that the entire cache will be purged. + """ + filelist = self._list_cache_files() + num_entries = len(filelist) + if num_entries < self._max_entries: + return # return early if no culling is required + if self._cull_frequency == 0: + return self.clear() # Clear the cache when CULL_FREQUENCY = 0 + # Delete a random selection of entries + filelist = random.sample(filelist, + int(num_entries / self._cull_frequency)) + for fname in filelist: + self._delete(fname) + + def _createdir(self): + if not os.path.exists(self._dir): + try: + os.makedirs(self._dir, 0o700) + except FileExistsError: + pass + + def _key_to_file(self, key, version=None): + """ + Convert a key into a cache file path. Basically this is the + root cache path joined with the md5sum of the key and a suffix. + """ + key = self.make_key(key, version=version) + self.validate_key(key) + return os.path.join(self._dir, ''.join( + [hashlib.md5(key.encode()).hexdigest(), self.cache_suffix])) + + def clear(self): + """ + Remove all the cache files. + """ + if not os.path.exists(self._dir): + return + for fname in self._list_cache_files(): + self._delete(fname) + + def _is_expired(self, f): + """ + Take an open cache file `f` and delete it if it's expired. + """ + try: + exp = pickle.load(f) + except EOFError: + exp = 0 # An empty file is considered expired. + if exp is not None and exp < time.time(): + f.close() # On Windows a file has to be closed before deleting + self._delete(f.name) + return True + return False + + def _list_cache_files(self): + """ + Get a list of paths to all the cache files. These are all the files + in the root cache dir that end on the cache_suffix. + """ + if not os.path.exists(self._dir): + return [] + filelist = [os.path.join(self._dir, fname) for fname + in glob.glob1(self._dir, '*%s' % self.cache_suffix)] + return filelist diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/locmem.py b/env/lib/python3.5/site-packages/django/core/cache/backends/locmem.py new file mode 100644 index 0000000..093144f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/backends/locmem.py @@ -0,0 +1,120 @@ +"Thread-safe in-memory cache backend." +import pickle +import time +from collections import OrderedDict +from threading import Lock + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache + +# Global in-memory store of cache data. Keyed by name, to provide +# multiple named local memory caches. +_caches = {} +_expire_info = {} +_locks = {} + + +class LocMemCache(BaseCache): + def __init__(self, name, params): + super().__init__(params) + self._cache = _caches.setdefault(name, OrderedDict()) + self._expire_info = _expire_info.setdefault(name, {}) + self._lock = _locks.setdefault(name, Lock()) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL) + with self._lock: + if self._has_expired(key): + self._set(key, pickled, timeout) + return True + return False + + def get(self, key, default=None, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + with self._lock: + if self._has_expired(key): + self._delete(key) + return default + pickled = self._cache[key] + self._cache.move_to_end(key, last=False) + return pickle.loads(pickled) + + def _set(self, key, value, timeout=DEFAULT_TIMEOUT): + if len(self._cache) >= self._max_entries: + self._cull() + self._cache[key] = value + self._cache.move_to_end(key, last=False) + self._expire_info[key] = self.get_backend_timeout(timeout) + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL) + with self._lock: + self._set(key, pickled, timeout) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + with self._lock: + if self._has_expired(key): + return False + self._expire_info[key] = self.get_backend_timeout(timeout) + return True + + def incr(self, key, delta=1, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + with self._lock: + if self._has_expired(key): + self._delete(key) + raise ValueError("Key '%s' not found" % key) + pickled = self._cache[key] + value = pickle.loads(pickled) + new_value = value + delta + pickled = pickle.dumps(new_value, pickle.HIGHEST_PROTOCOL) + self._cache[key] = pickled + self._cache.move_to_end(key, last=False) + return new_value + + def has_key(self, key, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + with self._lock: + if self._has_expired(key): + self._delete(key) + return False + return True + + def _has_expired(self, key): + exp = self._expire_info.get(key, -1) + return exp is not None and exp <= time.time() + + def _cull(self): + if self._cull_frequency == 0: + self._cache.clear() + self._expire_info.clear() + else: + count = len(self._cache) // self._cull_frequency + for i in range(count): + key, _ = self._cache.popitem() + del self._expire_info[key] + + def _delete(self, key): + try: + del self._cache[key] + del self._expire_info[key] + except KeyError: + pass + + def delete(self, key, version=None): + key = self.make_key(key, version=version) + self.validate_key(key) + with self._lock: + self._delete(key) + + def clear(self): + with self._lock: + self._cache.clear() + self._expire_info.clear() diff --git a/env/lib/python3.5/site-packages/django/core/cache/backends/memcached.py b/env/lib/python3.5/site-packages/django/core/cache/backends/memcached.py new file mode 100644 index 0000000..1c8066b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/backends/memcached.py @@ -0,0 +1,189 @@ +"Memcached cache backend" + +import pickle +import re +import time + +from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache +from django.utils.functional import cached_property + + +class BaseMemcachedCache(BaseCache): + def __init__(self, server, params, library, value_not_found_exception): + super().__init__(params) + if isinstance(server, str): + self._servers = re.split('[;,]', server) + else: + self._servers = server + + # The exception type to catch from the underlying library for a key + # that was not found. This is a ValueError for python-memcache, + # pylibmc.NotFound for pylibmc, and cmemcache will return None without + # raising an exception. + self.LibraryValueNotFoundException = value_not_found_exception + + self._lib = library + self._options = params.get('OPTIONS') or {} + + @property + def _cache(self): + """ + Implement transparent thread-safe access to a memcached client. + """ + if getattr(self, '_client', None) is None: + self._client = self._lib.Client(self._servers, **self._options) + + return self._client + + def get_backend_timeout(self, timeout=DEFAULT_TIMEOUT): + """ + Memcached deals with long (> 30 days) timeouts in a special + way. Call this function to obtain a safe value for your timeout. + """ + if timeout == DEFAULT_TIMEOUT: + timeout = self.default_timeout + + if timeout is None: + # Using 0 in memcache sets a non-expiring timeout. + return 0 + elif int(timeout) == 0: + # Other cache backends treat 0 as set-and-expire. To achieve this + # in memcache backends, a negative timeout must be passed. + timeout = -1 + + if timeout > 2592000: # 60*60*24*30, 30 days + # See https://github.com/memcached/memcached/wiki/Programming#expiration + # "Expiration times can be set from 0, meaning "never expire", to + # 30 days. Any time higher than 30 days is interpreted as a Unix + # timestamp date. If you want to expire an object on January 1st of + # next year, this is how you do that." + # + # This means that we have to switch to absolute timestamps. + timeout += int(time.time()) + return int(timeout) + + def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + return self._cache.add(key, value, self.get_backend_timeout(timeout)) + + def get(self, key, default=None, version=None): + key = self.make_key(key, version=version) + val = self._cache.get(key) + if val is None: + return default + return val + + def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + if not self._cache.set(key, value, self.get_backend_timeout(timeout)): + # make sure the key doesn't keep its old value in case of failure to set (memcached's 1MB limit) + self._cache.delete(key) + + def delete(self, key, version=None): + key = self.make_key(key, version=version) + self._cache.delete(key) + + def get_many(self, keys, version=None): + new_keys = [self.make_key(x, version=version) for x in keys] + ret = self._cache.get_multi(new_keys) + if ret: + m = dict(zip(new_keys, keys)) + return {m[k]: v for k, v in ret.items()} + return ret + + def close(self, **kwargs): + # Many clients don't clean up connections properly. + self._cache.disconnect_all() + + def incr(self, key, delta=1, version=None): + key = self.make_key(key, version=version) + # memcached doesn't support a negative delta + if delta < 0: + return self._cache.decr(key, -delta) + try: + val = self._cache.incr(key, delta) + + # python-memcache responds to incr on nonexistent keys by + # raising a ValueError, pylibmc by raising a pylibmc.NotFound + # and Cmemcache returns None. In all cases, + # we should raise a ValueError though. + except self.LibraryValueNotFoundException: + val = None + if val is None: + raise ValueError("Key '%s' not found" % key) + return val + + def decr(self, key, delta=1, version=None): + key = self.make_key(key, version=version) + # memcached doesn't support a negative delta + if delta < 0: + return self._cache.incr(key, -delta) + try: + val = self._cache.decr(key, delta) + + # python-memcache responds to incr on nonexistent keys by + # raising a ValueError, pylibmc by raising a pylibmc.NotFound + # and Cmemcache returns None. In all cases, + # we should raise a ValueError though. + except self.LibraryValueNotFoundException: + val = None + if val is None: + raise ValueError("Key '%s' not found" % key) + return val + + def set_many(self, data, timeout=DEFAULT_TIMEOUT, version=None): + safe_data = {} + original_keys = {} + for key, value in data.items(): + safe_key = self.make_key(key, version=version) + safe_data[safe_key] = value + original_keys[safe_key] = key + failed_keys = self._cache.set_multi(safe_data, self.get_backend_timeout(timeout)) + return [original_keys[k] for k in failed_keys] + + def delete_many(self, keys, version=None): + self._cache.delete_multi(self.make_key(key, version=version) for key in keys) + + def clear(self): + self._cache.flush_all() + + +class MemcachedCache(BaseMemcachedCache): + "An implementation of a cache binding using python-memcached" + def __init__(self, server, params): + import memcache + super().__init__(server, params, library=memcache, value_not_found_exception=ValueError) + + @property + def _cache(self): + if getattr(self, '_client', None) is None: + client_kwargs = {'pickleProtocol': pickle.HIGHEST_PROTOCOL} + client_kwargs.update(self._options) + self._client = self._lib.Client(self._servers, **client_kwargs) + return self._client + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + return self._cache.touch(key, self.get_backend_timeout(timeout)) != 0 + + +class PyLibMCCache(BaseMemcachedCache): + "An implementation of a cache binding using pylibmc" + def __init__(self, server, params): + import pylibmc + super().__init__(server, params, library=pylibmc, value_not_found_exception=pylibmc.NotFound) + + @cached_property + def _cache(self): + return self._lib.Client(self._servers, **self._options) + + def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None): + key = self.make_key(key, version=version) + if timeout == 0: + return self._cache.delete(key) + return self._cache.touch(key, self.get_backend_timeout(timeout)) + + def close(self, **kwargs): + # libmemcached manages its own connections. Don't call disconnect_all() + # as it resets the failover state and creates unnecessary reconnects. + pass diff --git a/env/lib/python3.5/site-packages/django/core/cache/utils.py b/env/lib/python3.5/site-packages/django/core/cache/utils.py new file mode 100644 index 0000000..45727fa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/cache/utils.py @@ -0,0 +1,12 @@ +import hashlib +from urllib.parse import quote + +TEMPLATE_FRAGMENT_KEY_TEMPLATE = 'template.cache.%s.%s' + + +def make_template_fragment_key(fragment_name, vary_on=None): + if vary_on is None: + vary_on = () + key = ':'.join(quote(str(var)) for var in vary_on) + args = hashlib.md5(key.encode()) + return TEMPLATE_FRAGMENT_KEY_TEMPLATE % (fragment_name, args.hexdigest()) diff --git a/env/lib/python3.5/site-packages/django/core/checks/__init__.py b/env/lib/python3.5/site-packages/django/core/checks/__init__.py new file mode 100644 index 0000000..8ef3f5d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/__init__.py @@ -0,0 +1,23 @@ +from .messages import ( + CRITICAL, DEBUG, ERROR, INFO, WARNING, CheckMessage, Critical, Debug, + Error, Info, Warning, +) +from .registry import Tags, register, run_checks, tag_exists + +# Import these to force registration of checks +import django.core.checks.caches # NOQA isort:skip +import django.core.checks.database # NOQA isort:skip +import django.core.checks.model_checks # NOQA isort:skip +import django.core.checks.security.base # NOQA isort:skip +import django.core.checks.security.csrf # NOQA isort:skip +import django.core.checks.security.sessions # NOQA isort:skip +import django.core.checks.templates # NOQA isort:skip +import django.core.checks.urls # NOQA isort:skip + + +__all__ = [ + 'CheckMessage', + 'Debug', 'Info', 'Warning', 'Error', 'Critical', + 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL', + 'register', 'run_checks', 'tag_exists', 'Tags', +] diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38fc5e51e70c190faa6d24b41bbb88e74e5f2615 GIT binary patch literal 1007 zcmaJ6{H^|^V*ymZ77~D4AQpH9 zqykcc0Icb2^<~OqD&Je7I2cFDKK< zcygv%qi-y{`N*UUBBqN(oX261=pr^-M7l_bOz5KYD$_-QNaHl>+seKSBB@-#qFClk zC{HX>KQvNOd3g}|?7I%gTRjUVqOMUi3^Wb240r}y1Nu}U90N52wt{T z5IIS-8;7F9(IhgBhU|SLFFa8dCccXQ?Dl)@0?3 z&yyh6yV+e6U5G@gy6*=`;`=`!wvF!we!U*%d_J7V^P|}!PUum3?Z2SMH~Da-a{n`~ q4OgxWeLqg)-1i6brE*_s4;Be~V{WJ1*KlqhR$JCT%dT2oy?z5QKlxAq literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/caches.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/caches.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d01fa6f6ed23418cfddc730dadfe7385646f4ba GIT binary patch literal 652 zcmYjNO>fgc5Pj>fB1BYzKvcb?9I%iqp@BM2A5!Fo(7_y~NAAJB0$ z0iR$Mc(){rfb}CK+BUB;Me)P8%Xf=Ur|0p>;^h4@UYvedtZvCT0<*W5Qr5D!&XY{_ zBPp_6wL;!J|6F%|*{Rm&;v%nvpZNPv)xMu5>80@V%D=8V=?{D>eDfkt3wfhA4qk@{8SY(;uY69z`)B~25j zb#;-GVQ2F#k(v4h=~3^WVH>SOA*o>=|+V+ zx6O6`WT?b6Z_*WQJbZ|AwbSaP;P*&FIRr57GndIJMQ4E*d0YCqcC|JA;D1Gm`M@+x x)I-|zMrsb}Y8Vsr&ep`hHw#)qvI!eoe*rREmkR&@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/database.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/database.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5637c7dfe50020d08360585f32aa76a0172a50b5 GIT binary patch literal 514 zcmYjNO-~y!5PkM~Hz6ferATn9IPW1@i5m#29@=X-fP}Q7ik!8T?q)xNy#XqPQ+n+W z>0k1d6Mumd`wwk&QJmsL(0GuhYC<~ zQ~}Zel|U-Mw15s!gxE4D0Ttpee4a*75iaB2Gf^RC?o-y(wa(hSsqHg0M$DbKk_+ql zMlW*PYLod=Z{q!2P_(B63*eFCVT=|i7`DKVUq^Thu;C~;Hl%=DV8igQYtL>+xTeR; zm`&r*aN=-*EK3*ZhgR1r9o)$>SJKOIVfI^R%UC!e4e5!N_dcdkZtYrIC%p3iF#AOE za-Ou+Dp}>L@qC?^YFrny6Lq|76IIB1(dLZnnFc&1JSE zIX3c>_6fivHez3y`AqpV?xlNg#1l1tn*zpf$AkoFf5+2RcLG1akV;(ttZLM{)ZhHd Kt^fLk9|W(43w443 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/messages.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/messages.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc28b6ed10b334016f1446eb77402345b9ca0f1d GIT binary patch literal 3758 zcmb_eOK%fb6h8CvE6#%eDJrP4N<*0z9GX5PXb4Gz3vR(kNm^8^)yVOTopHwF< zt*~hjbk$9NLRa1O_sq5{{sOCh=Z?pQ04hqD@jds)3Q7^^|Cskped?KOAqdQvvpUagtI$^39{psk_FJ0KC!zDAM8Aj-28DWwiH z`b}f`K9OV4zOERP_Q6A9(LQ)E8QKRA2I>%w)oX+Eo7-Ngw|R!q+v>!+ z@7kHzlwQyhjJ=p(Qe-m8WD4YO5;N$YU0;a0y9>Mi?&Yn%AGnvpj&s#r+=&+4P9tph z(yrMP-a?bnk_+7gFInFGHO@JXANrBw@DY-aAnmM{AHIXr&jVae=Qeeohll$t8iOrY zK>+mc_-WKpSoc;K>nB7{G-@T0pwnZ7vx@K}y5ah^MK|FM{5I@dt*K!net36|s!!46 zWe_;wr}Oj>o>XVRb?|3$WWw+0^u4x+&Dl>{&DP><+lv}eBy2s_%U5D^$XmT=+Y@3M zn<^N^32@KyOKmUoe%Tevb9^M9pV0;v4q@Q!IZk;g=rtRGTrQ86yw+2;AsC}L?>Nn% zA*JKQMk5GpJvp9_QaV7Oc%>BU6K5QU4?787s@T?NwbR<*5#{!8zImdadKX66Of|1KO-dRuOvIQ`38H0si!Xy|cKqVNff&`zmGK?51QhAB7Q03(M zytq_CMNvH$6~&;gsNQ$cE!$af1_yEahmEf1IIoXh?YS&brmN7zLgDSgY#ZB16NEHF zd#PR|b6%(yoK?zFE@g?Ch`1eVn6XNcG&fZ7JA^lis)Hix_xh?Ps4OLI@XiYmkLQd~ z=5t49m+iT_QIC9fN>Q%^|_7eol0%3 za?{!PVPms$*IBz=S^E~gN#Iix4_Pw7TKa*9>%qN(jfODJXoE8^88e(_7sPqYj0=u~ z+~^1JTwHXVy?!GY`jI10a4d@VnS8*rt;+iPy>&6qf)AOD6;T{}RB(aGqp3@vsGrUi zv&HG6Ic=zsCPqe&G2|p4;o(9~ulgrMt@NsY47tIzA3(;|O>e8;9{GYd;F#f3Cs|n( z@dFj^xGvxU+{J&ORG~P8*t(8W8z||zl(1H74Z?2dBZTNq&9HcCQd@w_iByrJLBrLgnr;VZ z_`7CL2>!DxK4HTDeU;M$S20zJRozk9rb0{MsaB55*0=!1xuxWySmpvKPl05#;cJ|{ IG-oC6e?19_f&c&j literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/model_checks.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/model_checks.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad179ac7e3b8a84dfd4b51689c2264cc764b50c6 GIT binary patch literal 5815 zcmai2&2t<_74P}j*)PemWlOdk2Mv`H(gb_uI23{4n26Y+QX~dSE&@wj>(S2a?ntvU zhEX*{2L+`qCI^#MBCtgQ^ckiTB2Y&W^5DuNpIwCBXh$#oGl zCX?rB^0wFfFBlc~J)@{}2Y!^`#rCsIc~()mCuJ%N`+?tAMNNkNNadmI8nghP3Z5FC zpW#veMAH}InJErg*1ejL-xj$LyI>9dmPoFN+!VVO^Jt2%1ValisitjA6gU74HFBD$9H)}qnveUh(8LV zL<3)f*0xu@-<=3zf_HipJ#V1_V-GKgXNJJKU91!0SH@#7F0jrZRWuxvpm2!t+K1c&MQf_x7Wtimgftx-FrHq0gOx&FVcTKhmE8W>G%qSQ) zwUn)UH*ekan$iLXvPuo{Qq1>cI_yM1g})PrMKwxP7IyP?EmC?P0u>}H9H=Ku0%_B# zTBnov!?4pSobYLmZm&`_XZllxv$yX{V9o(ssl>NtqNwmUYgac7B6t3zI!OEK8X93b z#+D;V#R6!al1J9tPwbs4|_a$n%^8J$2uc7=KXge!z_ zQ>gC{+PBF7Cx-m8DvYD5=%EWxvBe)i#1=2A1UrBkYYFTxor%c`@zNGY1}|Wf#e$bY z90~4WOGOVX13gEM0MG;2_Z-oMg_P4^#OJ8zCAPdq1{Az4f<+O0i+~?l;$=k~fkK6s zFNt88Cz~R7M2<}tiGd?i9ND6WwUM6Iyps$51%-*fq>Tp9L4fUFxTci=w>-JK8^lc7rECt=WPFrCk7 z@v(_Mh>lbUj3(|AUq;wWKqGK~Ekt9wxx z2g>!6pyWkG{RBqRaz6vm^QdIGunN>_rLYa>!z{{eM!P;3`SUh@hGQ?aSNw?jsW6k?ZGh zJv*Zu{G={40QE(~i003fp-qVxD{NYYT!#Wpt&~n75>*GjB2tp_4OOz9PdsGlSZQc{WjZP1DeOq%I1D_qeU8#4jF$;g z(fmA3_eL3~mvB3EjcuGkq0@~HJ6bpx3){~eOtC;T^kkm#841jqL}0&QoP!=O8sp8g zG)!h}KY-Tl-84!#A@dx$PE!fmGawgr z)^TU3`h~**P2og5nlnSUrm4^COAIN(Jklm3odxrx*H6!Z$kW5;@Nc~6 zbAW5dQLK=fp>|V>4`?(dA>q4E#GZ59`rV^*{^GQ&L7< zJVsrV{8c&s=K>46Ji|HiQSR0zNI(&SbPh!Z`kTkFfDlp>IhQDhHDFL}Su(*1YWakGkCS& zT;z4yi0rs%bjU-DVw4wN{WM(58#I>^l%g4gsw<<6!e6_o`Qp+i|EApD?*9hLluTna+ZG)aAKqZ}kD-4+%iZo8(vd@sRa ze1y40gUy+9^1B)j1PiB778Pm4BDsKBR^V zNiyDI`E+q9HNl+=KFw>EW7zPg3&yfNcX9FD;@r~Z#d-3qbJkL&ZY&w|ru+qFP7j3g zV|w_al6FD1ZxfLzh)76mN2jwHbf4 d+dA&uA?zuNopZSSIuA`o-Nr3_Z zdKZi(jdW9M8uzjf&%P!C@jp z?wmaWm0cA56@f{pE4Y%eT>m9PcY^&&LWxUqN!y#RovIm@etGLqLs_>Bnfg1ccv=QdtSF_ z`hFUWrSBJQ-^b8t!u5{tznBI|)zk3(C<}dG)!+(MXVGBMWYJ>LW`RJH>agfS{EO62 zxX$9ulkI#w*`CCchlkj1^e`Ryzl%OS&bOmckPfriPnapWUG92Y$ziN>b=sSpDhG4$ zvico}j$IeaAEU7lJ~nlihm0YX!iU%aP#i=9E(GopF*VWT7K9RUY|>>JT)ZNbZKH!a zzKCYWyqa)FU5ZxCE8=b=zH3GI8AtBxY6l@hi68#8P@bXaI}kY$aC=VVi)(d2j4+MZ z^X$UbGB0kGzK}{re(9a!RwO4$b~=`6UNr&Bj+V*b%Ij(aOK^bWG|qkhJzkYPNundp zHWy6n&6M^+Hjp27ppCMIqW=W(1HOWOuxJ1ufeaS?jp)K*!_Ni15~O-`?o{=CG^wZb z+T!IUn%(NdR`qM~|+Wcy}`#yHDH& zm*4m1BUx>Crq`PV`~JQ0DGa~2<=zX@EI*Qp-xfzja^Q|nO9b2xCKJ6i--!2UVSZlY zW4G7qxf7|7WyV!@F}n$~1lccl52V@Q0qfluT{)vvS?K*3fm&#|xtE!d*v#8^H75(> zkPCxY{~m&|1g4-uGy?ug%zZ?!1&u69>!xDUgt|s}`rJRKG%_=2S?cB|Z{e zadvkh(DQ)y9w%9dJiOC0F)R&%p9C z=xENpw0^tZ5pAo^hAfeMru;={(g2j%Y_2oW^*x1c{3V<%m>+m(Z^%$Am^< z6YqaTheIQ~>J~4a({oN9UgK-{Nmhr9nn9Axl9Ru_QF|$X1uXG4CZ>J zJK&4&K4Daqc@D^fg#a9!!luJ$LI1GmMV0h;hG37V_;~B;Oig#GNAE#k5jii6$RK*yR64i&S%r5A+Q~A=bS`9U;Xc|Jc)jUSO zg|cS8l2aFJR!7`%Hmt5#!^akFaZ8-t{(s>O*?fNZm&-F0%?lt{6*(=2-!V|f7X?wQ za#Hhy?}NC^C$`yRVWU|+z`*5eK^q;uJOS$T9#77QqZ=k&Db4Q%tjKo*W0HpocmXB@ zPUWTG(twT0YnZ~>q5ST9_9D}GCe4MN!~k8LC2yi{#S7drs%uc`;J4uLP3!Scrt)N> zb`0ow<~p5iFZy@UL)R!Y8|yjBP?v`n-GR!+^S=h_9@=1m$-m~*SYpCM^#2*9x?#1% z*`2qoK6fWam)E=QPL8ng+J(73fo10wJDA%|P8N7Kad!%b6Nfp%6bHkcXgDm4ohI%E zxJ$`}wpp+TjGL}O&8*9~RqsHs zbIl>uu{zG$2k&mK*=se^v*)#o7XJ;)vn(+nv4zvSCH@Cq97kUO literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/templates.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/templates.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3ee8ab22940ea56c483575ad72d7cd78fdd38d6 GIT binary patch literal 1479 zcmaJ>&2Aev5FYNXR;wSoc7GC}DS{1pPzBVI<3oWOhS31lAxP^Owa}uA1dH{OUa!1= zA*nR7rBi!oU!d>MSK_s&yh2W$S;>my0;R|iIh+{|zi+trHa6OO@&1b=2jCyL)o=~p z;ZT2};Mf^t0Ksx@LB=4rAh3XO8@L0R4Y>n>19=022IMXTE->K$Zvc0JH{mzNf+mp0 zt2M1!QFkT{mr+S8yxqU@s!XyEfV#Xp{8$} z#z@Li8fP3O%6L*FsnSAT{rO8d^)I5=!tXsfISG%R{&?Ek_s4Q7{Iu|AB&IHNx~fOpDi1mh$?n_c^Uj_4BFH{+aM2 zf9X*to0NLrzh3xXT`&5BJHhv2LWY`!!^ZIphw7owHM`s*bTxyC1xJWKcKIb}8xn*% z0fgH={vbw!{AqlHVh-@~YgjOtV}QCy(7)Uvo>m$QQsmWwOBa4(udrxr4Cw^k4Pd6Z zLf14`mn35CMCiU{tii5v;<7mZ8{`Ha_wI10^J-Y7)y~;8&G=3+3BTogmwL!2QIV84 ze{m_rFuoA+r5e7+x|+Rf9VDUOtcDudKX8IvEi8C*O}tJR9KEbyVZ+=eVv&v|3pB@W6C(?UXr7~VXsNb9 zLJv_D5@gan)AvMu(IeT2V9Y@6Zh zz)wwAl0nc}*4==pUf%3JswI6zC9xxkCP`Gv2PlHpx*BUX>sYsPqZ*fWad-!L$)}k( Yr01*XZe453`T|SAwOS-u%X#4a3tKf~X#fBK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/__pycache__/urls.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/__pycache__/urls.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02dd372c5663edfae838eb6a1ecf849a83671ce1 GIT binary patch literal 3602 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 aEQycTE2zB1VUwGmQks)$2ePCXh#3I-aVPHp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/database.py b/env/lib/python3.5/site-packages/django/core/checks/database.py new file mode 100644 index 0000000..5778844 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/database.py @@ -0,0 +1,11 @@ +from django.db import connections + +from . import Tags, register + + +@register(Tags.database) +def check_database_backends(*args, **kwargs): + issues = [] + for conn in connections.all(): + issues.extend(conn.validation.check(**kwargs)) + return issues diff --git a/env/lib/python3.5/site-packages/django/core/checks/messages.py b/env/lib/python3.5/site-packages/django/core/checks/messages.py new file mode 100644 index 0000000..aacac63 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/messages.py @@ -0,0 +1,75 @@ +# Levels +DEBUG = 10 +INFO = 20 +WARNING = 30 +ERROR = 40 +CRITICAL = 50 + + +class CheckMessage: + + def __init__(self, level, msg, hint=None, obj=None, id=None): + assert isinstance(level, int), "The first argument should be level." + self.level = level + self.msg = msg + self.hint = hint + self.obj = obj + self.id = id + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + all(getattr(self, attr) == getattr(other, attr) + for attr in ['level', 'msg', 'hint', 'obj', 'id']) + ) + + def __str__(self): + from django.db import models + + if self.obj is None: + obj = "?" + elif isinstance(self.obj, models.base.ModelBase): + # We need to hardcode ModelBase and Field cases because its __str__ + # method doesn't return "applabel.modellabel" and cannot be changed. + obj = self.obj._meta.label + else: + obj = str(self.obj) + id = "(%s) " % self.id if self.id else "" + hint = "\n\tHINT: %s" % self.hint if self.hint else '' + return "%s: %s%s%s" % (obj, id, self.msg, hint) + + def __repr__(self): + return "<%s: level=%r, msg=%r, hint=%r, obj=%r, id=%r>" % \ + (self.__class__.__name__, self.level, self.msg, self.hint, self.obj, self.id) + + def is_serious(self, level=ERROR): + return self.level >= level + + def is_silenced(self): + from django.conf import settings + return self.id in settings.SILENCED_SYSTEM_CHECKS + + +class Debug(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(DEBUG, *args, **kwargs) + + +class Info(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(INFO, *args, **kwargs) + + +class Warning(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(WARNING, *args, **kwargs) + + +class Error(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(ERROR, *args, **kwargs) + + +class Critical(CheckMessage): + def __init__(self, *args, **kwargs): + super().__init__(CRITICAL, *args, **kwargs) diff --git a/env/lib/python3.5/site-packages/django/core/checks/model_checks.py b/env/lib/python3.5/site-packages/django/core/checks/model_checks.py new file mode 100644 index 0000000..2397fe3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/model_checks.py @@ -0,0 +1,154 @@ +import inspect +import types +from itertools import chain + +from django.apps import apps +from django.core.checks import Error, Tags, register + + +@register(Tags.models) +def check_all_models(app_configs=None, **kwargs): + errors = [] + if app_configs is None: + models = apps.get_models() + else: + models = chain.from_iterable(app_config.get_models() for app_config in app_configs) + for model in models: + if not inspect.ismethod(model.check): + errors.append( + Error( + "The '%s.check()' class method is currently overridden by %r." + % (model.__name__, model.check), + obj=model, + id='models.E020' + ) + ) + else: + errors.extend(model.check(**kwargs)) + return errors + + +def _check_lazy_references(apps, ignore=None): + """ + Ensure all lazy (i.e. string) model references have been resolved. + + Lazy references are used in various places throughout Django, primarily in + related fields and model signals. Identify those common cases and provide + more helpful error messages for them. + + The ignore parameter is used by StateApps to exclude swappable models from + this check. + """ + pending_models = set(apps._pending_operations) - (ignore or set()) + + # Short circuit if there aren't any errors. + if not pending_models: + return [] + + from django.db.models import signals + model_signals = { + signal: name for name, signal in vars(signals).items() + if isinstance(signal, signals.ModelSignal) + } + + def extract_operation(obj): + """ + Take a callable found in Apps._pending_operations and identify the + original callable passed to Apps.lazy_model_operation(). If that + callable was a partial, return the inner, non-partial function and + any arguments and keyword arguments that were supplied with it. + + obj is a callback defined locally in Apps.lazy_model_operation() and + annotated there with a `func` attribute so as to imitate a partial. + """ + operation, args, keywords = obj, [], {} + while hasattr(operation, 'func'): + # The or clauses are redundant but work around a bug (#25945) in + # functools.partial in Python <= 3.5.1. + args.extend(getattr(operation, 'args', []) or []) + keywords.update(getattr(operation, 'keywords', {}) or {}) + operation = operation.func + return operation, args, keywords + + def app_model_error(model_key): + try: + apps.get_app_config(model_key[0]) + model_error = "app '%s' doesn't provide model '%s'" % model_key + except LookupError: + model_error = "app '%s' isn't installed" % model_key[0] + return model_error + + # Here are several functions which return CheckMessage instances for the + # most common usages of lazy operations throughout Django. These functions + # take the model that was being waited on as an (app_label, modelname) + # pair, the original lazy function, and its positional and keyword args as + # determined by extract_operation(). + + def field_error(model_key, func, args, keywords): + error_msg = ( + "The field %(field)s was declared with a lazy reference " + "to '%(model)s', but %(model_error)s." + ) + params = { + 'model': '.'.join(model_key), + 'field': keywords['field'], + 'model_error': app_model_error(model_key), + } + return Error(error_msg % params, obj=keywords['field'], id='fields.E307') + + def signal_connect_error(model_key, func, args, keywords): + error_msg = ( + "%(receiver)s was connected to the '%(signal)s' signal with a " + "lazy reference to the sender '%(model)s', but %(model_error)s." + ) + receiver = args[0] + # The receiver is either a function or an instance of class + # defining a `__call__` method. + if isinstance(receiver, types.FunctionType): + description = "The function '%s'" % receiver.__name__ + elif isinstance(receiver, types.MethodType): + description = "Bound method '%s.%s'" % (receiver.__self__.__class__.__name__, receiver.__name__) + else: + description = "An instance of class '%s'" % receiver.__class__.__name__ + signal_name = model_signals.get(func.__self__, 'unknown') + params = { + 'model': '.'.join(model_key), + 'receiver': description, + 'signal': signal_name, + 'model_error': app_model_error(model_key), + } + return Error(error_msg % params, obj=receiver.__module__, id='signals.E001') + + def default_error(model_key, func, args, keywords): + error_msg = "%(op)s contains a lazy reference to %(model)s, but %(model_error)s." + params = { + 'op': func, + 'model': '.'.join(model_key), + 'model_error': app_model_error(model_key), + } + return Error(error_msg % params, obj=func, id='models.E022') + + # Maps common uses of lazy operations to corresponding error functions + # defined above. If a key maps to None, no error will be produced. + # default_error() will be used for usages that don't appear in this dict. + known_lazy = { + ('django.db.models.fields.related', 'resolve_related_class'): field_error, + ('django.db.models.fields.related', 'set_managed'): None, + ('django.dispatch.dispatcher', 'connect'): signal_connect_error, + } + + def build_error(model_key, func, args, keywords): + key = (func.__module__, func.__name__) + error_fn = known_lazy.get(key, default_error) + return error_fn(model_key, func, args, keywords) if error_fn else None + + return sorted(filter(None, ( + build_error(model_key, *extract_operation(func)) + for model_key in pending_models + for func in apps._pending_operations[model_key] + )), key=lambda error: error.msg) + + +@register(Tags.models) +def check_lazy_references(app_configs=None, **kwargs): + return _check_lazy_references(apps) diff --git a/env/lib/python3.5/site-packages/django/core/checks/registry.py b/env/lib/python3.5/site-packages/django/core/checks/registry.py new file mode 100644 index 0000000..9660272 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/registry.py @@ -0,0 +1,96 @@ +from itertools import chain + +from django.utils.itercompat import is_iterable + + +class Tags: + """ + Built-in tags for internal checks. + """ + admin = 'admin' + caches = 'caches' + compatibility = 'compatibility' + database = 'database' + models = 'models' + security = 'security' + signals = 'signals' + templates = 'templates' + urls = 'urls' + + +class CheckRegistry: + + def __init__(self): + self.registered_checks = set() + self.deployment_checks = set() + + def register(self, check=None, *tags, **kwargs): + """ + Can be used as a function or a decorator. Register given function + `f` labeled with given `tags`. The function should receive **kwargs + and return list of Errors and Warnings. + + Example:: + + registry = CheckRegistry() + @registry.register('mytag', 'anothertag') + def my_check(apps, **kwargs): + # ... perform checks and collect `errors` ... + return errors + # or + registry.register(my_check, 'mytag', 'anothertag') + """ + def inner(check): + check.tags = tags + checks = self.deployment_checks if kwargs.get('deploy') else self.registered_checks + checks.add(check) + return check + + if callable(check): + return inner(check) + else: + if check: + tags += (check,) + return inner + + def run_checks(self, app_configs=None, tags=None, include_deployment_checks=False): + """ + Run all registered checks and return list of Errors and Warnings. + """ + errors = [] + checks = self.get_checks(include_deployment_checks) + + if tags is not None: + checks = [check for check in checks if not set(check.tags).isdisjoint(tags)] + else: + # By default, 'database'-tagged checks are not run as they do more + # than mere static code analysis. + checks = [check for check in checks if Tags.database not in check.tags] + + for check in checks: + new_errors = check(app_configs=app_configs) + assert is_iterable(new_errors), ( + "The function %r did not return a list. All functions registered " + "with the checks registry must return a list." % check) + errors.extend(new_errors) + return errors + + def tag_exists(self, tag, include_deployment_checks=False): + return tag in self.tags_available(include_deployment_checks) + + def tags_available(self, deployment_checks=False): + return set(chain.from_iterable( + check.tags for check in self.get_checks(deployment_checks) + )) + + def get_checks(self, include_deployment_checks=False): + checks = list(self.registered_checks) + if include_deployment_checks: + checks.extend(self.deployment_checks) + return checks + + +registry = CheckRegistry() +register = registry.register +run_checks = registry.run_checks +tag_exists = registry.tag_exists diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/__init__.py b/env/lib/python3.5/site-packages/django/core/checks/security/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa36f0938fa7f3cdd6afcda44266eb932149d9b7 GIT binary patch literal 153 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/csrf.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/csrf.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac3536c6c2c038c6327d08f278eaed0f50f74660 GIT binary patch literal 1514 zcmb7EO>f&q5S=9{MUth&PMh@eu({L~5J^c21V~X7ZDkcO(%67y*C-J{SaVkrEsD$T zE@Q|@Pwp@2t$#_^9*Us;@s zPwcCJ0^u?`6cf9=aV$)Z;bqOJNot)kB4PkP>5@yGZ#yoELJ7m2<|m4m7E}4osmLdK z+wzk#&0HtVd1AD+9h*AEjrzG%*73166J-{>Fxsiar8?&?Qo-F+@p&p`rp|;>{PS(; zH|t)-x`{R8ZXe;tRGmG$%-!ax<+*ko>n(I?__N)eogW6r-yRIwT|UUgNk-(}D1gsU z#ELPILNP{*WJ+>WZcAi9~}&c>7glAmmm4w3(P}8s-yF4 z;q!T-^(@7%ikY%Jb$qT-mQ2UvG$}Jb2%alc6Ri*OPajX)LO}mJfKvvuD!MJ$J8%EzfwlufTg8p5LH-V=h9M7sf7f&K zqF1CvhkPbG`RVA1d^B^tRfY8>LAkwTs*;)Qt%ud~9x4{g%@M6eSMK_Nh*Mc$rhyn& zr7AMLI84y>{s<9i{S;68F#_tl0Qe<ZqvON?*+bkop2fkGsXt7bE z^KptVS9OLa$7{0?)+#yjEUy%rIz4&EN8jZ6300?$4Fq*&ZsGOa1Uq zKD?%7Wy{gZuJVwTTB(PKQ9Wu#_p1K@sY{4y literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/sessions.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/checks/security/__pycache__/sessions.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..099ca94f189b3fed821e4d4c377dbc93c80f2e72 GIT binary patch literal 2710 zcmc&$ZBH9V5T5h-6>Q#L5+LnHY86>6CJ^$WX;qbitDq2!Vy7rpB=@*o%whY^-CZ}r zN@zc7C=|vv{6{bU$^rZV?>tHD ze}k{uZ~!>|JJ1H`I8b-M;R)a_v=h*Aq3%K_3H2m&QczFfSQ2;&egUYbK_o$>fv4e( z13Uvfiyfz)v3SnnV+PM!eB9!BgXe%3fKQk`$IP5D;FEUFl$kSb@o9_C7(8$BS&PpZ zyZ|Bv!iCcb;Pb#22;_^vZ_z2JZGG~p3AceS*$Gp?mw~Sst)_wB0sfKc&j9}zszr8A z&MZ1{Rtc?xu&K@y1h{ds<~3EEIrL?;*SA@ifC6$sYxT0*fvvrZ%hOdLcfY+ zi)rZ*%v6ZOLMo;sb`qR=ev9>#kakN|`kk!EbnpbPDP#uqG2+kf)^w-4)(yI=N4=oU zSHsiB7ks0o*Z8RyHY3~ksKT0mBK($GGb#uA3_C_&RqCF_OCINqw?JcHK;!LcY4QLu z5ggZ%W7zh?7g3L$cs~htZ*We@k3ubjqmte89t%Qt7WE|C-LKZR_V&sgVjJ zr)glYJd8Bjs9CjKt?pL#8{3u2lihNoTHb#CtW3_R$(|_1iGcSDR`1f`{q_6(UvE^Q z)Co9mi&vf$rRu=cr$c0<-_zZloxSqm*0b^l>2^`C^?vbcQv$`Tt=6iGD>wcf^OR*? z$R2Cmt-L4id>JXVssb&T@@3Gam|&jPNVw~{XP8!WBt^l9dJ>Zr#B;=(6V!wvz%u3& z92qetPmJl_cwM6#`4GlDuGJ1I`+F~joVn=T2mRk}RNz12%MF@s_CLGCnBjsOIrFfd z=Azq<&T2#Qxae$3TTkc;>L{83KPNx~oI0Ss2c3X7c#EIH>ja#-pp%qm9i1}hmlid( z!qFM}#&Ik=tt3cXorR`D`yoz=@SL(_F(>K7`urt320hiS#@cH=Y(5%M@mK^)Hx z$40SghSp=ZEke`Xz-&E^t1v5t#{nkobPGe8S|Md5)n!I5n>07v_-!s5En{ zk#=(US1|7kN_h*>|H+NAfM;7bE?#n@rGuQnNpcc}amxcaZM&Ot)^;BjT{%zl7Dz0T z7}knGz}~siJvM?XxZ*kot>BoC@9-IxM^Ya-G9XziZK%=TyrwezW0(~a11^n?vhq6y z7*i jV5&zbrV=Y|KI3BP&bc|)v`K37PA+*Jez$P9kWc;%((js~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/base.py b/env/lib/python3.5/site-packages/django/core/checks/security/base.py new file mode 100644 index 0000000..bc804c5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/security/base.py @@ -0,0 +1,210 @@ +from django.conf import settings + +from .. import Tags, Warning, register + +SECRET_KEY_MIN_LENGTH = 50 +SECRET_KEY_MIN_UNIQUE_CHARACTERS = 5 + +W001 = Warning( + "You do not have 'django.middleware.security.SecurityMiddleware' " + "in your MIDDLEWARE so the SECURE_HSTS_SECONDS, " + "SECURE_CONTENT_TYPE_NOSNIFF, " + "SECURE_BROWSER_XSS_FILTER, and SECURE_SSL_REDIRECT settings " + "will have no effect.", + id='security.W001', +) + +W002 = Warning( + "You do not have " + "'django.middleware.clickjacking.XFrameOptionsMiddleware' in your " + "MIDDLEWARE, so your pages will not be served with an " + "'x-frame-options' header. Unless there is a good reason for your " + "site to be served in a frame, you should consider enabling this " + "header to help prevent clickjacking attacks.", + id='security.W002', +) + +W004 = Warning( + "You have not set a value for the SECURE_HSTS_SECONDS setting. " + "If your entire site is served only over SSL, you may want to consider " + "setting a value and enabling HTTP Strict Transport Security. " + "Be sure to read the documentation first; enabling HSTS carelessly " + "can cause serious, irreversible problems.", + id='security.W004', +) + +W005 = Warning( + "You have not set the SECURE_HSTS_INCLUDE_SUBDOMAINS setting to True. " + "Without this, your site is potentially vulnerable to attack " + "via an insecure connection to a subdomain. Only set this to True if " + "you are certain that all subdomains of your domain should be served " + "exclusively via SSL.", + id='security.W005', +) + +W006 = Warning( + "Your SECURE_CONTENT_TYPE_NOSNIFF setting is not set to True, " + "so your pages will not be served with an " + "'x-content-type-options: nosniff' header. " + "You should consider enabling this header to prevent the " + "browser from identifying content types incorrectly.", + id='security.W006', +) + +W007 = Warning( + "Your SECURE_BROWSER_XSS_FILTER setting is not set to True, " + "so your pages will not be served with an " + "'x-xss-protection: 1; mode=block' header. " + "You should consider enabling this header to activate the " + "browser's XSS filtering and help prevent XSS attacks.", + id='security.W007', +) + +W008 = Warning( + "Your SECURE_SSL_REDIRECT setting is not set to True. " + "Unless your site should be available over both SSL and non-SSL " + "connections, you may want to either set this setting True " + "or configure a load balancer or reverse-proxy server " + "to redirect all connections to HTTPS.", + id='security.W008', +) + +W009 = Warning( + "Your SECRET_KEY has less than %(min_length)s characters or less than " + "%(min_unique_chars)s unique characters. Please generate a long and random " + "SECRET_KEY, otherwise many of Django's security-critical features will be " + "vulnerable to attack." % { + 'min_length': SECRET_KEY_MIN_LENGTH, + 'min_unique_chars': SECRET_KEY_MIN_UNIQUE_CHARACTERS, + }, + id='security.W009', +) + +W018 = Warning( + "You should not have DEBUG set to True in deployment.", + id='security.W018', +) + +W019 = Warning( + "You have " + "'django.middleware.clickjacking.XFrameOptionsMiddleware' in your " + "MIDDLEWARE, but X_FRAME_OPTIONS is not set to 'DENY'. " + "The default is 'SAMEORIGIN', but unless there is a good reason for " + "your site to serve other parts of itself in a frame, you should " + "change it to 'DENY'.", + id='security.W019', +) + +W020 = Warning( + "ALLOWED_HOSTS must not be empty in deployment.", + id='security.W020', +) + +W021 = Warning( + "You have not set the SECURE_HSTS_PRELOAD setting to True. Without this, " + "your site cannot be submitted to the browser preload list.", + id='security.W021', +) + + +def _security_middleware(): + return 'django.middleware.security.SecurityMiddleware' in settings.MIDDLEWARE + + +def _xframe_middleware(): + return 'django.middleware.clickjacking.XFrameOptionsMiddleware' in settings.MIDDLEWARE + + +@register(Tags.security, deploy=True) +def check_security_middleware(app_configs, **kwargs): + passed_check = _security_middleware() + return [] if passed_check else [W001] + + +@register(Tags.security, deploy=True) +def check_xframe_options_middleware(app_configs, **kwargs): + passed_check = _xframe_middleware() + return [] if passed_check else [W002] + + +@register(Tags.security, deploy=True) +def check_sts(app_configs, **kwargs): + passed_check = not _security_middleware() or settings.SECURE_HSTS_SECONDS + return [] if passed_check else [W004] + + +@register(Tags.security, deploy=True) +def check_sts_include_subdomains(app_configs, **kwargs): + passed_check = ( + not _security_middleware() or + not settings.SECURE_HSTS_SECONDS or + settings.SECURE_HSTS_INCLUDE_SUBDOMAINS is True + ) + return [] if passed_check else [W005] + + +@register(Tags.security, deploy=True) +def check_sts_preload(app_configs, **kwargs): + passed_check = ( + not _security_middleware() or + not settings.SECURE_HSTS_SECONDS or + settings.SECURE_HSTS_PRELOAD is True + ) + return [] if passed_check else [W021] + + +@register(Tags.security, deploy=True) +def check_content_type_nosniff(app_configs, **kwargs): + passed_check = ( + not _security_middleware() or + settings.SECURE_CONTENT_TYPE_NOSNIFF is True + ) + return [] if passed_check else [W006] + + +@register(Tags.security, deploy=True) +def check_xss_filter(app_configs, **kwargs): + passed_check = ( + not _security_middleware() or + settings.SECURE_BROWSER_XSS_FILTER is True + ) + return [] if passed_check else [W007] + + +@register(Tags.security, deploy=True) +def check_ssl_redirect(app_configs, **kwargs): + passed_check = ( + not _security_middleware() or + settings.SECURE_SSL_REDIRECT is True + ) + return [] if passed_check else [W008] + + +@register(Tags.security, deploy=True) +def check_secret_key(app_configs, **kwargs): + passed_check = ( + getattr(settings, 'SECRET_KEY', None) and + len(set(settings.SECRET_KEY)) >= SECRET_KEY_MIN_UNIQUE_CHARACTERS and + len(settings.SECRET_KEY) >= SECRET_KEY_MIN_LENGTH + ) + return [] if passed_check else [W009] + + +@register(Tags.security, deploy=True) +def check_debug(app_configs, **kwargs): + passed_check = not settings.DEBUG + return [] if passed_check else [W018] + + +@register(Tags.security, deploy=True) +def check_xframe_deny(app_configs, **kwargs): + passed_check = ( + not _xframe_middleware() or + settings.X_FRAME_OPTIONS == 'DENY' + ) + return [] if passed_check else [W019] + + +@register(Tags.security, deploy=True) +def check_allowed_hosts(app_configs, **kwargs): + return [] if settings.ALLOWED_HOSTS else [W020] diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/csrf.py b/env/lib/python3.5/site-packages/django/core/checks/security/csrf.py new file mode 100644 index 0000000..75c9813 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/security/csrf.py @@ -0,0 +1,40 @@ +from django.conf import settings + +from .. import Tags, Warning, register + +W003 = Warning( + "You don't appear to be using Django's built-in " + "cross-site request forgery protection via the middleware " + "('django.middleware.csrf.CsrfViewMiddleware' is not in your " + "MIDDLEWARE). Enabling the middleware is the safest approach " + "to ensure you don't leave any holes.", + id='security.W003', +) + +W016 = Warning( + "You have 'django.middleware.csrf.CsrfViewMiddleware' in your " + "MIDDLEWARE, but you have not set CSRF_COOKIE_SECURE to True. " + "Using a secure-only CSRF cookie makes it more difficult for network " + "traffic sniffers to steal the CSRF token.", + id='security.W016', +) + + +def _csrf_middleware(): + return 'django.middleware.csrf.CsrfViewMiddleware' in settings.MIDDLEWARE + + +@register(Tags.security, deploy=True) +def check_csrf_middleware(app_configs, **kwargs): + passed_check = _csrf_middleware() + return [] if passed_check else [W003] + + +@register(Tags.security, deploy=True) +def check_csrf_cookie_secure(app_configs, **kwargs): + passed_check = ( + settings.CSRF_USE_SESSIONS or + not _csrf_middleware() or + settings.CSRF_COOKIE_SECURE + ) + return [] if passed_check else [W016] diff --git a/env/lib/python3.5/site-packages/django/core/checks/security/sessions.py b/env/lib/python3.5/site-packages/django/core/checks/security/sessions.py new file mode 100644 index 0000000..1f31a16 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/security/sessions.py @@ -0,0 +1,97 @@ +from django.conf import settings + +from .. import Tags, Warning, register + + +def add_session_cookie_message(message): + return message + ( + " Using a secure-only session cookie makes it more difficult for " + "network traffic sniffers to hijack user sessions." + ) + + +W010 = Warning( + add_session_cookie_message( + "You have 'django.contrib.sessions' in your INSTALLED_APPS, " + "but you have not set SESSION_COOKIE_SECURE to True." + ), + id='security.W010', +) + +W011 = Warning( + add_session_cookie_message( + "You have 'django.contrib.sessions.middleware.SessionMiddleware' " + "in your MIDDLEWARE, but you have not set " + "SESSION_COOKIE_SECURE to True." + ), + id='security.W011', +) + +W012 = Warning( + add_session_cookie_message("SESSION_COOKIE_SECURE is not set to True."), + id='security.W012', +) + + +def add_httponly_message(message): + return message + ( + " Using an HttpOnly session cookie makes it more difficult for " + "cross-site scripting attacks to hijack user sessions." + ) + + +W013 = Warning( + add_httponly_message( + "You have 'django.contrib.sessions' in your INSTALLED_APPS, " + "but you have not set SESSION_COOKIE_HTTPONLY to True.", + ), + id='security.W013', +) + +W014 = Warning( + add_httponly_message( + "You have 'django.contrib.sessions.middleware.SessionMiddleware' " + "in your MIDDLEWARE, but you have not set " + "SESSION_COOKIE_HTTPONLY to True." + ), + id='security.W014', +) + +W015 = Warning( + add_httponly_message("SESSION_COOKIE_HTTPONLY is not set to True."), + id='security.W015', +) + + +@register(Tags.security, deploy=True) +def check_session_cookie_secure(app_configs, **kwargs): + errors = [] + if not settings.SESSION_COOKIE_SECURE: + if _session_app(): + errors.append(W010) + if _session_middleware(): + errors.append(W011) + if len(errors) > 1: + errors = [W012] + return errors + + +@register(Tags.security, deploy=True) +def check_session_cookie_httponly(app_configs, **kwargs): + errors = [] + if not settings.SESSION_COOKIE_HTTPONLY: + if _session_app(): + errors.append(W013) + if _session_middleware(): + errors.append(W014) + if len(errors) > 1: + errors = [W015] + return errors + + +def _session_middleware(): + return 'django.contrib.sessions.middleware.SessionMiddleware' in settings.MIDDLEWARE + + +def _session_app(): + return "django.contrib.sessions" in settings.INSTALLED_APPS diff --git a/env/lib/python3.5/site-packages/django/core/checks/templates.py b/env/lib/python3.5/site-packages/django/core/checks/templates.py new file mode 100644 index 0000000..8c4b7c1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/templates.py @@ -0,0 +1,35 @@ +import copy + +from django.conf import settings + +from . import Error, Tags, register + +E001 = Error( + "You have 'APP_DIRS': True in your TEMPLATES but also specify 'loaders' " + "in OPTIONS. Either remove APP_DIRS or remove the 'loaders' option.", + id='templates.E001', +) +E002 = Error( + "'string_if_invalid' in TEMPLATES OPTIONS must be a string but got: {} ({}).", + id="templates.E002", +) + + +@register(Tags.templates) +def check_setting_app_dirs_loaders(app_configs, **kwargs): + return [E001] if any( + conf.get('APP_DIRS') and 'loaders' in conf.get('OPTIONS', {}) + for conf in settings.TEMPLATES + ) else [] + + +@register(Tags.templates) +def check_string_if_invalid_is_string(app_configs, **kwargs): + errors = [] + for conf in settings.TEMPLATES: + string_if_invalid = conf.get('OPTIONS', {}).get('string_if_invalid', '') + if not isinstance(string_if_invalid, str): + error = copy.copy(E002) + error.msg = error.msg.format(string_if_invalid, type(string_if_invalid).__name__) + errors.append(error) + return errors diff --git a/env/lib/python3.5/site-packages/django/core/checks/urls.py b/env/lib/python3.5/site-packages/django/core/checks/urls.py new file mode 100644 index 0000000..e51ca3f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/checks/urls.py @@ -0,0 +1,110 @@ +from collections import Counter + +from django.conf import settings + +from . import Error, Tags, Warning, register + + +@register(Tags.urls) +def check_url_config(app_configs, **kwargs): + if getattr(settings, 'ROOT_URLCONF', None): + from django.urls import get_resolver + resolver = get_resolver() + return check_resolver(resolver) + return [] + + +def check_resolver(resolver): + """ + Recursively check the resolver. + """ + check_method = getattr(resolver, 'check', None) + if check_method is not None: + return check_method() + elif not hasattr(resolver, 'resolve'): + return get_warning_for_invalid_pattern(resolver) + else: + return [] + + +@register(Tags.urls) +def check_url_namespaces_unique(app_configs, **kwargs): + """ + Warn if URL namespaces used in applications aren't unique. + """ + if not getattr(settings, 'ROOT_URLCONF', None): + return [] + + from django.urls import get_resolver + resolver = get_resolver() + all_namespaces = _load_all_namespaces(resolver) + counter = Counter(all_namespaces) + non_unique_namespaces = [n for n, count in counter.items() if count > 1] + errors = [] + for namespace in non_unique_namespaces: + errors.append(Warning( + "URL namespace '{}' isn't unique. You may not be able to reverse " + "all URLs in this namespace".format(namespace), + id="urls.W005", + )) + return errors + + +def _load_all_namespaces(resolver, parents=()): + """ + Recursively load all namespaces from URL patterns. + """ + url_patterns = getattr(resolver, 'url_patterns', []) + namespaces = [ + ':'.join(parents + (url.namespace,)) for url in url_patterns + if getattr(url, 'namespace', None) is not None + ] + for pattern in url_patterns: + namespace = getattr(pattern, 'namespace', None) + current = parents + if namespace is not None: + current += (namespace,) + namespaces.extend(_load_all_namespaces(pattern, current)) + return namespaces + + +def get_warning_for_invalid_pattern(pattern): + """ + Return a list containing a warning that the pattern is invalid. + + describe_pattern() cannot be used here, because we cannot rely on the + urlpattern having regex or name attributes. + """ + if isinstance(pattern, str): + hint = ( + "Try removing the string '{}'. The list of urlpatterns should not " + "have a prefix string as the first element.".format(pattern) + ) + elif isinstance(pattern, tuple): + hint = "Try using path() instead of a tuple." + else: + hint = None + + return [Error( + "Your URL pattern {!r} is invalid. Ensure that urlpatterns is a list " + "of path() and/or re_path() instances.".format(pattern), + hint=hint, + id="urls.E004", + )] + + +@register(Tags.urls) +def check_url_settings(app_configs, **kwargs): + errors = [] + for name in ('STATIC_URL', 'MEDIA_URL'): + value = getattr(settings, name) + if value and not value.endswith('/'): + errors.append(E006(name)) + return errors + + +def E006(name): + return Error( + 'The {} setting must end with a slash.'.format(name), + id='urls.E006', + ) diff --git a/env/lib/python3.5/site-packages/django/core/exceptions.py b/env/lib/python3.5/site-packages/django/core/exceptions.py new file mode 100644 index 0000000..0e85397 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/exceptions.py @@ -0,0 +1,183 @@ +""" +Global Django exception and warning classes. +""" + + +class FieldDoesNotExist(Exception): + """The requested model field does not exist""" + pass + + +class AppRegistryNotReady(Exception): + """The django.apps registry is not populated yet""" + pass + + +class ObjectDoesNotExist(Exception): + """The requested object does not exist""" + silent_variable_failure = True + + +class MultipleObjectsReturned(Exception): + """The query returned multiple objects when only one was expected.""" + pass + + +class SuspiciousOperation(Exception): + """The user did something suspicious""" + + +class SuspiciousMultipartForm(SuspiciousOperation): + """Suspect MIME request in multipart form data""" + pass + + +class SuspiciousFileOperation(SuspiciousOperation): + """A Suspicious filesystem operation was attempted""" + pass + + +class DisallowedHost(SuspiciousOperation): + """HTTP_HOST header contains invalid value""" + pass + + +class DisallowedRedirect(SuspiciousOperation): + """Redirect to scheme not in allowed list""" + pass + + +class TooManyFieldsSent(SuspiciousOperation): + """ + The number of fields in a GET or POST request exceeded + settings.DATA_UPLOAD_MAX_NUMBER_FIELDS. + """ + pass + + +class RequestDataTooBig(SuspiciousOperation): + """ + The size of the request (excluding any file uploads) exceeded + settings.DATA_UPLOAD_MAX_MEMORY_SIZE. + """ + pass + + +class PermissionDenied(Exception): + """The user did not have permission to do that""" + pass + + +class ViewDoesNotExist(Exception): + """The requested view does not exist""" + pass + + +class MiddlewareNotUsed(Exception): + """This middleware is not used in this server configuration""" + pass + + +class ImproperlyConfigured(Exception): + """Django is somehow improperly configured""" + pass + + +class FieldError(Exception): + """Some kind of problem with a model field.""" + pass + + +NON_FIELD_ERRORS = '__all__' + + +class ValidationError(Exception): + """An error while validating data.""" + def __init__(self, message, code=None, params=None): + """ + The `message` argument can be a single error, a list of errors, or a + dictionary that maps field names to lists of errors. What we define as + an "error" can be either a simple string or an instance of + ValidationError with its message attribute set, and what we define as + list or dictionary can be an actual `list` or `dict` or an instance + of ValidationError with its `error_list` or `error_dict` attribute set. + """ + super().__init__(message, code, params) + + if isinstance(message, ValidationError): + if hasattr(message, 'error_dict'): + message = message.error_dict + elif not hasattr(message, 'message'): + message = message.error_list + else: + message, code, params = message.message, message.code, message.params + + if isinstance(message, dict): + self.error_dict = {} + for field, messages in message.items(): + if not isinstance(messages, ValidationError): + messages = ValidationError(messages) + self.error_dict[field] = messages.error_list + + elif isinstance(message, list): + self.error_list = [] + for message in message: + # Normalize plain strings to instances of ValidationError. + if not isinstance(message, ValidationError): + message = ValidationError(message) + if hasattr(message, 'error_dict'): + self.error_list.extend(sum(message.error_dict.values(), [])) + else: + self.error_list.extend(message.error_list) + + else: + self.message = message + self.code = code + self.params = params + self.error_list = [self] + + @property + def message_dict(self): + # Trigger an AttributeError if this ValidationError + # doesn't have an error_dict. + getattr(self, 'error_dict') + + return dict(self) + + @property + def messages(self): + if hasattr(self, 'error_dict'): + return sum(dict(self).values(), []) + return list(self) + + def update_error_dict(self, error_dict): + if hasattr(self, 'error_dict'): + for field, error_list in self.error_dict.items(): + error_dict.setdefault(field, []).extend(error_list) + else: + error_dict.setdefault(NON_FIELD_ERRORS, []).extend(self.error_list) + return error_dict + + def __iter__(self): + if hasattr(self, 'error_dict'): + for field, errors in self.error_dict.items(): + yield field, list(ValidationError(errors)) + else: + for error in self.error_list: + message = error.message + if error.params: + message %= error.params + yield str(message) + + def __str__(self): + if hasattr(self, 'error_dict'): + return repr(dict(self)) + return repr(list(self)) + + def __repr__(self): + return 'ValidationError(%s)' % self + + +class EmptyResultSet(Exception): + """A database query predicate is impossible.""" + pass diff --git a/env/lib/python3.5/site-packages/django/core/files/__init__.py b/env/lib/python3.5/site-packages/django/core/files/__init__.py new file mode 100644 index 0000000..58a6fd8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/__init__.py @@ -0,0 +1,3 @@ +from django.core.files.base import File + +__all__ = ['File'] diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9352d0802139714b0e069cc29278c452f53ca520 GIT binary patch literal 223 zcmWgR<>fL;wu-S~U|@I*#Bjg_WH|tFu`G~C0U}0*90rD5MusRx2F4U7hIAl{i6MoV zAy|{;B~S^2CgUv@x6GW>B9Kl$P39=El&r+O^nAVK{GwF7G@wkeUQ%K)ME(|ge0*X~ zPJH}Ih9VZAdNA?JM!zJtK))cfKsTv0GbcqiFDu?M#VET(A7T=W0vV_eHc&r4J~J<~ cBtBlRpz;=nO>TZlX-=vgBhbKNkShe308n5x7WE zzx2z0EC}&$G4|N#U%{*Yj3&Up6tNI()3-z{Mb{E-OLQxuT@hVdv~3{?t|H>9=+;EL zX2!ONCq%a{+I1m62&y8eiO&F56Jbp}$L2}#K`pAo@H5uD;aPQ#YdB3R-rb0T<41ZQ{&$J&tE+1w@(ydbV#SkyGotog(# zJ@mElUdOBNqIoLCQz2Y*z_k#&b)n9Q43iKAO9RS$X3;8vSt6_Ok|my7LfxkRj?GIT zOn`vOT5cy^H_YvB8icKCZg)UWKJh5byev~{3OMtLZBO&4i4inx>oD%9X$*M%Z$izZ z|K*QXvTkps7xgY~^`khrnC!Se4&K|%R)QTbd6W)6eyYM1!lGBUJRL6g_Vc>yMoE;p zE}_$eMaW6nlnZEQnM~8b z(ZHAM>P)%r5ezg*U&ukTz{Lv(P?0Ve)hTp3rP7k(ViH;=}Nu-1N`|s*Y&b#_@ zZm*?D*s}6T*Y#shYu6=aN#d^i3aYTK!XC(41fC&TLlKyj19TDLr3f-31xXgX-jZuT zZEvM%{5mlJA%VE=$wLsDl>-P%nNI-TNP$sF7)CS*U%?iH9fyhQE{!1>3Y!;793*J6 z0cPr7=#)%B>SV`Dj1{JAiS^N%v2kDQpCYS=neSAGaENgb$HU}=u(Jt~)k#yk4WYJ# zl=2se6d#X{sW6Ivjv=*+8DbSk5gLVfX7rCC!bFu3P7# zQ}ii&?0Rcr4J;MTl-pSt$K+z+t|Cbf-npN6TXE=QsS|`*sJc;t!FK4751rEv$$Ysr zt!C*6c1k)dw^E(kJulm4XC|P+neVQzDwV2ya$~<2a#x+9t#8w=`ughXZFhC;Mm}>D z{vU1iGXvAAunXmtUaAeXP>R&?lEB%I!Z>jJ?S8VWowVa@ZgSrxsy8>CElP3D`5^3g z{W#OmO?lSlCbM^A_2$+4cQ)MXKfAwn+g-oaUftYmEtgQN+BL-6g|7m#Ce$||1x2wx zw-v}6%D*w9Bew%D^Ii^WHAD2bNs>p=i0UlVFi&c*Do{ZUCO?>B8VzKr1X4yBOepvm z@slbR3i0n!(vpM!lziL^v%X3oo(NuX$^Hdi3{n%4%(+&l>P=^Up5b6Xc(oU2(-LRXg{R@unZ*e4r{PlL)kAw0& zFMi_fYwRvay6MH5Xu5cjbgRf$lGJ&WrU76)jg#S0BwMGW(r$qOsLBI}6c5d$Wf{vq z580s4Ddn5!zpR4UAROvgBU^@X68XA$`-!e()D`kfaf6_I^|7;<*qv zK6y+Tes7zSJYtLSh#Q|g6wf%H_G@8@d-qS&Z1E^QkZi^phyt zc724I@NplCaO2L{eB5c-EWh@|R=?8;m77;tR=G__yev?v4-olW_cl;z%D=*@!J-#o z%_psTtzp$FO_+Y+79+f;mq523`I2qBag8#D{CfWEo~IpiQ+(#X3ka!KSM#Egu!yFk=IxTfr)ce@+pU!vuN@f zxX~F>7lA7(130JUjRzzfPFF+MOJ|Qg(q+y~fDLNvnfYPLBEvOTK$s4YVQoA3c0L+`NOU_}+K}BIj zQ7x*DQA5?3I!(=6)YPb1qK5oUU8LrF)O??sOVkkaOw5@1uzaZ6RaC9j@p6K0%9=G> zZ&u9T!u;&~Y@>OaMzfO)=>xKSh8C`ojSpVDa4|vWYYC( zc(ufJ6u`x83}BcqFO~JN+t?%>h)ZQYbv=axCK*X|u)&e}szZZ|akLvc>DCVAm~7ia z<6&Z_uQNw^PaNOuyMO@&e*#I6*&WZ%AaTw!CL50~Tf`;3%u7T#`e@CXiQ96SKO9p<<%oh|g&^u`~3#=28K(JWhvz5}Dh4_GaS>KTU$8t2^fx#chAv?k-7#!n&jVX338VMY-R;NrW~ zXKx(2+hQy a;4(3y=_1jTOV*s6t1LcVJl(7|tN#UqW>%*F literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/images.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/images.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1e7f1b6855c06891a0d0ffb098369d8b89b264f GIT binary patch literal 2082 zcmb7F!EPHj5FPHWR;!I1%Ryuyhoa0W72wD~fS^cF1SyKT2++DloWhP!U_mb_iSlY! zCaE|UhO!-_&7})1IZF;_-aO8XHrLkD2l?agpS1w~ zglkWP@>6{60S*#ifFlDLK*3;u!b%Qc5O_I+B7|uKg9zAHG6LCvw|JrfDuOp53>qL~ zkWG*YyhQ^j2e993Ext{^bGp#(j1T8!?sQdJKCBEMi&7T49C1ArBW3$(`dppNwNaMu z>7uAkxv>1Kn)9h1jh)xhrRt~e5H0NXSRL)?Lgn;z`GhDu#n!oWv@0o1K$1dyC9eoQ$&pChE#y7W=Zt>U7n%8}JlaXAs? zsOsmHQT-tvu>B)pRiDmo@zb%+$9!h0SEy>eB_X9IMnu7fO1L=%Puxf)JT<4W0wzYi zzaMYA>1=zZXZMfhx{&wFN%lxSICk5skS-^RY}-e+eQ|BGv$}Drr5kS$5`qN5V*QG; zzTf*Fu-~m!5v(;DGtEaS&OBt%N8HMkM@I?yW30ZB+E)M zRasW2SvIZYydb%qWhZk{T@~27?}~N2(u-~aFh#NhV9Nj|p6&AxF8B`VM$9+F^f~e!!2}x% z$_+1Ld!gF^R(8R~{(^8jAXV%^cz=uEsCds~c>S|K(1c}72hLGwf_)2nXB)5#VUo}{ zSvn{WA#yF4q;Q;q`2*N_0&H;?mI+L5kiR>VHnlWVHorp|!cPDPFR{Vl4^@9i;1JP7 zZtc>mlxwh|`mu#a$L3mzfDlM)VO3i}6W2XoA9F^ab1ldoL62zS}= zAP-SzzjtHtt8W<36*h^IyRqV*_{!Sit99KFy~i;Lt-V-U{$hr916VX#^4_BICL-m|Y)`thDHRvEK~n|0(= zQBbo|$7UTD4CPfF4VA*;S`_-IZlG#q>PVQ8ty2VHoTbiL$JUv7?&^l`RcJ#ml%dq^ zwFYepFRM&Ol=#KL`s#n@s<>)4LqDiCNWAi_Li71}ULI#;sg9&@qGsw^mG}bbpohEo z+Q&FR+zHxPx-o0BPC#>rB@_A;hVusNhMO!5x~vm5e1YF&Nf5KOz>u9@)7-|%kUjGe n4ug&V{K*(1(KF|dT!V8}v~}{?ss}uwhU)tX0cr=GaI^alz53kZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/locks.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/locks.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c17e4ea6b5f2ccd879f534c8c66f92114839597 GIT binary patch literal 3612 zcmbVO&2rmD5^nquBq2(&ELoOg$AJ<%5;iuO$eUEfyXCU2A6tn+vP3IC@TO1@Fd!k} zhdUTrmdma^I1jSdeT999eE?kdP_ssOy)6+f6v$N)gfB!H4 zoCWwdOg#72x<`2;Ww0Oz!W&rAu!=s1^#zstXu)7 zA_vYuY(P>4rwU08oEju`aO#kl;FyrifHMP01DpmVv*64^G6&8aB=g|RgPf}Y@g+zW zz*&IgGB}qZSp;WM%A6$#aL^S9aL_WaDzF;7RU}g<=2!#%FJQRTRY(nzBExX~6?hWN zLvV>8AZ0V~Rs-i6_AWqhS@vEA){wm)VecXYOR{%qqI(_KEU@deigN?l92|WNM>oN_ z32Xt_O>jQ}wg?PoIs4y$KH7jHYofmj&Z^X3{hdB4SAb!^1pxvyq_aPTU>Sm{wE zwbIJ@O24Gn;OF4ll<=c-A%;fJzTur#^H%;@g zm$SecdR#D z_z;`*{HtHB^*HibN>h%~fbl6ktCxl1#N*7`D^+YzXvkXMe7*7IJ(Fgo8FHK=&qmy5xMrU1~tUhLX zPsdFAaiP<^g)vI$?JJ~@54|;Po7nP?kqCg-GTpt!RCbN{BL&_9^pNY>>Z{EsOke~N zl7QttkA?zcMS3L95+()|?I(lCA6R}iiUaGAjnysG!BJR1Qx$3vI2?A9p%?MP=)!&i+jqX5q*zHXU2Bw*FpZQlk%+39URbBsAFc4jAG&&uKU-K7nc%F-ay4LVsVhW(!oIEgVE|{C8BCKL)SCjwyT_ikl!To z36f&Q_0lXoO|lW%O*R&l?vI__EpCwtMamSBKvuEuYizlJq@mOa3iZ7QrGgy~vE`dc zE{1}eQ9{A`UNX2(5>uc9GbA{jYI;z?eKHEO^W*mZ-lJ}Jd&`*}BXdU-KTd6z(4}7N zG$tJFo?{HQU$9iP?b-*h`DbWWQ9s!0w4b=$XZsQW9!ErL5xEHWZ4~?oTTa3fcU?j3 z)bGoafDGZTVI$c2E)qQNc)*29Cmjnp{@4S1u2 zFyOULpFLY^a|--eLjv&MziD7s3nR&2_*@jTeJ0#253#BRF_R}!8djKln2vTZ9c;hk z%Q&vkv9QHizpD6T z6g?Ezlw~CJ9b_(mj-Du?BT$6?0d7^|u1LoqZs~@Laq~5tpVL8~g4#HcxpxXI{{w2+ zy2Q%wkoH|7O(N%8EU{5A_pnW2yQ!RQD{U{~l-LL;?iXh3_Kuv!R?8K>K*5LelFxi> z<6L>>Et>738K0FiD&>q97}=kiY!Y=864a!5pCa>t>(S9zZZPmL*wAvkMU(L|oG`~$ zLO&Ilb3;n-(x0|A1?VDg5vpTsGMRz0avlX_(wQl@e{Tv|h8v64DC7Nq&l;Umj^va8 z%d%2d+=KSS#}`>cdzWDwTXS8pE3YP%dd&2mj+yr3SF%#S8dqw24b!9>WIpC}HOuJ( zFO9BSuC7ylm%&yT<)x0#k!kZpE)iKEa+$~?ktHHmh{(e>Uk++wS(8^new9R2Ey`p= zp5hcwoczW=CvuAjW#Td^kq@25UiUov6*atwr7XU;!EF>4RgO19yl@sZkN3-ES~Q$C ziIZ=nPm7sdd4JmGJmbaOBfJzuha{|Q5(j*p-H~3%qolOoYv46^oIUF`ab{{ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/move.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/move.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01f0f5d73a987b3916b443e1bc0e0888e60bdc94 GIT binary patch literal 2126 zcmaJ?OK;mo5T4~jq+}_6q;b**iba4172wD~fTFDt7>OMlFp^lQT|l-_fTBq{qQr-~ zOVyDf=aA%Bp#Pxvp7RI#8+s|Q=&h%md+Vt)ODi^9w6vGnot^pg?ab__U;m9VoJ2g%c+roz^p7K1@DqQ+ zN4b>oQ4+1K)oL7{_4RdrEb^3x13!D7w}M6d1UYi>mm{zFU+6c zUM3Z!r6G$>N<*{u4$}d)YDa8QO1>{(QW zqF!SZn^`VzX*+HWDaGcla;2X}M0UIBD5vjBzbJ$1i(f!oL-)VG(y1H8qq|4rI0^4&1Mlnb-mq9L>oWVG@~rCe ztWq^vqlv0wNlH44lpsO_V~LsUCTp;&`7sj_z@ZcSJJX4M zpFMG%I&**W2&N{~F~?=jFts!>DZym4sPWLajQM$0?%5Y5pk~H0EMXZcx(q`qLs40aL6U zPOcF}B5+oL7ppME+k+fT5H&WnU@#9;gX)dDbf5(aLm!Iy{txJMFpy9d$&PM}oR(&b z1KR#(?_jbB#q~?a?PP0s)DQGgUov*)06YB%rVb2lKyd>G%bGyKUIBCt5rWt`@X~<; z>PkYxZ@GEijI5JAc#rnmIT{B{2m+!KlnDu4jrr?;VB$CIH>>_rtggPbm(@Yv`#g&{ z-ao&Ha}ybu%K>*cZ~q73`6*IVHy{W$3JSaON#fhu$~ zM(v4{gdd5>A96nsC_-9NBuYS(%9f_KbBto;qt^IwB3HO9&^zU+pN;(_nUpF;Y^nXP zFddCW#Gg%yex9AP(_j$~QTO7kJe-b;Uc|DHc*+o2BW`};;XM*3A})|Sk?!@j{Y2`6 z2tSsk*!6llZGD}4y^`$i>6eeLVt*$2CHO1g1g(LUA&!*W_BM8QAMPCrEDZdG1C)Cb zXAw!pJC4idEq!l=Lt7O;2qKC4vhB4WE9abxs+2hwRr0a&QIrvIXRp2caUlo7WBv2(3A0L)SbVQqOLm& zRmO4HZ3JV12P`}tqFAJrvV6@WB|$p&DGqrbUobb%EW>1<0QQvL$PYEtfO<7Q-KD2F;psJTJ@x&l7hL?>zIeKQ7`#=b*dzuOG=W rml%gf!8lS{P3sa>5@bPqm3u$U!*LR=S8%0;x?od_FMv)=dz5Nj7c literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/storage.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/storage.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9dda38c114f87781c56f280ba776687f1d24a33 GIT binary patch literal 13137 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 UAHQb`*_rR*TH#;Ta&!6r1`5;+3IG5A literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/temp.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/temp.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d4247db05329206d387c4a473508d3d5b19ed7b GIT binary patch literal 2836 zcmZ`*S(DpD5N^r0;!Vgw67G3`S`3MuY&cV#1qsDNHmPJOhy$gPHDj;VvSemPd)4w3 z{tSPFAE8&C@)vl4uSd4o4I7oG)f)Bm@%15JURw(`;@dy}*&+Iij$L)|UtyVj5J@xy z^+@`ZdNc%6@jeZG$JZ#W(X39xI(f1~!v-mjcA6xcH1$c3=sVdW*{0v2rcJ6&Pir)6 zk!sPfO<9MOPdjbqnZfxEn|jm>qK|4s!Pd4CR?X&OmdhelVy^SuL@Fa9u^G*j+`_wD zNBZDyg12@%vLcQ$F;YUSe6BJjMUr7(2?Ox}$75xT$TJaT2V$N^cAV>3U);-$T|F96 z7*>WuHp*nArFd{)xAQDuSH`f^KgD>QM#fwdqr!?GlT7A&PK}1ET8T-rt6)>ag|Yce zIN5%H@Dd~N%aoFEb)@2GX}Yo~lG!{}GnLuMCh$5RpB6XH81^@~A8y^b_u&4+uOB`Z z<20IxB9lrl{kbOgwv%`pAS!rc-4Vgzh_QxKBb8*66>dQ?Ug1{hVn1`BRHZ}l2S9+?AR=45ReZYr3ly*ibLTHvCU}VMXtr3PORI?BwUFk z^T^<=NNoZnmKlTz>_%c1WzY!|Nc>)|r$9T_IgBn-YaGgI3H+|o=EXR&>)E;$rkJCu z?0@l3)d952Akve9lL0fkQIbX@V8`|K;KcDo z<3^P)k*vF4gF7Cr{(FN*fokv!7-FYQm@|@!#&_MH_ zFV{{qcGUMU3&i4Dy{f7vAML0ZZJ%ex>LRu%B3BNJB$`DU7kkBae=J9^|}_#A6c- zl1)fnW3y};M3L;5O-vfT*HBz{d#$p~h%=03Yc@6fP}Vcd<qe#HvX0LH4g(~U94d`Z7wLe>8IaN+OMMp1AEd9~_V*_PJDYQlT^|)m zDz9fd;iqzAY6o&B$|m{p7GpLI*r*w>OK7UHy-e6U&|?@i^4|73-c|4L^479y?&3&) zDHt=CegYyvLbG zKOJ0hvJFR@^weYV3r?H`$16dHy}!BDYv~KHs?URz4Toacy8q~o*10ZQ-`}s8W`VlS zrVg&2r`chLSw*h$U~hPmEYvSfKL1imbFf`v+I=4A(OESQwT;7*>Cyz<0y&*CI+6Zy4-6 z4nzG4bnA0W-eAHp=r@@#8d@;n);dO9t?+z#9m{Z{yX~g;TBqZ8yWLv1uK8WhKRo5z zb9n6A(+l*w5Ugx>!40oeUE1gN?7Q~t7dAl4W7lz>$Y5HBS>%ZhTYv;Vn?{)l+|1ZNX?}7jT literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/uploadedfile.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/uploadedfile.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f627936c6bddd2ce6e82c165588680627c272241 GIT binary patch literal 4814 zcma)ATXWmS6<%C;6?L^G+vCJR6FV_mi<-Labn2!ar?S<0CSfvG;-s8RAqZHS5J7<5 z1>*=KKdEj0LH|SF`)lypr#$y9FYR}B2~eb{PC#I>yEwah_MGormOHDf&4>P@uOF^6 z_HTCKvQdA6NB#>%z*rBZ!2**-2J4}M+hUQ)Mi%Q?%%HZ-BAbmWtXI+P3X7_2RAarm zZdX~RmhUbhv75e~xd7@Wkm{_x0!TCw!DF^llx7 zqjAJ9Qu?%ZaW$qDIYNa)<`61MlcWtHV^<6JcZ~IwA_ANJy~=tv3o0zAk~p9Q$W)85 zS0%}5G4&v5NVUp%jh&mU*I=0Bu)QLxSkv1y7;8GXK8hXhSf;}B(|LJ0_m7U2?)m7* z@!~)YJ~~>qeIgLtNeA3Ho`g}l8^(^G#J=DucjV;Q*SczVngs_(M;Aqf@yYQC2Sdkv z;C%zF%4Eb}54_Zg!XbA&rO$$<;HA{OCf789mwI3XBZ-@d@ybjX=O_qpJ zM{&~iYg5J0+nPS|x2U9yoilb~uru5y3Dh{V*%@Q5$<8cQL0M51^jB2{njw)J-F7vv z$jO+CyzaVT9Hy?D+cL}mG6*IGT;23^%=4N*@B{#vZ(Zzm`M1zdyM`e=>gP70Ik#hP z#KkID6D=y%sDN!V;J4wrO2)4HPxix;y>v9*8;9dvQbw>FpSZsX9uCvJ;KYkxCB@56 z1m9D3vNxIHo?4ypsaV0RxA4d&3T9k08tRvAUsPJB*q9Gwsf*q=o_##>Z4>}E1a_ju zh!T=RX|cY=b`INSH(UMio_yrolg|Bnvi-Pii)$D~BBQ;!uGm6TZMkiT4XR%+i|r{T zp}=(=w4{lG8JD=!6mwh>r;1BbyJk^o&B!Zi=_{6NxUYDs2;RfEV!fStsT3r>Vh3~< zo(dkd;5jNl6ksxJF!2q+3>YKH80_3&Zw!_KR;mu^4ebjwK$+_Q+9a|!7y_@Mg#0&? z-J-Ud7sF@@K-OS4=?khiFaTc(y;F#q-S7VkR)AA8k-0tg(m`H7_TWe%`P_C=k}K$t&?E>b$^{aD zB$-aDRyFU|S{8n5KHB9);H68Fs+M|bc+{C&hU>oCErar~-4Fz@?2p>*X%AHxo0BFE zTvZWdoG9_VG)!XWe%Rq12OgSxqun&w4MI7D>m=XZ^~smhMFEB8w(v+q@I@dINUH2j zjj(V6E&&Yyq{eO_wx<<#QiXRj-_%)(SOEyu*%@x->BzYOY87@~MKGsb*xkG;C;fi- zZC2}O_H!!;1-5q^D~q?Ncn3vZr|l?jwbccVf-;;Oz_SSAwRipC`Nz-PFFyPD(~q9I zpFjKLGxzE97lIs((k|vyhF)6!g0ssFS2#qxiK0-k(z((z0ffA_RB{6F-Z8Q}B^UFC zI`zxT9Ro3>9Rti0z9D<}1y3g;R$-+-i6Vzg#!33<2&K|&r)?^(6b`TOAlFKLyCf!; zCV4{qDraG4?d7~K88yc?ZF`@l`6-Ii%^By=?cta47PC{64Vz5dV}@b;DK^+wO0x)5 zmf|_D_)#KxzDbJeCh0*kiGycCBx3nS!~-n!lvb>xV1{LE8mo48dpY}R?siR?xp)`! z;yo(vQlU)xXH=spXHKQitx_u?{nvQZYAvg3Y*$*gkB;)Pr#1N%DnHhA;Xid!1xrQ+ zO`TVviM$F;om!z;D{?8?ZuWSoJ%=$YdZcp0OE#>#ODk4F!%Xxpt(f+YZ~&D}vyQ?L zDY<}|!W`ks$%iYyuL71evz)xy4|x>m_*K_dL`EVyR9t0Gg_!3}=mmyIB~mh=x0mI7 zv+!TUIeOExPlIW`(thB55R448De4P~zEfMF42KWVAfwN1_eU+vP*NT2{8h`*H6alu#ztDsGyfzJ_X7@js zgdxu@YV?vg_fjqK-Fv+8|DU% R3>!FeSFN27c5du!{|_9s60`sS literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/__pycache__/uploadhandler.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/files/__pycache__/uploadhandler.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddb8118a37d724d0bc0d10a3bc0d089095dc2aed GIT binary patch literal 7750 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/files/base.py b/env/lib/python3.5/site-packages/django/core/files/base.py new file mode 100644 index 0000000..5403d4a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/base.py @@ -0,0 +1,160 @@ +import os +from io import BytesIO, StringIO, UnsupportedOperation + +from django.core.files.utils import FileProxyMixin +from django.utils.functional import cached_property + + +class File(FileProxyMixin): + DEFAULT_CHUNK_SIZE = 64 * 2 ** 10 + + def __init__(self, file, name=None): + self.file = file + if name is None: + name = getattr(file, 'name', None) + self.name = name + if hasattr(file, 'mode'): + self.mode = file.mode + + def __str__(self): + return self.name or '' + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self or "None") + + def __bool__(self): + return bool(self.name) + + def __len__(self): + return self.size + + @cached_property + def size(self): + if hasattr(self.file, 'size'): + return self.file.size + if hasattr(self.file, 'name'): + try: + return os.path.getsize(self.file.name) + except (OSError, TypeError): + pass + if hasattr(self.file, 'tell') and hasattr(self.file, 'seek'): + pos = self.file.tell() + self.file.seek(0, os.SEEK_END) + size = self.file.tell() + self.file.seek(pos) + return size + raise AttributeError("Unable to determine the file's size.") + + def chunks(self, chunk_size=None): + """ + Read the file and yield chunks of ``chunk_size`` bytes (defaults to + ``File.DEFAULT_CHUNK_SIZE``). + """ + chunk_size = chunk_size or self.DEFAULT_CHUNK_SIZE + try: + self.seek(0) + except (AttributeError, UnsupportedOperation): + pass + + while True: + data = self.read(chunk_size) + if not data: + break + yield data + + def multiple_chunks(self, chunk_size=None): + """ + Return ``True`` if you can expect multiple chunks. + + NB: If a particular file representation is in memory, subclasses should + always return ``False`` -- there's no good reason to read from memory in + chunks. + """ + return self.size > (chunk_size or self.DEFAULT_CHUNK_SIZE) + + def __iter__(self): + # Iterate over this file-like object by newlines + buffer_ = None + for chunk in self.chunks(): + for line in chunk.splitlines(True): + if buffer_: + if endswith_cr(buffer_) and not equals_lf(line): + # Line split after a \r newline; yield buffer_. + yield buffer_ + # Continue with line. + else: + # Line either split without a newline (line + # continues after buffer_) or with \r\n + # newline (line == b'\n'). + line = buffer_ + line + # buffer_ handled, clear it. + buffer_ = None + + # If this is the end of a \n or \r\n line, yield. + if endswith_lf(line): + yield line + else: + buffer_ = line + + if buffer_ is not None: + yield buffer_ + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, tb): + self.close() + + def open(self, mode=None): + if not self.closed: + self.seek(0) + elif self.name and os.path.exists(self.name): + self.file = open(self.name, mode or self.mode) + else: + raise ValueError("The file cannot be reopened.") + return self + + def close(self): + self.file.close() + + +class ContentFile(File): + """ + A File-like object that take just raw content, rather than an actual file. + """ + def __init__(self, content, name=None): + stream_class = StringIO if isinstance(content, str) else BytesIO + super().__init__(stream_class(content), name=name) + self.size = len(content) + + def __str__(self): + return 'Raw content' + + def __bool__(self): + return True + + def open(self, mode=None): + self.seek(0) + return self + + def close(self): + pass + + def write(self, data): + self.__dict__.pop('size', None) # Clear the computed size. + return self.file.write(data) + + +def endswith_cr(line): + """Return True if line (a text or byte string) ends with '\r'.""" + return line.endswith('\r' if isinstance(line, str) else b'\r') + + +def endswith_lf(line): + """Return True if line (a text or byte string) ends with '\n'.""" + return line.endswith('\n' if isinstance(line, str) else b'\n') + + +def equals_lf(line): + """Return True if line (a text or byte string) equals '\n'.""" + return line == ('\n' if isinstance(line, str) else b'\n') diff --git a/env/lib/python3.5/site-packages/django/core/files/images.py b/env/lib/python3.5/site-packages/django/core/files/images.py new file mode 100644 index 0000000..cdb89de --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/images.py @@ -0,0 +1,80 @@ +""" +Utility functions for handling images. + +Requires Pillow as you might imagine. +""" +import struct +import zlib + +from django.core.files import File + + +class ImageFile(File): + """ + A mixin for use alongside django.core.files.base.File, which provides + additional features for dealing with images. + """ + @property + def width(self): + return self._get_image_dimensions()[0] + + @property + def height(self): + return self._get_image_dimensions()[1] + + def _get_image_dimensions(self): + if not hasattr(self, '_dimensions_cache'): + close = self.closed + self.open() + self._dimensions_cache = get_image_dimensions(self, close=close) + return self._dimensions_cache + + +def get_image_dimensions(file_or_path, close=False): + """ + Return the (width, height) of an image, given an open file or a path. Set + 'close' to True to close the file at the end if it is initially in an open + state. + """ + from PIL import ImageFile as PillowImageFile + + p = PillowImageFile.Parser() + if hasattr(file_or_path, 'read'): + file = file_or_path + file_pos = file.tell() + file.seek(0) + else: + file = open(file_or_path, 'rb') + close = True + try: + # Most of the time Pillow only needs a small chunk to parse the image + # and get the dimensions, but with some TIFF files Pillow needs to + # parse the whole file. + chunk_size = 1024 + while 1: + data = file.read(chunk_size) + if not data: + break + try: + p.feed(data) + except zlib.error as e: + # ignore zlib complaining on truncated stream, just feed more + # data to parser (ticket #19457). + if e.args[0].startswith("Error -5"): + pass + else: + raise + except struct.error: + # Ignore PIL failing on a too short buffer when reads return + # less bytes than expected. Skip and feed more data to the + # parser (ticket #24544). + pass + if p.image: + return p.image.size + chunk_size *= 2 + return (None, None) + finally: + if close: + file.close() + else: + file.seek(file_pos) diff --git a/env/lib/python3.5/site-packages/django/core/files/locks.py b/env/lib/python3.5/site-packages/django/core/files/locks.py new file mode 100644 index 0000000..42631b3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/locks.py @@ -0,0 +1,113 @@ +""" +Portable file locking utilities. + +Based partially on an example by Jonathan Feignberg in the Python +Cookbook [1] (licensed under the Python Software License) and a ctypes port by +Anatoly Techtonik for Roundup [2] (license [3]). + +[1] http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65203 +[2] https://sourceforge.net/p/roundup/code/ci/default/tree/roundup/backends/portalocker.py +[3] https://sourceforge.net/p/roundup/code/ci/default/tree/COPYING.txt + +Example Usage:: + + >>> from django.core.files import locks + >>> with open('./file', 'wb') as f: + ... locks.lock(f, locks.LOCK_EX) + ... f.write('Django') +""" +import os + +__all__ = ('LOCK_EX', 'LOCK_SH', 'LOCK_NB', 'lock', 'unlock') + + +def _fd(f): + """Get a filedescriptor from something which could be a file or an fd.""" + return f.fileno() if hasattr(f, 'fileno') else f + + +if os.name == 'nt': + import msvcrt + from ctypes import (sizeof, c_ulong, c_void_p, c_int64, + Structure, Union, POINTER, windll, byref) + from ctypes.wintypes import BOOL, DWORD, HANDLE + + LOCK_SH = 0 # the default + LOCK_NB = 0x1 # LOCKFILE_FAIL_IMMEDIATELY + LOCK_EX = 0x2 # LOCKFILE_EXCLUSIVE_LOCK + + # --- Adapted from the pyserial project --- + # detect size of ULONG_PTR + if sizeof(c_ulong) != sizeof(c_void_p): + ULONG_PTR = c_int64 + else: + ULONG_PTR = c_ulong + PVOID = c_void_p + + # --- Union inside Structure by stackoverflow:3480240 --- + class _OFFSET(Structure): + _fields_ = [ + ('Offset', DWORD), + ('OffsetHigh', DWORD)] + + class _OFFSET_UNION(Union): + _anonymous_ = ['_offset'] + _fields_ = [ + ('_offset', _OFFSET), + ('Pointer', PVOID)] + + class OVERLAPPED(Structure): + _anonymous_ = ['_offset_union'] + _fields_ = [ + ('Internal', ULONG_PTR), + ('InternalHigh', ULONG_PTR), + ('_offset_union', _OFFSET_UNION), + ('hEvent', HANDLE)] + + LPOVERLAPPED = POINTER(OVERLAPPED) + + # --- Define function prototypes for extra safety --- + LockFileEx = windll.kernel32.LockFileEx + LockFileEx.restype = BOOL + LockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED] + UnlockFileEx = windll.kernel32.UnlockFileEx + UnlockFileEx.restype = BOOL + UnlockFileEx.argtypes = [HANDLE, DWORD, DWORD, DWORD, LPOVERLAPPED] + + def lock(f, flags): + hfile = msvcrt.get_osfhandle(_fd(f)) + overlapped = OVERLAPPED() + ret = LockFileEx(hfile, flags, 0, 0, 0xFFFF0000, byref(overlapped)) + return bool(ret) + + def unlock(f): + hfile = msvcrt.get_osfhandle(_fd(f)) + overlapped = OVERLAPPED() + ret = UnlockFileEx(hfile, 0, 0, 0xFFFF0000, byref(overlapped)) + return bool(ret) +else: + try: + import fcntl + LOCK_SH = fcntl.LOCK_SH # shared lock + LOCK_NB = fcntl.LOCK_NB # non-blocking + LOCK_EX = fcntl.LOCK_EX + except (ImportError, AttributeError): + # File locking is not supported. + LOCK_EX = LOCK_SH = LOCK_NB = 0 + + # Dummy functions that don't do anything. + def lock(f, flags): + # File is not locked + return False + + def unlock(f): + # File is unlocked + return True + else: + def lock(f, flags): + ret = fcntl.flock(_fd(f), flags) + return ret == 0 + + def unlock(f): + ret = fcntl.flock(_fd(f), fcntl.LOCK_UN) + return ret == 0 diff --git a/env/lib/python3.5/site-packages/django/core/files/move.py b/env/lib/python3.5/site-packages/django/core/files/move.py new file mode 100644 index 0000000..4d791ac --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/move.py @@ -0,0 +1,87 @@ +""" +Move a file in the safest way possible:: + + >>> from django.core.files.move import file_move_safe + >>> file_move_safe("/tmp/old_file", "/tmp/new_file") +""" + +import errno +import os +from shutil import copystat + +from django.core.files import locks + +__all__ = ['file_move_safe'] + + +def _samefile(src, dst): + # Macintosh, Unix. + if hasattr(os.path, 'samefile'): + try: + return os.path.samefile(src, dst) + except OSError: + return False + + # All other platforms: check for same pathname. + return (os.path.normcase(os.path.abspath(src)) == + os.path.normcase(os.path.abspath(dst))) + + +def file_move_safe(old_file_name, new_file_name, chunk_size=1024 * 64, allow_overwrite=False): + """ + Move a file from one location to another in the safest way possible. + + First, try ``os.rename``, which is simple but will break across filesystems. + If that fails, stream manually from one file to another in pure Python. + + If the destination file exists and ``allow_overwrite`` is ``False``, raise + ``IOError``. + """ + # There's no reason to move if we don't have to. + if _samefile(old_file_name, new_file_name): + return + + try: + if not allow_overwrite and os.access(new_file_name, os.F_OK): + raise IOError("Destination file %s exists and allow_overwrite is False" % new_file_name) + + os.rename(old_file_name, new_file_name) + return + except OSError: + # OSError happens with os.rename() if moving to another filesystem or + # when moving opened files on certain operating systems. + pass + + # first open the old file, so that it won't go away + with open(old_file_name, 'rb') as old_file: + # now open the new file, not forgetting allow_overwrite + fd = os.open(new_file_name, (os.O_WRONLY | os.O_CREAT | getattr(os, 'O_BINARY', 0) | + (os.O_EXCL if not allow_overwrite else 0))) + try: + locks.lock(fd, locks.LOCK_EX) + current_chunk = None + while current_chunk != b'': + current_chunk = old_file.read(chunk_size) + os.write(fd, current_chunk) + finally: + locks.unlock(fd) + os.close(fd) + + try: + copystat(old_file_name, new_file_name) + except PermissionError as e: + # Certain filesystems (e.g. CIFS) fail to copy the file's metadata if + # the type of the destination filesystem isn't the same as the source + # filesystem; ignore that. + if e.errno != errno.EPERM: + raise + + try: + os.remove(old_file_name) + except PermissionError as e: + # Certain operating systems (Cygwin and Windows) + # fail when deleting opened files, ignore it. (For the + # systems where this happens, temporary files will be auto-deleted + # on close anyway.) + if getattr(e, 'winerror', 0) != 32: + raise diff --git a/env/lib/python3.5/site-packages/django/core/files/storage.py b/env/lib/python3.5/site-packages/django/core/files/storage.py new file mode 100644 index 0000000..faa9a48 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/storage.py @@ -0,0 +1,364 @@ +import os +from datetime import datetime +from urllib.parse import urljoin + +from django.conf import settings +from django.core.exceptions import SuspiciousFileOperation +from django.core.files import File, locks +from django.core.files.move import file_move_safe +from django.core.signals import setting_changed +from django.utils import timezone +from django.utils._os import safe_join +from django.utils.crypto import get_random_string +from django.utils.deconstruct import deconstructible +from django.utils.encoding import filepath_to_uri +from django.utils.functional import LazyObject, cached_property +from django.utils.module_loading import import_string +from django.utils.text import get_valid_filename + +__all__ = ('Storage', 'FileSystemStorage', 'DefaultStorage', 'default_storage') + + +class Storage: + """ + A base storage class, providing some default behaviors that all other + storage systems can inherit or override, as necessary. + """ + + # The following methods represent a public interface to private methods. + # These shouldn't be overridden by subclasses unless absolutely necessary. + + def open(self, name, mode='rb'): + """Retrieve the specified file from storage.""" + return self._open(name, mode) + + def save(self, name, content, max_length=None): + """ + Save new content to the file specified by name. The content should be + a proper File object or any Python file-like object, ready to be read + from the beginning. + """ + # Get the proper name for the file, as it will actually be saved. + if name is None: + name = content.name + + if not hasattr(content, 'chunks'): + content = File(content, name) + + name = self.get_available_name(name, max_length=max_length) + return self._save(name, content) + + # These methods are part of the public API, with default implementations. + + def get_valid_name(self, name): + """ + Return a filename, based on the provided filename, that's suitable for + use in the target storage system. + """ + return get_valid_filename(name) + + def get_available_name(self, name, max_length=None): + """ + Return a filename that's free on the target storage system and + available for new content to be written to. + """ + dir_name, file_name = os.path.split(name) + file_root, file_ext = os.path.splitext(file_name) + # If the filename already exists, add an underscore and a random 7 + # character alphanumeric string (before the file extension, if one + # exists) to the filename until the generated filename doesn't exist. + # Truncate original name if required, so the new filename does not + # exceed the max_length. + while self.exists(name) or (max_length and len(name) > max_length): + # file_ext includes the dot. + name = os.path.join(dir_name, "%s_%s%s" % (file_root, get_random_string(7), file_ext)) + if max_length is None: + continue + # Truncate file_root if max_length exceeded. + truncation = len(name) - max_length + if truncation > 0: + file_root = file_root[:-truncation] + # Entire file_root was truncated in attempt to find an available filename. + if not file_root: + raise SuspiciousFileOperation( + 'Storage can not find an available filename for "%s". ' + 'Please make sure that the corresponding file field ' + 'allows sufficient "max_length".' % name + ) + name = os.path.join(dir_name, "%s_%s%s" % (file_root, get_random_string(7), file_ext)) + return name + + def generate_filename(self, filename): + """ + Validate the filename by calling get_valid_name() and return a filename + to be passed to the save() method. + """ + # `filename` may include a path as returned by FileField.upload_to. + dirname, filename = os.path.split(filename) + return os.path.normpath(os.path.join(dirname, self.get_valid_name(filename))) + + def path(self, name): + """ + Return a local filesystem path where the file can be retrieved using + Python's built-in open() function. Storage systems that can't be + accessed using open() should *not* implement this method. + """ + raise NotImplementedError("This backend doesn't support absolute paths.") + + # The following methods form the public API for storage systems, but with + # no default implementations. Subclasses must implement *all* of these. + + def delete(self, name): + """ + Delete the specified file from the storage system. + """ + raise NotImplementedError('subclasses of Storage must provide a delete() method') + + def exists(self, name): + """ + Return True if a file referenced by the given name already exists in the + storage system, or False if the name is available for a new file. + """ + raise NotImplementedError('subclasses of Storage must provide an exists() method') + + def listdir(self, path): + """ + List the contents of the specified path. Return a 2-tuple of lists: + the first item being directories, the second item being files. + """ + raise NotImplementedError('subclasses of Storage must provide a listdir() method') + + def size(self, name): + """ + Return the total size, in bytes, of the file specified by name. + """ + raise NotImplementedError('subclasses of Storage must provide a size() method') + + def url(self, name): + """ + Return an absolute URL where the file's contents can be accessed + directly by a Web browser. + """ + raise NotImplementedError('subclasses of Storage must provide a url() method') + + def get_accessed_time(self, name): + """ + Return the last accessed time (as a datetime) of the file specified by + name. The datetime will be timezone-aware if USE_TZ=True. + """ + raise NotImplementedError('subclasses of Storage must provide a get_accessed_time() method') + + def get_created_time(self, name): + """ + Return the creation time (as a datetime) of the file specified by name. + The datetime will be timezone-aware if USE_TZ=True. + """ + raise NotImplementedError('subclasses of Storage must provide a get_created_time() method') + + def get_modified_time(self, name): + """ + Return the last modified time (as a datetime) of the file specified by + name. The datetime will be timezone-aware if USE_TZ=True. + """ + raise NotImplementedError('subclasses of Storage must provide a get_modified_time() method') + + +@deconstructible +class FileSystemStorage(Storage): + """ + Standard filesystem storage + """ + + def __init__(self, location=None, base_url=None, file_permissions_mode=None, + directory_permissions_mode=None): + self._location = location + self._base_url = base_url + self._file_permissions_mode = file_permissions_mode + self._directory_permissions_mode = directory_permissions_mode + setting_changed.connect(self._clear_cached_properties) + + def _clear_cached_properties(self, setting, **kwargs): + """Reset setting based property values.""" + if setting == 'MEDIA_ROOT': + self.__dict__.pop('base_location', None) + self.__dict__.pop('location', None) + elif setting == 'MEDIA_URL': + self.__dict__.pop('base_url', None) + elif setting == 'FILE_UPLOAD_PERMISSIONS': + self.__dict__.pop('file_permissions_mode', None) + elif setting == 'FILE_UPLOAD_DIRECTORY_PERMISSIONS': + self.__dict__.pop('directory_permissions_mode', None) + + def _value_or_setting(self, value, setting): + return setting if value is None else value + + @cached_property + def base_location(self): + return self._value_or_setting(self._location, settings.MEDIA_ROOT) + + @cached_property + def location(self): + return os.path.abspath(self.base_location) + + @cached_property + def base_url(self): + if self._base_url is not None and not self._base_url.endswith('/'): + self._base_url += '/' + return self._value_or_setting(self._base_url, settings.MEDIA_URL) + + @cached_property + def file_permissions_mode(self): + return self._value_or_setting(self._file_permissions_mode, settings.FILE_UPLOAD_PERMISSIONS) + + @cached_property + def directory_permissions_mode(self): + return self._value_or_setting(self._directory_permissions_mode, settings.FILE_UPLOAD_DIRECTORY_PERMISSIONS) + + def _open(self, name, mode='rb'): + return File(open(self.path(name), mode)) + + def _save(self, name, content): + full_path = self.path(name) + + # Create any intermediate directories that do not exist. + directory = os.path.dirname(full_path) + if not os.path.exists(directory): + try: + if self.directory_permissions_mode is not None: + # os.makedirs applies the global umask, so we reset it, + # for consistency with file_permissions_mode behavior. + old_umask = os.umask(0) + try: + os.makedirs(directory, self.directory_permissions_mode) + finally: + os.umask(old_umask) + else: + os.makedirs(directory) + except FileExistsError: + # There's a race between os.path.exists() and os.makedirs(). + # If os.makedirs() fails with FileExistsError, the directory + # was created concurrently. + pass + if not os.path.isdir(directory): + raise IOError("%s exists and is not a directory." % directory) + + # There's a potential race condition between get_available_name and + # saving the file; it's possible that two threads might return the + # same name, at which point all sorts of fun happens. So we need to + # try to create the file, but if it already exists we have to go back + # to get_available_name() and try again. + + while True: + try: + # This file has a file path that we can move. + if hasattr(content, 'temporary_file_path'): + file_move_safe(content.temporary_file_path(), full_path) + + # This is a normal uploadedfile that we can stream. + else: + # This fun binary flag incantation makes os.open throw an + # OSError if the file already exists before we open it. + flags = (os.O_WRONLY | os.O_CREAT | os.O_EXCL | + getattr(os, 'O_BINARY', 0)) + # The current umask value is masked out by os.open! + fd = os.open(full_path, flags, 0o666) + _file = None + try: + locks.lock(fd, locks.LOCK_EX) + for chunk in content.chunks(): + if _file is None: + mode = 'wb' if isinstance(chunk, bytes) else 'wt' + _file = os.fdopen(fd, mode) + _file.write(chunk) + finally: + locks.unlock(fd) + if _file is not None: + _file.close() + else: + os.close(fd) + except FileExistsError: + # A new name is needed if the file exists. + name = self.get_available_name(name) + full_path = self.path(name) + else: + # OK, the file save worked. Break out of the loop. + break + + if self.file_permissions_mode is not None: + os.chmod(full_path, self.file_permissions_mode) + + # Store filenames with forward slashes, even on Windows. + return name.replace('\\', '/') + + def delete(self, name): + assert name, "The name argument is not allowed to be empty." + name = self.path(name) + # If the file or directory exists, delete it from the filesystem. + try: + if os.path.isdir(name): + os.rmdir(name) + else: + os.remove(name) + except FileNotFoundError: + # FileNotFoundError is raised if the file or directory was removed + # concurrently. + pass + + def exists(self, name): + return os.path.exists(self.path(name)) + + def listdir(self, path): + path = self.path(path) + directories, files = [], [] + for entry in os.listdir(path): + if os.path.isdir(os.path.join(path, entry)): + directories.append(entry) + else: + files.append(entry) + return directories, files + + def path(self, name): + return safe_join(self.location, name) + + def size(self, name): + return os.path.getsize(self.path(name)) + + def url(self, name): + if self.base_url is None: + raise ValueError("This file is not accessible via a URL.") + url = filepath_to_uri(name) + if url is not None: + url = url.lstrip('/') + return urljoin(self.base_url, url) + + def _datetime_from_timestamp(self, ts): + """ + If timezone support is enabled, make an aware datetime object in UTC; + otherwise make a naive one in the local timezone. + """ + if settings.USE_TZ: + # Safe to use .replace() because UTC doesn't have DST + return datetime.utcfromtimestamp(ts).replace(tzinfo=timezone.utc) + else: + return datetime.fromtimestamp(ts) + + def get_accessed_time(self, name): + return self._datetime_from_timestamp(os.path.getatime(self.path(name))) + + def get_created_time(self, name): + return self._datetime_from_timestamp(os.path.getctime(self.path(name))) + + def get_modified_time(self, name): + return self._datetime_from_timestamp(os.path.getmtime(self.path(name))) + + +def get_storage_class(import_path=None): + return import_string(import_path or settings.DEFAULT_FILE_STORAGE) + + +class DefaultStorage(LazyObject): + def _setup(self): + self._wrapped = get_storage_class()() + + +default_storage = DefaultStorage() diff --git a/env/lib/python3.5/site-packages/django/core/files/temp.py b/env/lib/python3.5/site-packages/django/core/files/temp.py new file mode 100644 index 0000000..0793593 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/temp.py @@ -0,0 +1,74 @@ +""" +The temp module provides a NamedTemporaryFile that can be reopened in the same +process on any platform. Most platforms use the standard Python +tempfile.NamedTemporaryFile class, but Windows users are given a custom class. + +This is needed because the Python implementation of NamedTemporaryFile uses the +O_TEMPORARY flag under Windows, which prevents the file from being reopened +if the same flag is not provided [1][2]. Note that this does not address the +more general issue of opening a file for writing and reading in multiple +processes in a manner that works across platforms. + +The custom version of NamedTemporaryFile doesn't support the same keyword +arguments available in tempfile.NamedTemporaryFile. + +1: https://mail.python.org/pipermail/python-list/2005-December/336957.html +2: https://bugs.python.org/issue14243 +""" + +import os +import tempfile + +from django.core.files.utils import FileProxyMixin + +__all__ = ('NamedTemporaryFile', 'gettempdir',) + + +if os.name == 'nt': + class TemporaryFile(FileProxyMixin): + """ + Temporary file object constructor that supports reopening of the + temporary file in Windows. + + Unlike tempfile.NamedTemporaryFile from the standard library, + __init__() doesn't support the 'delete', 'buffering', 'encoding', or + 'newline' keyword arguments. + """ + def __init__(self, mode='w+b', bufsize=-1, suffix='', prefix='', dir=None): + fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir) + self.name = name + self.file = os.fdopen(fd, mode, bufsize) + self.close_called = False + + # Because close can be called during shutdown + # we need to cache os.unlink and access it + # as self.unlink only + unlink = os.unlink + + def close(self): + if not self.close_called: + self.close_called = True + try: + self.file.close() + except (OSError, IOError): + pass + try: + self.unlink(self.name) + except OSError: + pass + + def __del__(self): + self.close() + + def __enter__(self): + self.file.__enter__() + return self + + def __exit__(self, exc, value, tb): + self.file.__exit__(exc, value, tb) + + NamedTemporaryFile = TemporaryFile +else: + NamedTemporaryFile = tempfile.NamedTemporaryFile + +gettempdir = tempfile.gettempdir diff --git a/env/lib/python3.5/site-packages/django/core/files/uploadedfile.py b/env/lib/python3.5/site-packages/django/core/files/uploadedfile.py new file mode 100644 index 0000000..48007b8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/uploadedfile.py @@ -0,0 +1,117 @@ +""" +Classes representing uploaded files. +""" + +import os +from io import BytesIO + +from django.conf import settings +from django.core.files import temp as tempfile +from django.core.files.base import File + +__all__ = ('UploadedFile', 'TemporaryUploadedFile', 'InMemoryUploadedFile', + 'SimpleUploadedFile') + + +class UploadedFile(File): + """ + An abstract uploaded file (``TemporaryUploadedFile`` and + ``InMemoryUploadedFile`` are the built-in concrete subclasses). + + An ``UploadedFile`` object behaves somewhat like a file object and + represents some file data that the user submitted with a form. + """ + + def __init__(self, file=None, name=None, content_type=None, size=None, charset=None, content_type_extra=None): + super().__init__(file, name) + self.size = size + self.content_type = content_type + self.charset = charset + self.content_type_extra = content_type_extra + + def __repr__(self): + return "<%s: %s (%s)>" % (self.__class__.__name__, self.name, self.content_type) + + def _get_name(self): + return self._name + + def _set_name(self, name): + # Sanitize the file name so that it can't be dangerous. + if name is not None: + # Just use the basename of the file -- anything else is dangerous. + name = os.path.basename(name) + + # File names longer than 255 characters can cause problems on older OSes. + if len(name) > 255: + name, ext = os.path.splitext(name) + ext = ext[:255] + name = name[:255 - len(ext)] + ext + + self._name = name + + name = property(_get_name, _set_name) + + +class TemporaryUploadedFile(UploadedFile): + """ + A file uploaded to a temporary location (i.e. stream-to-disk). + """ + def __init__(self, name, content_type, size, charset, content_type_extra=None): + _, ext = os.path.splitext(name) + file = tempfile.NamedTemporaryFile(suffix='.upload' + ext, dir=settings.FILE_UPLOAD_TEMP_DIR) + super().__init__(file, name, content_type, size, charset, content_type_extra) + + def temporary_file_path(self): + """Return the full path of this file.""" + return self.file.name + + def close(self): + try: + return self.file.close() + except FileNotFoundError: + # The file was moved or deleted before the tempfile could unlink + # it. Still sets self.file.close_called and calls + # self.file.file.close() before the exception. + pass + + +class InMemoryUploadedFile(UploadedFile): + """ + A file uploaded into memory (i.e. stream-to-memory). + """ + def __init__(self, file, field_name, name, content_type, size, charset, content_type_extra=None): + super().__init__(file, name, content_type, size, charset, content_type_extra) + self.field_name = field_name + + def open(self, mode=None): + self.file.seek(0) + return self + + def chunks(self, chunk_size=None): + self.file.seek(0) + yield self.read() + + def multiple_chunks(self, chunk_size=None): + # Since it's in memory, we'll never have multiple chunks. + return False + + +class SimpleUploadedFile(InMemoryUploadedFile): + """ + A simple representation of a file, which just has content, size, and a name. + """ + def __init__(self, name, content, content_type='text/plain'): + content = content or b'' + super().__init__(BytesIO(content), None, name, content_type, len(content), None, None) + + @classmethod + def from_dict(cls, file_dict): + """ + Create a SimpleUploadedFile object from a dictionary with keys: + - filename + - content-type + - content + """ + return cls(file_dict['filename'], + file_dict['content'], + file_dict.get('content-type', 'text/plain')) diff --git a/env/lib/python3.5/site-packages/django/core/files/uploadhandler.py b/env/lib/python3.5/site-packages/django/core/files/uploadhandler.py new file mode 100644 index 0000000..ddfb7e0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/uploadhandler.py @@ -0,0 +1,205 @@ +""" +Base file upload handler classes, and the built-in concrete subclasses +""" + +from io import BytesIO + +from django.conf import settings +from django.core.files.uploadedfile import ( + InMemoryUploadedFile, TemporaryUploadedFile, +) +from django.utils.module_loading import import_string + +__all__ = [ + 'UploadFileException', 'StopUpload', 'SkipFile', 'FileUploadHandler', + 'TemporaryFileUploadHandler', 'MemoryFileUploadHandler', 'load_handler', + 'StopFutureHandlers' +] + + +class UploadFileException(Exception): + """ + Any error having to do with uploading files. + """ + pass + + +class StopUpload(UploadFileException): + """ + This exception is raised when an upload must abort. + """ + def __init__(self, connection_reset=False): + """ + If ``connection_reset`` is ``True``, Django knows will halt the upload + without consuming the rest of the upload. This will cause the browser to + show a "connection reset" error. + """ + self.connection_reset = connection_reset + + def __str__(self): + if self.connection_reset: + return 'StopUpload: Halt current upload.' + else: + return 'StopUpload: Consume request data, then halt.' + + +class SkipFile(UploadFileException): + """ + This exception is raised by an upload handler that wants to skip a given file. + """ + pass + + +class StopFutureHandlers(UploadFileException): + """ + Upload handers that have handled a file and do not want future handlers to + run should raise this exception instead of returning None. + """ + pass + + +class FileUploadHandler: + """ + Base class for streaming upload handlers. + """ + chunk_size = 64 * 2 ** 10 # : The default chunk size is 64 KB. + + def __init__(self, request=None): + self.file_name = None + self.content_type = None + self.content_length = None + self.charset = None + self.content_type_extra = None + self.request = request + + def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None): + """ + Handle the raw input from the client. + + Parameters: + + :input_data: + An object that supports reading via .read(). + :META: + ``request.META``. + :content_length: + The (integer) value of the Content-Length header from the + client. + :boundary: The boundary from the Content-Type header. Be sure to + prepend two '--'. + """ + pass + + def new_file(self, field_name, file_name, content_type, content_length, charset=None, content_type_extra=None): + """ + Signal that a new file has been started. + + Warning: As with any data from the client, you should not trust + content_length (and sometimes won't even get it). + """ + self.field_name = field_name + self.file_name = file_name + self.content_type = content_type + self.content_length = content_length + self.charset = charset + self.content_type_extra = content_type_extra + + def receive_data_chunk(self, raw_data, start): + """ + Receive data from the streamed upload parser. ``start`` is the position + in the file of the chunk. + """ + raise NotImplementedError('subclasses of FileUploadHandler must provide a receive_data_chunk() method') + + def file_complete(self, file_size): + """ + Signal that a file has completed. File size corresponds to the actual + size accumulated by all the chunks. + + Subclasses should return a valid ``UploadedFile`` object. + """ + raise NotImplementedError('subclasses of FileUploadHandler must provide a file_complete() method') + + def upload_complete(self): + """ + Signal that the upload is complete. Subclasses should perform cleanup + that is necessary for this handler. + """ + pass + + +class TemporaryFileUploadHandler(FileUploadHandler): + """ + Upload handler that streams data into a temporary file. + """ + def new_file(self, *args, **kwargs): + """ + Create the file object to append to as data is coming in. + """ + super().new_file(*args, **kwargs) + self.file = TemporaryUploadedFile(self.file_name, self.content_type, 0, self.charset, self.content_type_extra) + + def receive_data_chunk(self, raw_data, start): + self.file.write(raw_data) + + def file_complete(self, file_size): + self.file.seek(0) + self.file.size = file_size + return self.file + + +class MemoryFileUploadHandler(FileUploadHandler): + """ + File upload handler to stream uploads into memory (used for small files). + """ + + def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None): + """ + Use the content_length to signal whether or not this handler should be + used. + """ + # Check the content-length header to see if we should + # If the post is too large, we cannot use the Memory handler. + self.activated = content_length <= settings.FILE_UPLOAD_MAX_MEMORY_SIZE + + def new_file(self, *args, **kwargs): + super().new_file(*args, **kwargs) + if self.activated: + self.file = BytesIO() + raise StopFutureHandlers() + + def receive_data_chunk(self, raw_data, start): + """Add the data to the BytesIO file.""" + if self.activated: + self.file.write(raw_data) + else: + return raw_data + + def file_complete(self, file_size): + """Return a file object if this handler is activated.""" + if not self.activated: + return + + self.file.seek(0) + return InMemoryUploadedFile( + file=self.file, + field_name=self.field_name, + name=self.file_name, + content_type=self.content_type, + size=file_size, + charset=self.charset, + content_type_extra=self.content_type_extra + ) + + +def load_handler(path, *args, **kwargs): + """ + Given a path to a handler, return an instance of that handler. + + E.g.:: + >>> from django.http import HttpRequest + >>> request = HttpRequest() + >>> load_handler('django.core.files.uploadhandler.TemporaryFileUploadHandler', request) + + """ + return import_string(path)(*args, **kwargs) diff --git a/env/lib/python3.5/site-packages/django/core/files/utils.py b/env/lib/python3.5/site-packages/django/core/files/utils.py new file mode 100644 index 0000000..de89607 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/files/utils.py @@ -0,0 +1,52 @@ +class FileProxyMixin: + """ + A mixin class used to forward file methods to an underlaying file + object. The internal file object has to be called "file":: + + class FileProxy(FileProxyMixin): + def __init__(self, file): + self.file = file + """ + + encoding = property(lambda self: self.file.encoding) + fileno = property(lambda self: self.file.fileno) + flush = property(lambda self: self.file.flush) + isatty = property(lambda self: self.file.isatty) + newlines = property(lambda self: self.file.newlines) + read = property(lambda self: self.file.read) + readinto = property(lambda self: self.file.readinto) + readline = property(lambda self: self.file.readline) + readlines = property(lambda self: self.file.readlines) + seek = property(lambda self: self.file.seek) + tell = property(lambda self: self.file.tell) + truncate = property(lambda self: self.file.truncate) + write = property(lambda self: self.file.write) + writelines = property(lambda self: self.file.writelines) + + @property + def closed(self): + return not self.file or self.file.closed + + def readable(self): + if self.closed: + return False + if hasattr(self.file, 'readable'): + return self.file.readable() + return True + + def writable(self): + if self.closed: + return False + if hasattr(self.file, 'writable'): + return self.file.writable() + return 'w' in getattr(self.file, 'mode', '') + + def seekable(self): + if self.closed: + return False + if hasattr(self.file, 'seekable'): + return self.file.seekable() + return True + + def __iter__(self): + return iter(self.file) diff --git a/env/lib/python3.5/site-packages/django/core/handlers/__init__.py b/env/lib/python3.5/site-packages/django/core/handlers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66ae15312bfcc33dd6086e0e1e51b40499050c68 GIT binary patch literal 146 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m%V;TZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaj7rWgO4ZLu%uC5hEh^TJkI&4@EQycTE2zB1VUwGm OQks)$2Qs)Ah#3G0X(Ji{ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78bd696c498b1edd143917684730a45e50c66f77 GIT binary patch literal 4982 zcmbtY&vP6{6@D|bzjs!#$hSxv&;_F2Jq=k=#`VBnk-%tej859w@W!)gx&~lR^lg1Xg78$H(QBXnMO^-rvZBkXE^8E^$zs>Jbqdf_)pd9sO?6#wQoaeS(_*K?+g#T^4?4PTv$d`M zQr3RYPsN9R3|Gp{A+M7^H9Y6=+{BYYllF*?iM+C6%q1o%iMXhS=_TU?N)0+TwT4AUJvv4oL%&w&VLYUYYSKZAc0 z-OmkDUE*d~G)Y~%<1);hC`?uA?8;>9%+q6V_x7z@cQzir zdw*llDm&kurpnn7&d`q{5jg&?64Fuo!V&SKP$uzM#L5X_DtvAzk^;Pzg_e|Ht=9Ps!J?$lJ z9=zifNTI;Yn`f!LYuNe1ey zzVD~L;>HjFBbDs3wB}DHA`WDa?JTood0~>?aNiH(el4q{BHCpWI!oQ|>4d$BulC*6 zslaWIAA1-=`SDO>7JT$4l2>5)Uq4(|dx9e~4Na+GzW#19sxwhD{s8z`vOH1IXM#;Rc(meDiL;oUY?%^n_>bS!S`8t3^j zdzIM>3y3o~V|U0d<_|lS9}PeNA5s7yoM*^Y;0AH(167{iF zAbAPP=9enx`9Yn%kb@FZEtfwfqW~d;4zK8B-0D|0-3wj}VE0ur4u^<4joGQ&eRuob z-PCf^~M{sD~r>9{&8Byh=qO)JbLoKLj{vZbd2;lqtO>@$WIx4 zHXtrI8nnbfEMS$0Cxi-u$(BP>b&e30;_LuQBdl=h3|TS)rV~dT*Kxj9>7YvTx1?~m z>MkRkQWzS?YF%5vaffj%(?ACX_P6e9%yazM`B16J{eo#Y$<7FL#o0}AeBKKmiMfW3 zyMfydQv_ig2#}ubtd>_d!`}cWXSKDI@mITDgO$7nH}pG_-IBwVegEFQZSTSTJ2&rb zzAwK4xx0+*OHzL)5?(%hDqmv#H56Hcj{$Cz-)7l57flpyM+!ehUQG5SKq0Fz^7Jje z|9Vu(aByaOOU|VycN+>RBL`U>vkNGA-LL^179gW$)UDaq&hGu3K$Sbr;m1qRJKjae zVE>q0)r|1IDY-lWUsg)PXZs=%h)<_~G!z=3~PV9hD+Fq@s@w6~IIX7t@WZ4n>%%@l;M) zbhJvxE!|sp{k2}h!}!gT1yu~=q)o=`q8<{eI=DbPuvRb|4TDhltX(jha;RSz%$8~e zBSHtcZs2vaL?ZOTiD8vFA8#vqhpipC>_LG3g z6tjdQwU09a_I>5->%%=Qjp0-d1EFV8z~%Zpz!%My`kPt3xS!0LgE>8$ZEl0c@uZRW z18}Jz4B~I9f>Qklco{gi=Nbj+0?SL4@PmQQ^4TY_HK$e2uKE8QqQ5F%K+ekVbD@E$ zj#`E@L+_8glBoSp6-n$r!rh4-c}=yyp3GFU`8;>jCbq5Gu3*4l;z{qIpjr)p+B8~5*KC^Sz_^-L51gQ8RKdj{D6=WuK0?9w6}e}xhcEglOWrVk}c`z~IdyryA++1TZRjUm1H zC{n&be*|8kQ>5HnMcd^kUpiM{Ep%H z$c+3_U!1X=sPj;|>PSCKg%hgNYYzVTATMAg1+|giLOnm$YWIv~OsQ{>7}$w-e{xyZF}y|C=Ny6sx5~ zib3hhR9|!SUC3<~8epy*AUWfm8v>-Ik^w+Nf!ix|rz(t6+y?e?vhl)K#6?E(U4bX2 xZ(Vv{__|hbQgFpP`r0L##_Gj9&ktGS?cCZse9tVLfmA?Z@V965%vG~%{TpaP*4O|5 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/exception.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/exception.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2397fcaef1a7b0b8d2a71c782818313784110d28 GIT binary patch literal 3868 zcma)9TW=f36+W}eyGV(;kg|MTDKOxLCCYWxhXz65o9qNlWFb;uXAxkr;*Q9r_QK2z zEm5%YPz7xtT%bUM{)7U3Z~sJp!oIdIc`s0)4?)kFB`I1J+ESXsxt=-KZw{NaTIFH; z!>|9m0Pr`M`k2^%giZbviI4vbLI7vdXW%eBZ$M~3WP)P?qkSfXIf(M$vgmVzp!Kr8C5`^;*Er7EC z(IPmD*=!lYC5Rf}G_r98!X`w^;4I^K2K*{~hw@(ozXtxS?yrzi{v7yq_zu;%4*op& z3wr4WE$!KhKcMokW3x1WEWEzNPDyg5g1AHdq6|8*7fL&q)_1vx0x5$ee#YZ~`|11_ z{F?!n>Y1m!{Umu3bkfDWf$RtEAQ{M)eJ(tOyVH4G{M?I&&jTL%a*xM~IDev4f9t^( zc9%XMgeutegu*7d*cKuYwvkplT)BeFBz(g~Izyv@2-`_~h=;0S(xJtE5=)Nbyw48? zoi-zN@MB=hVIwEYH6#k)Hvs1hehqMlM!|mrex+y57`!E0nBILnRx5s%Zq&r)wL3|g_ss=q{4sl`q_gAlk;+<{(d)*me1P>21Ft(9C!njL>L`p%b|sL zhZs;K3SAZjz8~^qPjH&yu^dpZ>nVL(oJ?;Bxp#!@raYl#rrlbtn4hTW{pd4tt5jb5 zC=(vf3XVb~+RYUBmN(G=eJmCCd@DJ8?~+z_b{uUKWp!+e6m7piGOSayy&Z?wt9T1? z7=cF>5YK^~8Ng1LKw;eBCIik5z!-e>6@d!?u6}F4>zKi79hPhdbD_LFjPBs#1ejqWg-olVA(_y`{}L!$`NrLB;`8PZWqNh{B9FV`p_&%_Y|9qa29=l zHbuju$;A#R19~Qi4Ny7g<+V5T61w1F3s$K(nO=u!~o}msV^p-(g(=s5AqGG60aimXx zoET#x(|*s$v@6<>V=c4Y?-=F5)n=YjFFqSP?Yb8Guk4oqaTnAL=-q_gEqeASZ?rAX z!C>n4Wv^YB*CfZ0BWh&--ktwtHq&Iv(yp4NXY|~Jst63V3ZvONU5&G77n~=SYh*gS z1p9mT{7&#aLPYR;B&Vy-6LEmZhR?~p3m8XOq_@=m(7G!HMY5Pjl9n*n+#o(og5S~E z))R!FQF2@NzKr$rgV@-o_j0mukoZH*=yV}V~nEixGPBjXC{!Cs5Hg>{j`vE?GMsQAPES)xXneGgfvOW{Il&RU%n8t*ms(W zx4SXnxr>kbB-_&_0nY?DCi7y3xKxSciPVs!xxS~msVRq2tk5K7t|$^I5Gf&Xnr`HY zBe$PO!u~wjlGCtFQ4r(`y^0;AS7*c5~@UWwR53Onj`b2D;Yq#gShPtI^8LCotogDOk%g+6`tg2 z5oPlfUR)a25aJfHw{zO*f?f|D1J2yoaW1Ka5)&k5gaA>{TVrFByGVe|u`+8ItHvC= z%}iEh1^laLSJaS*Ia`FU^lMneoXYK_v;dbY$IZ6Pm; z`$X1>Y!F!^LV;$NMoBkfAjAz?dO(CO$lP^+6+>FVnDZjn585ir)=Q4DaC?AFQc?gK zw!!YO8e3tv3}N9+n-YgUWM1lPv%bI%z9l_Gkt!g(Q6Jx@yPyzh@u|?ZeupJ0A#t7z zjDSOiN88}CwjP=hjlE|Zr;)Brc16%H2}&T63G9|%x(K_h~5T_b|K`^C%M$1fi5Z@b&CpKkB& zfBJG~PnQZBD+EQZ_z4m_p9TIyn$Ri#Q|fIIxnx-K7@7qnVFu*O%)}V3n+>LYY2Oqd z;IwvWT0TVeRFZ^Jmln><2n?}^ILySnm=RouhSQwv5xg}CFPVXpMjwqs8iK~ByZ8e} zqoH$Sbed*b5&f9KFi{$wghsK64EXy+USOY79~~U1Ae1f4bq$10bu|4Z;Kwqv8I?6U yF?ASa0eoR1-P5H~>7yv|2O<9$y#kV=w~7g0H|kiOt>uU|vDMA$a`n;N%)bHHgto;1 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/wsgi.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/handlers/__pycache__/wsgi.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70dd8cfb5c0fa0671f86ed3e7d888f6840f736c7 GIT binary patch literal 7099 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/handlers/base.py b/env/lib/python3.5/site-packages/django/core/handlers/base.py new file mode 100644 index 0000000..edc166f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/handlers/base.py @@ -0,0 +1,169 @@ +import logging +import types + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured, MiddlewareNotUsed +from django.db import connections, transaction +from django.urls import get_resolver, set_urlconf +from django.utils.log import log_response +from django.utils.module_loading import import_string + +from .exception import convert_exception_to_response, get_exception_response + +logger = logging.getLogger('django.request') + + +class BaseHandler: + _view_middleware = None + _template_response_middleware = None + _exception_middleware = None + _middleware_chain = None + + def load_middleware(self): + """ + Populate middleware lists from settings.MIDDLEWARE. + + Must be called after the environment is fixed (see __call__ in subclasses). + """ + self._view_middleware = [] + self._template_response_middleware = [] + self._exception_middleware = [] + + handler = convert_exception_to_response(self._get_response) + for middleware_path in reversed(settings.MIDDLEWARE): + middleware = import_string(middleware_path) + try: + mw_instance = middleware(handler) + except MiddlewareNotUsed as exc: + if settings.DEBUG: + if str(exc): + logger.debug('MiddlewareNotUsed(%r): %s', middleware_path, exc) + else: + logger.debug('MiddlewareNotUsed: %r', middleware_path) + continue + + if mw_instance is None: + raise ImproperlyConfigured( + 'Middleware factory %s returned None.' % middleware_path + ) + + if hasattr(mw_instance, 'process_view'): + self._view_middleware.insert(0, mw_instance.process_view) + if hasattr(mw_instance, 'process_template_response'): + self._template_response_middleware.append(mw_instance.process_template_response) + if hasattr(mw_instance, 'process_exception'): + self._exception_middleware.append(mw_instance.process_exception) + + handler = convert_exception_to_response(mw_instance) + + # We only assign to this when initialization is complete as it is used + # as a flag for initialization being complete. + self._middleware_chain = handler + + def make_view_atomic(self, view): + non_atomic_requests = getattr(view, '_non_atomic_requests', set()) + for db in connections.all(): + if db.settings_dict['ATOMIC_REQUESTS'] and db.alias not in non_atomic_requests: + view = transaction.atomic(using=db.alias)(view) + return view + + def get_exception_response(self, request, resolver, status_code, exception): + return get_exception_response(request, resolver, status_code, exception, self.__class__) + + def get_response(self, request): + """Return an HttpResponse object for the given HttpRequest.""" + # Setup default url resolver for this thread + set_urlconf(settings.ROOT_URLCONF) + + response = self._middleware_chain(request) + + response._closable_objects.append(request) + + # If the exception handler returns a TemplateResponse that has not + # been rendered, force it to be rendered. + if not getattr(response, 'is_rendered', True) and callable(getattr(response, 'render', None)): + response = response.render() + + if response.status_code >= 400: + log_response( + '%s: %s', response.reason_phrase, request.path, + response=response, + request=request, + ) + + return response + + def _get_response(self, request): + """ + Resolve and call the view, then apply view, exception, and + template_response middleware. This method is everything that happens + inside the request/response middleware. + """ + response = None + + if hasattr(request, 'urlconf'): + urlconf = request.urlconf + set_urlconf(urlconf) + resolver = get_resolver(urlconf) + else: + resolver = get_resolver() + + resolver_match = resolver.resolve(request.path_info) + callback, callback_args, callback_kwargs = resolver_match + request.resolver_match = resolver_match + + # Apply view middleware + for middleware_method in self._view_middleware: + response = middleware_method(request, callback, callback_args, callback_kwargs) + if response: + break + + if response is None: + wrapped_callback = self.make_view_atomic(callback) + try: + response = wrapped_callback(request, *callback_args, **callback_kwargs) + except Exception as e: + response = self.process_exception_by_middleware(e, request) + + # Complain if the view returned None (a common error). + if response is None: + if isinstance(callback, types.FunctionType): # FBV + view_name = callback.__name__ + else: # CBV + view_name = callback.__class__.__name__ + '.__call__' + + raise ValueError( + "The view %s.%s didn't return an HttpResponse object. It " + "returned None instead." % (callback.__module__, view_name) + ) + + # If the response supports deferred rendering, apply template + # response middleware and then render the response + elif hasattr(response, 'render') and callable(response.render): + for middleware_method in self._template_response_middleware: + response = middleware_method(request, response) + # Complain if the template response middleware returned None (a common error). + if response is None: + raise ValueError( + "%s.process_template_response didn't return an " + "HttpResponse object. It returned None instead." + % (middleware_method.__self__.__class__.__name__) + ) + + try: + response = response.render() + except Exception as e: + response = self.process_exception_by_middleware(e, request) + + return response + + def process_exception_by_middleware(self, exception, request): + """ + Pass the exception to the exception middleware. If no middleware + return a response for this exception, raise it. + """ + for middleware_method in self._exception_middleware: + response = middleware_method(request, exception) + if response: + return response + raise diff --git a/env/lib/python3.5/site-packages/django/core/handlers/exception.py b/env/lib/python3.5/site-packages/django/core/handlers/exception.py new file mode 100644 index 0000000..3fe6e4d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/handlers/exception.py @@ -0,0 +1,129 @@ +import logging +import sys +from functools import wraps + +from django.conf import settings +from django.core import signals +from django.core.exceptions import ( + PermissionDenied, RequestDataTooBig, SuspiciousOperation, + TooManyFieldsSent, +) +from django.http import Http404 +from django.http.multipartparser import MultiPartParserError +from django.urls import get_resolver, get_urlconf +from django.utils.log import log_response +from django.views import debug + + +def convert_exception_to_response(get_response): + """ + Wrap the given get_response callable in exception-to-response conversion. + + All exceptions will be converted. All known 4xx exceptions (Http404, + PermissionDenied, MultiPartParserError, SuspiciousOperation) will be + converted to the appropriate response, and all other exceptions will be + converted to 500 responses. + + This decorator is automatically applied to all middleware to ensure that + no middleware leaks an exception and that the next middleware in the stack + can rely on getting a response instead of an exception. + """ + @wraps(get_response) + def inner(request): + try: + response = get_response(request) + except Exception as exc: + response = response_for_exception(request, exc) + return response + return inner + + +def response_for_exception(request, exc): + if isinstance(exc, Http404): + if settings.DEBUG: + response = debug.technical_404_response(request, exc) + else: + response = get_exception_response(request, get_resolver(get_urlconf()), 404, exc) + + elif isinstance(exc, PermissionDenied): + response = get_exception_response(request, get_resolver(get_urlconf()), 403, exc) + log_response( + 'Forbidden (Permission denied): %s', request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + + elif isinstance(exc, MultiPartParserError): + response = get_exception_response(request, get_resolver(get_urlconf()), 400, exc) + log_response( + 'Bad request (Unable to parse request body): %s', request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + + elif isinstance(exc, SuspiciousOperation): + if isinstance(exc, (RequestDataTooBig, TooManyFieldsSent)): + # POST data can't be accessed again, otherwise the original + # exception would be raised. + request._mark_post_parse_error() + + # The request logger receives events for any problematic request + # The security logger receives events for all SuspiciousOperations + security_logger = logging.getLogger('django.security.%s' % exc.__class__.__name__) + security_logger.error( + str(exc), + extra={'status_code': 400, 'request': request}, + ) + if settings.DEBUG: + response = debug.technical_500_response(request, *sys.exc_info(), status_code=400) + else: + response = get_exception_response(request, get_resolver(get_urlconf()), 400, exc) + + elif isinstance(exc, SystemExit): + # Allow sys.exit() to actually exit. See tickets #1023 and #4701 + raise + + else: + signals.got_request_exception.send(sender=None, request=request) + response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) + log_response( + '%s: %s', response.reason_phrase, request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) + + # Force a TemplateResponse to be rendered. + if not getattr(response, 'is_rendered', True) and callable(getattr(response, 'render', None)): + response = response.render() + + return response + + +def get_exception_response(request, resolver, status_code, exception, sender=None): + try: + callback, param_dict = resolver.resolve_error_handler(status_code) + response = callback(request, **{**param_dict, 'exception': exception}) + except Exception: + signals.got_request_exception.send(sender=sender, request=request) + response = handle_uncaught_exception(request, resolver, sys.exc_info()) + + return response + + +def handle_uncaught_exception(request, resolver, exc_info): + """ + Processing for any otherwise uncaught exceptions (those that will + generate HTTP 500 responses). + """ + if settings.DEBUG_PROPAGATE_EXCEPTIONS: + raise + + if settings.DEBUG: + return debug.technical_500_response(request, *exc_info) + + # Return an HttpResponse that displays a friendly error message. + callback, param_dict = resolver.resolve_error_handler(500) + return callback(request, **param_dict) diff --git a/env/lib/python3.5/site-packages/django/core/handlers/wsgi.py b/env/lib/python3.5/site-packages/django/core/handlers/wsgi.py new file mode 100644 index 0000000..35fbd0f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/handlers/wsgi.py @@ -0,0 +1,214 @@ +import cgi +import codecs +import re +from io import BytesIO + +from django.conf import settings +from django.core import signals +from django.core.handlers import base +from django.http import HttpRequest, QueryDict, parse_cookie +from django.urls import set_script_prefix +from django.utils.encoding import repercent_broken_unicode +from django.utils.functional import cached_property + +_slashes_re = re.compile(br'/+') + + +class LimitedStream: + """Wrap another stream to disallow reading it past a number of bytes.""" + def __init__(self, stream, limit, buf_size=64 * 1024 * 1024): + self.stream = stream + self.remaining = limit + self.buffer = b'' + self.buf_size = buf_size + + def _read_limited(self, size=None): + if size is None or size > self.remaining: + size = self.remaining + if size == 0: + return b'' + result = self.stream.read(size) + self.remaining -= len(result) + return result + + def read(self, size=None): + if size is None: + result = self.buffer + self._read_limited() + self.buffer = b'' + elif size < len(self.buffer): + result = self.buffer[:size] + self.buffer = self.buffer[size:] + else: # size >= len(self.buffer) + result = self.buffer + self._read_limited(size - len(self.buffer)) + self.buffer = b'' + return result + + def readline(self, size=None): + while b'\n' not in self.buffer and \ + (size is None or len(self.buffer) < size): + if size: + # since size is not None here, len(self.buffer) < size + chunk = self._read_limited(size - len(self.buffer)) + else: + chunk = self._read_limited() + if not chunk: + break + self.buffer += chunk + sio = BytesIO(self.buffer) + if size: + line = sio.readline(size) + else: + line = sio.readline() + self.buffer = sio.read() + return line + + +class WSGIRequest(HttpRequest): + def __init__(self, environ): + script_name = get_script_name(environ) + # If PATH_INFO is empty (e.g. accessing the SCRIPT_NAME URL without a + # trailing slash), operate as if '/' was requested. + path_info = get_path_info(environ) or '/' + self.environ = environ + self.path_info = path_info + # be careful to only replace the first slash in the path because of + # http://test/something and http://test//something being different as + # stated in https://www.ietf.org/rfc/rfc2396.txt + self.path = '%s/%s' % (script_name.rstrip('/'), + path_info.replace('/', '', 1)) + self.META = environ + self.META['PATH_INFO'] = path_info + self.META['SCRIPT_NAME'] = script_name + self.method = environ['REQUEST_METHOD'].upper() + self.content_type, self.content_params = cgi.parse_header(environ.get('CONTENT_TYPE', '')) + if 'charset' in self.content_params: + try: + codecs.lookup(self.content_params['charset']) + except LookupError: + pass + else: + self.encoding = self.content_params['charset'] + self._post_parse_error = False + try: + content_length = int(environ.get('CONTENT_LENGTH')) + except (ValueError, TypeError): + content_length = 0 + self._stream = LimitedStream(self.environ['wsgi.input'], content_length) + self._read_started = False + self.resolver_match = None + + def _get_scheme(self): + return self.environ.get('wsgi.url_scheme') + + @cached_property + def GET(self): + # The WSGI spec says 'QUERY_STRING' may be absent. + raw_query_string = get_bytes_from_wsgi(self.environ, 'QUERY_STRING', '') + return QueryDict(raw_query_string, encoding=self._encoding) + + def _get_post(self): + if not hasattr(self, '_post'): + self._load_post_and_files() + return self._post + + def _set_post(self, post): + self._post = post + + @cached_property + def COOKIES(self): + raw_cookie = get_str_from_wsgi(self.environ, 'HTTP_COOKIE', '') + return parse_cookie(raw_cookie) + + @property + def FILES(self): + if not hasattr(self, '_files'): + self._load_post_and_files() + return self._files + + POST = property(_get_post, _set_post) + + +class WSGIHandler(base.BaseHandler): + request_class = WSGIRequest + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.load_middleware() + + def __call__(self, environ, start_response): + set_script_prefix(get_script_name(environ)) + signals.request_started.send(sender=self.__class__, environ=environ) + request = self.request_class(environ) + response = self.get_response(request) + + response._handler_class = self.__class__ + + status = '%d %s' % (response.status_code, response.reason_phrase) + response_headers = list(response.items()) + for c in response.cookies.values(): + response_headers.append(('Set-Cookie', c.output(header=''))) + start_response(status, response_headers) + if getattr(response, 'file_to_stream', None) is not None and environ.get('wsgi.file_wrapper'): + response = environ['wsgi.file_wrapper'](response.file_to_stream) + return response + + +def get_path_info(environ): + """Return the HTTP request's PATH_INFO as a string.""" + path_info = get_bytes_from_wsgi(environ, 'PATH_INFO', '/') + + return repercent_broken_unicode(path_info).decode() + + +def get_script_name(environ): + """ + Return the equivalent of the HTTP request's SCRIPT_NAME environment + variable. If Apache mod_rewrite is used, return what would have been + the script name prior to any rewriting (so it's the script name as seen + from the client's perspective), unless the FORCE_SCRIPT_NAME setting is + set (to anything). + """ + if settings.FORCE_SCRIPT_NAME is not None: + return settings.FORCE_SCRIPT_NAME + + # If Apache's mod_rewrite had a whack at the URL, Apache set either + # SCRIPT_URL or REDIRECT_URL to the full resource URL before applying any + # rewrites. Unfortunately not every Web server (lighttpd!) passes this + # information through all the time, so FORCE_SCRIPT_NAME, above, is still + # needed. + script_url = get_bytes_from_wsgi(environ, 'SCRIPT_URL', '') or get_bytes_from_wsgi(environ, 'REDIRECT_URL', '') + + if script_url: + if b'//' in script_url: + # mod_wsgi squashes multiple successive slashes in PATH_INFO, + # do the same with script_url before manipulating paths (#17133). + script_url = _slashes_re.sub(b'/', script_url) + path_info = get_bytes_from_wsgi(environ, 'PATH_INFO', '') + script_name = script_url[:-len(path_info)] if path_info else script_url + else: + script_name = get_bytes_from_wsgi(environ, 'SCRIPT_NAME', '') + + return script_name.decode() + + +def get_bytes_from_wsgi(environ, key, default): + """ + Get a value from the WSGI environ dictionary as bytes. + + key and default should be strings. + """ + value = environ.get(key, default) + # Non-ASCII values in the WSGI environ are arbitrarily decoded with + # ISO-8859-1. This is wrong for Django websites where UTF-8 is the default. + # Re-encode to recover the original bytestring. + return value.encode('iso-8859-1') + + +def get_str_from_wsgi(environ, key, default): + """ + Get a value from the WSGI environ dictionary as str. + + key and default should be str objects. + """ + value = get_bytes_from_wsgi(environ, key, default) + return value.decode(errors='replace') diff --git a/env/lib/python3.5/site-packages/django/core/mail/__init__.py b/env/lib/python3.5/site-packages/django/core/mail/__init__.py new file mode 100644 index 0000000..05c8c6a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/mail/__init__.py @@ -0,0 +1,116 @@ +""" +Tools for sending email. +""" +from django.conf import settings +# Imported for backwards compatibility and for the sake +# of a cleaner namespace. These symbols used to be in +# django/core/mail.py before the introduction of email +# backends and the subsequent reorganization (See #10355) +from django.core.mail.message import ( + DEFAULT_ATTACHMENT_MIME_TYPE, BadHeaderError, EmailMessage, + EmailMultiAlternatives, SafeMIMEMultipart, SafeMIMEText, + forbid_multi_line_headers, make_msgid, +) +from django.core.mail.utils import DNS_NAME, CachedDnsName +from django.utils.module_loading import import_string + +__all__ = [ + 'CachedDnsName', 'DNS_NAME', 'EmailMessage', 'EmailMultiAlternatives', + 'SafeMIMEText', 'SafeMIMEMultipart', 'DEFAULT_ATTACHMENT_MIME_TYPE', + 'make_msgid', 'BadHeaderError', 'forbid_multi_line_headers', + 'get_connection', 'send_mail', 'send_mass_mail', 'mail_admins', + 'mail_managers', +] + + +def get_connection(backend=None, fail_silently=False, **kwds): + """Load an email backend and return an instance of it. + + If backend is None (default), use settings.EMAIL_BACKEND. + + Both fail_silently and other keyword arguments are used in the + constructor of the backend. + """ + klass = import_string(backend or settings.EMAIL_BACKEND) + return klass(fail_silently=fail_silently, **kwds) + + +def send_mail(subject, message, from_email, recipient_list, + fail_silently=False, auth_user=None, auth_password=None, + connection=None, html_message=None): + """ + Easy wrapper for sending a single message to a recipient list. All members + of the recipient list will see the other recipients in the 'To' field. + + If auth_user is None, use the EMAIL_HOST_USER setting. + If auth_password is None, use the EMAIL_HOST_PASSWORD setting. + + Note: The API for this method is frozen. New code wanting to extend the + functionality should use the EmailMessage class directly. + """ + connection = connection or get_connection( + username=auth_user, + password=auth_password, + fail_silently=fail_silently, + ) + mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection) + if html_message: + mail.attach_alternative(html_message, 'text/html') + + return mail.send() + + +def send_mass_mail(datatuple, fail_silently=False, auth_user=None, + auth_password=None, connection=None): + """ + Given a datatuple of (subject, message, from_email, recipient_list), send + each message to each recipient list. Return the number of emails sent. + + If from_email is None, use the DEFAULT_FROM_EMAIL setting. + If auth_user and auth_password are set, use them to log in. + If auth_user is None, use the EMAIL_HOST_USER setting. + If auth_password is None, use the EMAIL_HOST_PASSWORD setting. + + Note: The API for this method is frozen. New code wanting to extend the + functionality should use the EmailMessage class directly. + """ + connection = connection or get_connection( + username=auth_user, + password=auth_password, + fail_silently=fail_silently, + ) + messages = [ + EmailMessage(subject, message, sender, recipient, connection=connection) + for subject, message, sender, recipient in datatuple + ] + return connection.send_messages(messages) + + +def mail_admins(subject, message, fail_silently=False, connection=None, + html_message=None): + """Send a message to the admins, as defined by the ADMINS setting.""" + if not settings.ADMINS: + return + mail = EmailMultiAlternatives( + '%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message, + settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS], + connection=connection, + ) + if html_message: + mail.attach_alternative(html_message, 'text/html') + mail.send(fail_silently=fail_silently) + + +def mail_managers(subject, message, fail_silently=False, connection=None, + html_message=None): + """Send a message to the managers, as defined by the MANAGERS setting.""" + if not settings.MANAGERS: + return + mail = EmailMultiAlternatives( + '%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message, + settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS], + connection=connection, + ) + if html_message: + mail.attach_alternative(html_message, 'text/html') + mail.send(fail_silently=fail_silently) diff --git a/env/lib/python3.5/site-packages/django/core/mail/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..321950918c6b7a8303e5bf791f62c07bc41ce64f GIT binary patch literal 4200 zcmd^CTXWmE6+V=xt1a1avQC`1yVz~hgdIoj>`SL}*rz=Qpd@>e=}bGF=|d^=m;iwT;GFOK0IoI~_0NZo z-(B7S_$OSsmhk!Kc&l{_fCIQ_E#L(REr<%>7Qmu%5yB!wHn=uKC2&g+mBB4TQ~|dF zQ5D=OL^W`05Y@r0L$mJk@n>q`Aya(-C^*SIxK?$K~msk`@`_0zlcL6U@ujS|U}h* zszjP%y>hDA`gZ4e`|YcN*B%VoTQ9qv-oWebbUWVQt2dpj`ON1ph0lfTNSVlNu|uA^ zLMeY=WUHn$3Dck*rb5Pk8vH@1>_*=o33AeRfO`?W_rf3+ z-hm!PW%bBE5?-YC1MU>E>UOX1_1fJ|*4Xlg2ZC?Ms^>=n7tsi!aUxSsr4pAS7jbEF zflP@^nM{>Tg-nr5os3PUh9+z7i_{w?aV&;uki=PyqUF*0vS$9MlqoMzt>^P7h*j3m zg~*RF1XA^$4-4pxE^jTVHm1+j;kANqWFWv^EulB2L2-Jt)=+$&SRyaUyXVa(@!x zONCE@d~%!%!zOwL7(mRxWSAn{aAsINol#4_&l=bKJ4M;R$ViHr+qgC-$IdGG(&bHj zo!LjnTxF%B&{yhfkhih!+n;Tw(Rgzlj34byf{;Io551rA&yUhge(1;h$@Jeakz$kb zwCQ<49HgGt8lT7}dbo?XqAWr6BWp-Npo^eEK-t1uy+dSY*h?(uDa4hhZ=dFc~ZiRN7+gFvJGY9s*Ij%QJAj89NTJnG!;0 z$0T>wLgmS14+hBtHVQ<@=h*Tm>4AqCmn=t@!4xIgr0(VG{=j?N@9a)-W|EGu)LqAz zIgO!z)%{Jo-~ZL?-R-#xy_8;(ipOk#L$%-R=+LAG=q3{BL4pWGfs@Iph+C{Dj@dBb zf*t!YsTxHJMTQtO1?gxKYmWP2ke)DgkW50Z*`ZfLILRfA4GCgNp|bF zsL0cD?KWpQLWM+*X-?E;DajhwLM-ngYO_Te-^;yaHmywa#+WN1@c- z1V(wNd*)?)XX^$sF8yZrFTal+LvN|91ee6%S%;&qWyPhV(9J{$H&(fp? z^;)L1jG`>hxD?TJ!(<t5%-huT_ixQ2}%{7iurT<=l-ttVkJ^h5O&AEwQnf|d!lVVWA5 zS5Dcj%?P1aEg8C$pOVoWujcetdKS|eX>Jpxzrb73P6y4L+r=fT{ywv}sGUTEn;h~} z;ZYX(nQCfN6$T6$U4T_&IF&JadYikP_8@vA*DdGltZmr1RVF@HPpB(@*rN z&&=;b+0?nYvI*$aITdrzDVy1w9pRSQI{R;*{i3rq@ZRipp6~n`56GR}Uv_qloXB;W z$M?`U@ zMCL!vIwkvnCivm3JGZln=ka9ddG3NaD7WzBGBV)2GpmuJMJsFNq%>bm#HuUbR23># z$&di+Zz^~7Jr9#K2$lI9qYpFpUfx32x1xkkLg9t@)kB|d^g%!q^uy5e%+ZMsDU#Go z5}+k5>k86maL=kwjIXCfY@vwCi1O0o(yFywT(oNVLu;=zYSzl_vbC~Sww9V@>pSN2 B4BG$z literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/mail/__pycache__/message.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/__pycache__/message.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82f1275c3f37ce4775af94c3db7542e5d870fd0a GIT binary patch literal 15856 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 Gp8f;e`k?jz literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/mail/backends/__init__.py b/env/lib/python3.5/site-packages/django/core/mail/backends/__init__.py new file mode 100644 index 0000000..5973b49 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/mail/backends/__init__.py @@ -0,0 +1 @@ +# Mail backends shipped with Django. diff --git a/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d0581339a727a66a263128037dc6d597385689b GIT binary patch literal 151 zcmWgR<>fL;wu(_@U|@I*#Bjg}WH|tFF$<7LVPFW>Wb|9fPy`Z25WigXOL7bJ3o;9I zlS(slQgrjO;w@8*vP<++vJ&&s^I=qSeo?A^ZenJReo|s`c4}Tqv3`7fW?p7Ve7s&k VBT_I007*KB>(^b literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0442d4f0be44fc35e643491765833cd4bd93e615 GIT binary patch literal 2411 zcmai0QEMAV5Z=?tvaCq9Lz+Na+Aj1VIYJ~zN};Bd5aX6m;uaKWYXZyac4VJ@w|Cv$ zi!I@&IDe*pNw57Eed^4fbe3c%Ik>$!-OTK_GvCbUL9f?&8t=WiY%%sPTe?D&pW|)6 z!bLH5#Mmz?V5-61<9mZ$HP{iphHMx$r=P!&7C2-wN%=^|XP_02Q)z8KM(g^jeM;wZYKwQAl3VpK7xA_}XM@gQ*tnc7(zvQ*AG|nA&2h<7NEu4pUt(x0&iOwe4k8 z*g;&ovt7bRNSKv%nPk_n+g&Jd2b=l7Ge9_Helj*d=4alVlhLhfy%=jWOcFCMiZR zokZcRX(1gOGMlx|&ZRlF|1h(Gum3$CxU3iyN%3S6sg-Q>l;h#UsuQ z3@DF-IlU|j7W&0x))pesi4)>3A@VSTijd2R?=Q4sB!Iu@N%ub9wuuXpa2Pe@V{}o+ z;5W=1Wq>c1LfyVtSE;L`GZTyJ#SVR$m;2|3pQ3h9WDmp1tLQRfUs6Im2#5?2*N zD6p(zz%vn>Q>X#lj3p^!EtD3wK0m=YP!$m~DdD!yhX919_OMoDi`eI5k9zp(_3w3T zsI(iDV>77Z4@&VAAJYcPkN$5CKHq>z`Z1^X$RH7Tv1 z5y3n!?@sTpH>5ske2SCPFZWYy8@Kc0qX0HyGJIGgXiOj6K;TtYAlyOyeX{uum&rEO z_bFpnSTBF*Z&=d>?5xAgfCWK7pKuu9r+19~r33aS{^Hv}XxeB!+d8<2p`adQw($J} zf!Y!Rdj%LF9@D;ETv!kW+d(hr1npq@#SPT8K}@wv7d`8O-o}?}*lLa`s4z5rvSw|# zh=rRJFxw*OtxQW49TpEz#jYn48x34gqj`qDKh|g}t-51U>go0o-9^FqUUL<&cYdA@ zqi~wld>Yd1%r$UiZiZct`!4pX8Y#RQ1vm&$$$%@3_MF#cHUfiXUd^%E*}nwUw{jiENLH){0v4s-W%F)KkG7?Yc*;iG%B?f(wc!*D&Cy_G8d zz7FZe^y_sv{T0>2s6#zp%M65=b%e-rRi-3&h4{Oa>HN#45Gs#_Fq`PxbI~W?5V_3` zEi^EeV9`7>RJMj#L~OFeqHebp?1bHW-DbDl4gI%6JmdX^;%y#g?H?;tKanfXl~(va DSb%Lk literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/console.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/console.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36e8773a02c3612a0d0b22919760922e0dda7d2e GIT binary patch literal 1682 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 Nxngm5yD0Ei{s)B&Jf;8u literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/locmem.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/locmem.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5944155c0aa73ac1f2268025147b0eaa72100b80 GIT binary patch literal 1277 zcmY*YO>Yx15FPJsHfd;R)C!O|z+N~k&_t?`5D4*6K-_wuNJuM?j=A00$N< z;`@Pq#I=Nmh;Vm5^y~H2?9;#P0Na})kW@1mtbnbw43bKv#c+;WORdwg(7m=j^JygK z{V2D93aHN&kboOe0UMy_X4P8y7s#~0=MQS*& zn>7})%pw7bU!QOT;{#WscK@iP3+o718j?Ju<5N;<$Ft*F`=X8 zVJ9};V%M+G;HA$UIN2dK-hF)t=PsPNFt!{q!(i;d*t%v67}AA*$x}RV)Pc{q+7I37 zgO4&n1!EIjJ_b`-iB^?Vq{juB(5st^$ScxnUrZ+WK0;5eVNBgx=8D#GJ>+p&6-IS& zM|CdEO$zMLtK!S(JLuBuXu$DVhqYOk-DK0d*EqR$0RI)#vJkmME!&*uWm07{U+4U& z64_#>$$3)7oLkD(7UsXg5i&&;6~R%&FI~V&vflF9X2bgSLSGTM=*C>%9tmr&AKhE= k^hoO7Qfi!NsYouH9Vf-AJFVUKmY&$ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/smtp.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/mail/backends/__pycache__/smtp.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4d054fb91eeccba7091e4c59fc51f8bafe21067 GIT binary patch literal 4307 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 RFC5322_EMAIL_LINE_LENGTH_LIMIT + for l in payload.splitlines() + ) + # Quoted-Printable encoding has the side effect of shortening long + # lines, if any (#22561). + charset = utf8_charset_qp if has_long_lines else utf8_charset + MIMEText.set_payload(self, payload, charset=charset) + + +class SafeMIMEMultipart(MIMEMixin, MIMEMultipart): + + def __init__(self, _subtype='mixed', boundary=None, _subparts=None, encoding=None, **_params): + self.encoding = encoding + MIMEMultipart.__init__(self, _subtype, boundary, _subparts, **_params) + + def __setitem__(self, name, val): + name, val = forbid_multi_line_headers(name, val, self.encoding) + MIMEMultipart.__setitem__(self, name, val) + + +class EmailMessage: + """A container for email information.""" + content_subtype = 'plain' + mixed_subtype = 'mixed' + encoding = None # None => use settings default + + def __init__(self, subject='', body='', from_email=None, to=None, bcc=None, + connection=None, attachments=None, headers=None, cc=None, + reply_to=None): + """ + Initialize a single email message (which can be sent to multiple + recipients). + """ + if to: + if isinstance(to, str): + raise TypeError('"to" argument must be a list or tuple') + self.to = list(to) + else: + self.to = [] + if cc: + if isinstance(cc, str): + raise TypeError('"cc" argument must be a list or tuple') + self.cc = list(cc) + else: + self.cc = [] + if bcc: + if isinstance(bcc, str): + raise TypeError('"bcc" argument must be a list or tuple') + self.bcc = list(bcc) + else: + self.bcc = [] + if reply_to: + if isinstance(reply_to, str): + raise TypeError('"reply_to" argument must be a list or tuple') + self.reply_to = list(reply_to) + else: + self.reply_to = [] + self.from_email = from_email or settings.DEFAULT_FROM_EMAIL + self.subject = subject + self.body = body or '' + self.attachments = [] + if attachments: + for attachment in attachments: + if isinstance(attachment, MIMEBase): + self.attach(attachment) + else: + self.attach(*attachment) + self.extra_headers = headers or {} + self.connection = connection + + def get_connection(self, fail_silently=False): + from django.core.mail import get_connection + if not self.connection: + self.connection = get_connection(fail_silently=fail_silently) + return self.connection + + def message(self): + encoding = self.encoding or settings.DEFAULT_CHARSET + msg = SafeMIMEText(self.body, self.content_subtype, encoding) + msg = self._create_message(msg) + msg['Subject'] = self.subject + msg['From'] = self.extra_headers.get('From', self.from_email) + self._set_list_header_if_not_empty(msg, 'To', self.to) + self._set_list_header_if_not_empty(msg, 'Cc', self.cc) + self._set_list_header_if_not_empty(msg, 'Reply-To', self.reply_to) + + # Email header names are case-insensitive (RFC 2045), so we have to + # accommodate that when doing comparisons. + header_names = [key.lower() for key in self.extra_headers] + if 'date' not in header_names: + # formatdate() uses stdlib methods to format the date, which use + # the stdlib/OS concept of a timezone, however, Django sets the + # TZ environment variable based on the TIME_ZONE setting which + # will get picked up by formatdate(). + msg['Date'] = formatdate(localtime=settings.EMAIL_USE_LOCALTIME) + if 'message-id' not in header_names: + # Use cached DNS_NAME for performance + msg['Message-ID'] = make_msgid(domain=DNS_NAME) + for name, value in self.extra_headers.items(): + if name.lower() != 'from': # From is already handled + msg[name] = value + return msg + + def recipients(self): + """ + Return a list of all recipients of the email (includes direct + addressees as well as Cc and Bcc entries). + """ + return [email for email in (self.to + self.cc + self.bcc) if email] + + def send(self, fail_silently=False): + """Send the email message.""" + if not self.recipients(): + # Don't bother creating the network connection if there's nobody to + # send to. + return 0 + return self.get_connection(fail_silently).send_messages([self]) + + def attach(self, filename=None, content=None, mimetype=None): + """ + Attach a file with the given filename and content. The filename can + be omitted and the mimetype is guessed, if not provided. + + If the first parameter is a MIMEBase subclass, insert it directly + into the resulting message attachments. + + For a text/* mimetype (guessed or specified), when a bytes object is + specified as content, decode it as UTF-8. If that fails, set the + mimetype to DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content. + """ + if isinstance(filename, MIMEBase): + assert content is None + assert mimetype is None + self.attachments.append(filename) + else: + assert content is not None + mimetype = mimetype or mimetypes.guess_type(filename)[0] or DEFAULT_ATTACHMENT_MIME_TYPE + basetype, subtype = mimetype.split('/', 1) + + if basetype == 'text': + if isinstance(content, bytes): + try: + content = content.decode() + except UnicodeDecodeError: + # If mimetype suggests the file is text but it's + # actually binary, read() raises a UnicodeDecodeError. + mimetype = DEFAULT_ATTACHMENT_MIME_TYPE + + self.attachments.append((filename, content, mimetype)) + + def attach_file(self, path, mimetype=None): + """ + Attach a file from the filesystem. + + Set the mimetype to DEFAULT_ATTACHMENT_MIME_TYPE if it isn't specified + and cannot be guessed. + + For a text/* mimetype (guessed or specified), decode the file's content + as UTF-8. If that fails, set the mimetype to + DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content. + """ + path = Path(path) + with path.open('rb') as file: + content = file.read() + self.attach(path.name, content, mimetype) + + def _create_message(self, msg): + return self._create_attachments(msg) + + def _create_attachments(self, msg): + if self.attachments: + encoding = self.encoding or settings.DEFAULT_CHARSET + body_msg = msg + msg = SafeMIMEMultipart(_subtype=self.mixed_subtype, encoding=encoding) + if self.body or body_msg.is_multipart(): + msg.attach(body_msg) + for attachment in self.attachments: + if isinstance(attachment, MIMEBase): + msg.attach(attachment) + else: + msg.attach(self._create_attachment(*attachment)) + return msg + + def _create_mime_attachment(self, content, mimetype): + """ + Convert the content, mimetype pair into a MIME attachment object. + + If the mimetype is message/rfc822, content may be an + email.Message or EmailMessage object, as well as a str. + """ + basetype, subtype = mimetype.split('/', 1) + if basetype == 'text': + encoding = self.encoding or settings.DEFAULT_CHARSET + attachment = SafeMIMEText(content, subtype, encoding) + elif basetype == 'message' and subtype == 'rfc822': + # Bug #18967: per RFC2046 s5.2.1, message/rfc822 attachments + # must not be base64 encoded. + if isinstance(content, EmailMessage): + # convert content into an email.Message first + content = content.message() + elif not isinstance(content, Message): + # For compatibility with existing code, parse the message + # into an email.Message object if it is not one already. + content = message_from_string(force_text(content)) + + attachment = SafeMIMEMessage(content, subtype) + else: + # Encode non-text attachments with base64. + attachment = MIMEBase(basetype, subtype) + attachment.set_payload(content) + Encoders.encode_base64(attachment) + return attachment + + def _create_attachment(self, filename, content, mimetype=None): + """ + Convert the filename, content, mimetype triple into a MIME attachment + object. + """ + attachment = self._create_mime_attachment(content, mimetype) + if filename: + try: + filename.encode('ascii') + except UnicodeEncodeError: + filename = ('utf-8', '', filename) + attachment.add_header('Content-Disposition', 'attachment', filename=filename) + return attachment + + def _set_list_header_if_not_empty(self, msg, header, values): + """ + Set msg's header, either from self.extra_headers, if present, or from + the values argument. + """ + if values: + try: + value = self.extra_headers[header] + except KeyError: + value = ', '.join(str(v) for v in values) + msg[header] = value + + +class EmailMultiAlternatives(EmailMessage): + """ + A version of EmailMessage that makes it easy to send multipart/alternative + messages. For example, including text and HTML versions of the text is + made easier. + """ + alternative_subtype = 'alternative' + + def __init__(self, subject='', body='', from_email=None, to=None, bcc=None, + connection=None, attachments=None, headers=None, alternatives=None, + cc=None, reply_to=None): + """ + Initialize a single email message (which can be sent to multiple + recipients). + """ + super().__init__( + subject, body, from_email, to, bcc, connection, attachments, + headers, cc, reply_to, + ) + self.alternatives = alternatives or [] + + def attach_alternative(self, content, mimetype): + """Attach an alternative content representation.""" + assert content is not None + assert mimetype is not None + self.alternatives.append((content, mimetype)) + + def _create_message(self, msg): + return self._create_attachments(self._create_alternatives(msg)) + + def _create_alternatives(self, msg): + encoding = self.encoding or settings.DEFAULT_CHARSET + if self.alternatives: + body_msg = msg + msg = SafeMIMEMultipart(_subtype=self.alternative_subtype, encoding=encoding) + if self.body: + msg.attach(body_msg) + for alternative in self.alternatives: + msg.attach(self._create_mime_attachment(*alternative)) + return msg diff --git a/env/lib/python3.5/site-packages/django/core/mail/utils.py b/env/lib/python3.5/site-packages/django/core/mail/utils.py new file mode 100644 index 0000000..d18dfe4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/mail/utils.py @@ -0,0 +1,20 @@ +""" +Email message and email sending related helper functions. +""" + +import socket + + +# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of +# seconds, which slows down the restart of the server. +class CachedDnsName: + def __str__(self): + return self.get_fqdn() + + def get_fqdn(self): + if not hasattr(self, '_fqdn'): + self._fqdn = socket.getfqdn() + return self._fqdn + + +DNS_NAME = CachedDnsName() diff --git a/env/lib/python3.5/site-packages/django/core/management/__init__.py b/env/lib/python3.5/site-packages/django/core/management/__init__.py new file mode 100644 index 0000000..b4c28b3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/__init__.py @@ -0,0 +1,381 @@ +import functools +import os +import pkgutil +import sys +from collections import OrderedDict, defaultdict +from difflib import get_close_matches +from importlib import import_module + +import django +from django.apps import apps +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.core.management.base import ( + BaseCommand, CommandError, CommandParser, handle_default_options, +) +from django.core.management.color import color_style +from django.utils import autoreload + + +def find_commands(management_dir): + """ + Given a path to a management directory, return a list of all the command + names that are available. + """ + command_dir = os.path.join(management_dir, 'commands') + return [name for _, name, is_pkg in pkgutil.iter_modules([command_dir]) + if not is_pkg and not name.startswith('_')] + + +def load_command_class(app_name, name): + """ + Given a command name and an application name, return the Command + class instance. Allow all errors raised by the import process + (ImportError, AttributeError) to propagate. + """ + module = import_module('%s.management.commands.%s' % (app_name, name)) + return module.Command() + + +@functools.lru_cache(maxsize=None) +def get_commands(): + """ + Return a dictionary mapping command names to their callback applications. + + Look for a management.commands package in django.core, and in each + installed application -- if a commands package exists, register all + commands in that package. + + Core commands are always included. If a settings module has been + specified, also include user-defined commands. + + The dictionary is in the format {command_name: app_name}. Key-value + pairs from this dictionary can then be used in calls to + load_command_class(app_name, command_name) + + If a specific version of a command must be loaded (e.g., with the + startapp command), the instantiated module can be placed in the + dictionary in place of the application name. + + The dictionary is cached on the first call and reused on subsequent + calls. + """ + commands = {name: 'django.core' for name in find_commands(__path__[0])} + + if not settings.configured: + return commands + + for app_config in reversed(list(apps.get_app_configs())): + path = os.path.join(app_config.path, 'management') + commands.update({name: app_config.name for name in find_commands(path)}) + + return commands + + +def call_command(command_name, *args, **options): + """ + Call the given command, with the given options and args/kwargs. + + This is the primary API you should use for calling specific commands. + + `command_name` may be a string or a command object. Using a string is + preferred unless the command object is required for further processing or + testing. + + Some examples: + call_command('migrate') + call_command('shell', plain=True) + call_command('sqlmigrate', 'myapp') + + from django.core.management.commands import flush + cmd = flush.Command() + call_command(cmd, verbosity=0, interactive=False) + # Do something with cmd ... + """ + if isinstance(command_name, BaseCommand): + # Command object passed in. + command = command_name + command_name = command.__class__.__module__.split('.')[-1] + else: + # Load the command object by name. + try: + app_name = get_commands()[command_name] + except KeyError: + raise CommandError("Unknown command: %r" % command_name) + + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + command = app_name + else: + command = load_command_class(app_name, command_name) + + # Simulate argument parsing to get the option defaults (see #10080 for details). + parser = command.create_parser('', command_name) + # Use the `dest` option name from the parser option + opt_mapping = { + min(s_opt.option_strings).lstrip('-').replace('-', '_'): s_opt.dest + for s_opt in parser._actions if s_opt.option_strings + } + arg_options = {opt_mapping.get(key, key): value for key, value in options.items()} + parse_args = [str(a) for a in args] + # Any required arguments which are passed in via **options must be passed + # to parse_args(). + parse_args += [ + '{}={}'.format(min(opt.option_strings), arg_options[opt.dest]) + for opt in parser._actions if opt.required and opt.dest in options + ] + defaults = parser.parse_args(args=parse_args) + defaults = dict(defaults._get_kwargs(), **arg_options) + # Raise an error if any unknown options were passed. + stealth_options = set(command.base_stealth_options + command.stealth_options) + dest_parameters = {action.dest for action in parser._actions} + valid_options = (dest_parameters | stealth_options).union(opt_mapping) + unknown_options = set(options) - valid_options + if unknown_options: + raise TypeError( + "Unknown option(s) for %s command: %s. " + "Valid options are: %s." % ( + command_name, + ', '.join(sorted(unknown_options)), + ', '.join(sorted(valid_options)), + ) + ) + # Move positional args out of options to mimic legacy optparse + args = defaults.pop('args', ()) + if 'skip_checks' not in options: + defaults['skip_checks'] = True + + return command.execute(*args, **defaults) + + +class ManagementUtility: + """ + Encapsulate the logic of the django-admin and manage.py utilities. + """ + def __init__(self, argv=None): + self.argv = argv or sys.argv[:] + self.prog_name = os.path.basename(self.argv[0]) + if self.prog_name == '__main__.py': + self.prog_name = 'python -m django' + self.settings_exception = None + + def main_help_text(self, commands_only=False): + """Return the script's main help text, as a string.""" + if commands_only: + usage = sorted(get_commands()) + else: + usage = [ + "", + "Type '%s help ' for help on a specific subcommand." % self.prog_name, + "", + "Available subcommands:", + ] + commands_dict = defaultdict(lambda: []) + for name, app in get_commands().items(): + if app == 'django.core': + app = 'django' + else: + app = app.rpartition('.')[-1] + commands_dict[app].append(name) + style = color_style() + for app in sorted(commands_dict): + usage.append("") + usage.append(style.NOTICE("[%s]" % app)) + for name in sorted(commands_dict[app]): + usage.append(" %s" % name) + # Output an extra note if settings are not properly configured + if self.settings_exception is not None: + usage.append(style.NOTICE( + "Note that only Django core commands are listed " + "as settings are not properly configured (error: %s)." + % self.settings_exception)) + + return '\n'.join(usage) + + def fetch_command(self, subcommand): + """ + Try to fetch the given subcommand, printing a message with the + appropriate command called from the command line (usually + "django-admin" or "manage.py") if it can't be found. + """ + # Get commands outside of try block to prevent swallowing exceptions + commands = get_commands() + try: + app_name = commands[subcommand] + except KeyError: + if os.environ.get('DJANGO_SETTINGS_MODULE'): + # If `subcommand` is missing due to misconfigured settings, the + # following line will retrigger an ImproperlyConfigured exception + # (get_commands() swallows the original one) so the user is + # informed about it. + settings.INSTALLED_APPS + else: + sys.stderr.write("No Django settings specified.\n") + possible_matches = get_close_matches(subcommand, commands) + sys.stderr.write('Unknown command: %r' % subcommand) + if possible_matches: + sys.stderr.write('. Did you mean %s?' % possible_matches[0]) + sys.stderr.write("\nType '%s help' for usage.\n" % self.prog_name) + sys.exit(1) + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + klass = app_name + else: + klass = load_command_class(app_name, subcommand) + return klass + + def autocomplete(self): + """ + Output completion suggestions for BASH. + + The output of this function is passed to BASH's `COMREPLY` variable and + treated as completion suggestions. `COMREPLY` expects a space + separated string as the result. + + The `COMP_WORDS` and `COMP_CWORD` BASH environment variables are used + to get information about the cli input. Please refer to the BASH + man-page for more information about this variables. + + Subcommand options are saved as pairs. A pair consists of + the long option string (e.g. '--exclude') and a boolean + value indicating if the option requires arguments. When printing to + stdout, an equal sign is appended to options which require arguments. + + Note: If debugging this function, it is recommended to write the debug + output in a separate file. Otherwise the debug output will be treated + and formatted as potential completion suggestions. + """ + # Don't complete if user hasn't sourced bash_completion file. + if 'DJANGO_AUTO_COMPLETE' not in os.environ: + return + + cwords = os.environ['COMP_WORDS'].split()[1:] + cword = int(os.environ['COMP_CWORD']) + + try: + curr = cwords[cword - 1] + except IndexError: + curr = '' + + subcommands = list(get_commands()) + ['help'] + options = [('--help', False)] + + # subcommand + if cword == 1: + print(' '.join(sorted(filter(lambda x: x.startswith(curr), subcommands)))) + # subcommand options + # special case: the 'help' subcommand has no options + elif cwords[0] in subcommands and cwords[0] != 'help': + subcommand_cls = self.fetch_command(cwords[0]) + # special case: add the names of installed apps to options + if cwords[0] in ('dumpdata', 'sqlmigrate', 'sqlsequencereset', 'test'): + try: + app_configs = apps.get_app_configs() + # Get the last part of the dotted path as the app name. + options.extend((app_config.label, 0) for app_config in app_configs) + except ImportError: + # Fail silently if DJANGO_SETTINGS_MODULE isn't set. The + # user will find out once they execute the command. + pass + parser = subcommand_cls.create_parser('', cwords[0]) + options.extend( + (min(s_opt.option_strings), s_opt.nargs != 0) + for s_opt in parser._actions if s_opt.option_strings + ) + # filter out previously specified options from available options + prev_opts = {x.split('=')[0] for x in cwords[1:cword - 1]} + options = (opt for opt in options if opt[0] not in prev_opts) + + # filter options by current input + options = sorted((k, v) for k, v in options if k.startswith(curr)) + for opt_label, require_arg in options: + # append '=' to options which require args + if require_arg: + opt_label += '=' + print(opt_label) + # Exit code of the bash completion function is never passed back to + # the user, so it's safe to always exit with 0. + # For more details see #25420. + sys.exit(0) + + def execute(self): + """ + Given the command-line arguments, figure out which subcommand is being + run, create a parser appropriate to that command, and run it. + """ + try: + subcommand = self.argv[1] + except IndexError: + subcommand = 'help' # Display help if no arguments were given. + + # Preprocess options to extract --settings and --pythonpath. + # These options could affect the commands that are available, so they + # must be processed early. + parser = CommandParser(usage='%(prog)s subcommand [options] [args]', add_help=False, allow_abbrev=False) + parser.add_argument('--settings') + parser.add_argument('--pythonpath') + parser.add_argument('args', nargs='*') # catch-all + try: + options, args = parser.parse_known_args(self.argv[2:]) + handle_default_options(options) + except CommandError: + pass # Ignore any option errors at this point. + + try: + settings.INSTALLED_APPS + except ImproperlyConfigured as exc: + self.settings_exception = exc + except ImportError as exc: + self.settings_exception = exc + + if settings.configured: + # Start the auto-reloading dev server even if the code is broken. + # The hardcoded condition is a code smell but we can't rely on a + # flag on the command class because we haven't located it yet. + if subcommand == 'runserver' and '--noreload' not in self.argv: + try: + autoreload.check_errors(django.setup)() + except Exception: + # The exception will be raised later in the child process + # started by the autoreloader. Pretend it didn't happen by + # loading an empty list of applications. + apps.all_models = defaultdict(OrderedDict) + apps.app_configs = OrderedDict() + apps.apps_ready = apps.models_ready = apps.ready = True + + # Remove options not compatible with the built-in runserver + # (e.g. options for the contrib.staticfiles' runserver). + # Changes here require manually testing as described in + # #27522. + _parser = self.fetch_command('runserver').create_parser('django', 'runserver') + _options, _args = _parser.parse_known_args(self.argv[2:]) + for _arg in _args: + self.argv.remove(_arg) + + # In all other cases, django.setup() is required to succeed. + else: + django.setup() + + self.autocomplete() + + if subcommand == 'help': + if '--commands' in args: + sys.stdout.write(self.main_help_text(commands_only=True) + '\n') + elif not options.args: + sys.stdout.write(self.main_help_text() + '\n') + else: + self.fetch_command(options.args[0]).print_help(self.prog_name, options.args[0]) + # Special-cases: We want 'django-admin --version' and + # 'django-admin --help' to work, for backwards compatibility. + elif subcommand == 'version' or self.argv[1:] == ['--version']: + sys.stdout.write(django.get_version() + '\n') + elif self.argv[1:] in (['--help'], ['-h']): + sys.stdout.write(self.main_help_text() + '\n') + else: + self.fetch_command(subcommand).run_from_argv(self.argv) + + +def execute_from_command_line(argv=None): + """Run a ManagementUtility.""" + utility = ManagementUtility(argv) + utility.execute() diff --git a/env/lib/python3.5/site-packages/django/core/management/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f14a85b0a3a5c25c5244fcf622e7a2d9b3d35542 GIT binary patch literal 13401 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 G!v6sqPiqeV literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/__pycache__/color.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/__pycache__/color.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1eadb0b2f65c25112f93b4d1c2b0fdd1b34ff264 GIT binary patch literal 2017 zcmaJ?OK;mo5FU~uDKV05I6=}J>aswAfIux5E_!I28Zm4qNMT5ZOkt!0_8bw zbs=p-+JV%A_jqa>m;n=9-lKcYadQ{a9{Hc+R}a!TNayug+F=wd%)anOOi90*`s#rB ziisjC6&daHTELgJ zZUXAlWk@YhCQK|ibl}VY)zVvRNLvJo4=$Dy2O+?j38x0|5Kc`P1@p$>RigCw zM8*7UtYa5dS!U(FFHfXm#S?iAMpn})7l=|v{-r)3E>r(`oJ;0&1TKy;i8$%xS!ahQ zhfMi98?}9um0z!h?)qT#a$`8ColM3`odj-e;VpH0n#XF)MNykv)-EgGWrCNrdk~YG zs2!E+^5q z>FS|cNhfi+&o6%xF4#&Dm+?NPsZ=W(Uw?X1&s{=}w5dy}X`=wUV?41wH^e;Z2^lVj zfyy(SasdTHwjn)HYHp4Kv$jX-BxeJJ(T<`rE?5-RUKABPt#Z=4QS`Qo^X7{NaYM}E znSu^}OgES)x`tlYkkG|6uzbMAscG~(Do7(rKk@@PjU><{Mm8M(rY*=Jw71~#=C9ju zW)VHaPb4QcoLZ2fy9sAVE%b8Wv;`mVFdIs&2wizt6u49_u?ziAZ8*2UcpJcLG)&rL zjyfbqfi?S}sj(qgte7AB`Yn9^X2KHXj|DF@0r#_atVE8L<7_{YN+22gp5FL!eB112 z(r3j~o%l^Y`<2Ra*}pEX{^r*6^;g?_(a!qz*52M0ZKxzm8;V}N8ND6N5l%@g!$%qg z#y~$kmaB1mCkeGDDUH#%DwD5h6XgPo*-{Z7GK?9&^`GWE!NOSUU%LjL&XyqW@cuLw zk~PGNBvT4;hV6?$N8$WnxG~%w?p}soTl-Aa-t`5wi<@+P*ju~1!`-l}f1=^5y`5Kk zffM#_Jz;I@IKny2EAbE`yMtAHg0@d_$_FUG?U?iSBf~KkjYYF- zK4^7K?NPf$d@QpWyHyT^R5Q^-1(}GP!4`^zF#ASl^rHXVp~6w74*Zhe>7LY8Lbv1^ zKw#)wZ^TLkFQ`K5cFCI@e2=RpHMaN+^;@A)o^@yeDov4K(IU;yG5Oe6l|^NNRnYJp zt3XF?&3^cw$gfDesT<745cD>GTpzp`MmoDAL5~_Zx{>G@8(1z{1$7$nh=j&=Ei}q| z7l|aYX&hAf(CQejA$-(=ZtX@<$`kA=9U`jYJeNYBObsIJ-Ygo;$tDVFFilE3xu~Kf n#{XVTXmspHV`)Ea8rYhJ9&!uj_)mnzCGF7qOUgHOpCw z>`0gL8>eKcO0rT&=SNTrDY z{NUh+{rLIo*JHNltfPTTE#Fc7shS-{gJr__ES2Z@au`~T(K!|}F=?)%J9U|{D<*cu zM7{OH0Oe^ZRU%{Cl*-QwtU7p_#jXLvb`_wx$Yj+`a;26*dut7dHnc=(;#C-o20Y91 z^Ely{a3Q16Wy7dR78rGJTm3s|%Z|UEjLf1K6=|_MDbq~ss(JjKcywY$b?K`u$+a9U zxZ*R1)QD=_D=xGpmtEK=0j<#cva#)bL9e?>e5<9$nha?DNDJSScxS*k1`?6>f0@E{ z(~@RRoC7#%gMJ971Is5O=t%(j1sEEPhO=qH&JE3v31A+=yan^NB`|r@_*m(9NE1XP zr|}`e6Lo)sz@vaaQS|Y!efY6KC0vf)mP!$htk80Ik@$NCN;8Yt{Kf$mL}Xn z$sS@AqEtfas!RHq0GXzNKm8x)$Ht03bOnQ7a#s)gxH@eHFLl@~9|s|ZFVhJm)t)Sp?qhL}|0$vM|E)D{GX zYArhU{=QtKCSHpX*MYa`5+9I&#$9j2^S!>eMSHk>eNWrV|0{yJOT}G&`w77u&3}PV z_sFeo)29yV4bm-v(wp{v%ZfWz+_l2Oq3@B1`UT}#VWDjY*P+lm*6_X+{{+N?8i=(B zOC-J~kAFwvbFw%bwxV7=lY936-VrP6EHz?MmuUyh0jI6c8W-%WYe$IolbUo-JyN07 MZ+e^l_GW+UZzw{dtpET3 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/__pycache__/templates.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/__pycache__/templates.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9a368869bd6297d3403d37b16c78a85977ad2f4 GIT binary patch literal 10365 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 Rae-_Br*i@2HGM5u{|`4>O633m literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a739a9ef9f72c008d7a5c7fe1a43fe0b9fe023ab GIT binary patch literal 3444 zcmaJ@-E$jB5%1ATYgv}#FXB|V12%!g(P7C+?vBePA$7r);flmg#lCVP&ZySAD|_wz z^2{ircjs{z(_EGUi|4R)5CB$6ruH)G6jAiUh?a>Xaz9sAG}f6&6KhiYwHyi}x}`BNSJu zQ!U;r6pd0`qfQO)Hu)nIjZs{uP95)6@<++9(Q84Saq`E=uhVM?yu_0E58@?y4Ve?< z<3DM>PLe-G{)j`-i;thQyX}?5)uk_2e)(2_8NSyS(>TVSwv?$HRQkHtyyulz z5-uC}4DLnT>Q8ta-62hMY^>&&*fJU?D4S=6bcuE?f(7<0Iu+%U5^W?8sjSPiS0kB{ zIDtV2ACj)HjhIW7uFjqcI=1LrEPlzB8YQgy#-bOApclvBXwxat*CjeB(@BMn%e0HV z0s`o`!gCD^*VwS9Lh$-g>RB*XebB2pxRzxYBz|<{97xzHkd7N!@gUn0cf_>#NKBXN80Ckcd29l{I4&!=4c2~-$u`l6pu^h?l%>sE z1USL%yMP~@T!c=EPBAw)1RU@e`{T56_<*!Egvion(_qIk+p)OJaK%csOg_+Luy=K~ z7$5F0(+0puO4+fBkj;Kcn%hglTBk2*+Hm?p~6JFW(-0!IazE8!2{ zISBO*FoMuhPAZ+uRSMLtBg3q(*!|7sdln1L3ygIb2Wkk+W$XT)S7SUEc#!pn0%&s!R(!Ia(XA`bI}@Dts4r#U>n7KIRShj zZnG%V`Dl>z;hk;=pnJj`I$NVgC}c;twO?0BLP8X(UlYX!eSf% zi{H?(O>6saXk-5mw1ESxH7YBpc#qeAC4UGT&v7@p%0~ zYw_t)V@z_U$wz|ZRVdRWw@?%1bwkQry@LSFYazl9j!wJ)PS!H7qCONpFY}tbyqkte zZilKDMnPjFx4hVwci;1X>*XBYn+5@*f}P^kC9#P6C6koX_to4SbyiMqH3 z1dJj9UMr3BOjIylMmj75A2p11A@56IJxhoxHe#O!=u6NJ9j_+g$+;Z;MTNCc-?h%=i>*rFpu5{x9c{@L2_ev;urV#-Zsc1* zFVC6};MByK*uQ$l$3Ejz0iVy_^Z7g48}x^RD+Fd5;bZVzutR49l~99h`o4TK-!s#gNw%Y%OzXFh}F;3t!vowVm%M+4K1+^ryLJwB+p1BtLC@XLD0{J=bi$sa(inv?3%sxwq68XtrY3UN>iB6gr%{NIR0}rJ zfpZ5_UnP45XqqomhD^3G(Pp%{a7vTXOkt}& gghBdI@QCA4eGiYim@Q2T{7RG7#B_aj`f9!UZ)Q4RH~;_u literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/base.py b/env/lib/python3.5/site-packages/django/core/management/base.py new file mode 100644 index 0000000..e3374f6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/base.py @@ -0,0 +1,537 @@ +""" +Base classes for writing management commands (named commands which can +be executed through ``django-admin`` or ``manage.py``). +""" +import os +import sys +from argparse import ArgumentParser, HelpFormatter +from io import TextIOBase + +import django +from django.core import checks +from django.core.exceptions import ImproperlyConfigured +from django.core.management.color import color_style, no_style +from django.db import DEFAULT_DB_ALIAS, connections + + +class CommandError(Exception): + """ + Exception class indicating a problem while executing a management + command. + + If this exception is raised during the execution of a management + command, it will be caught and turned into a nicely-printed error + message to the appropriate output stream (i.e., stderr); as a + result, raising this exception (with a sensible description of the + error) is the preferred way to indicate that something has gone + wrong in the execution of a command. + """ + pass + + +class SystemCheckError(CommandError): + """ + The system check framework detected unrecoverable errors. + """ + pass + + +class CommandParser(ArgumentParser): + """ + Customized ArgumentParser class to improve some error messages and prevent + SystemExit in several occasions, as SystemExit is unacceptable when a + command is called programmatically. + """ + def __init__(self, **kwargs): + self.missing_args_message = kwargs.pop('missing_args_message', None) + self.called_from_command_line = kwargs.pop('called_from_command_line', None) + super().__init__(**kwargs) + + def parse_args(self, args=None, namespace=None): + # Catch missing argument for a better error message + if (self.missing_args_message and + not (args or any(not arg.startswith('-') for arg in args))): + self.error(self.missing_args_message) + return super().parse_args(args, namespace) + + def error(self, message): + if self.called_from_command_line: + super().error(message) + else: + raise CommandError("Error: %s" % message) + + +def handle_default_options(options): + """ + Include any default options that all commands should accept here + so that ManagementUtility can handle them before searching for + user commands. + """ + if options.settings: + os.environ['DJANGO_SETTINGS_MODULE'] = options.settings + if options.pythonpath: + sys.path.insert(0, options.pythonpath) + + +def no_translations(handle_func): + """Decorator that forces a command to run with translations deactivated.""" + def wrapped(*args, **kwargs): + from django.utils import translation + saved_locale = translation.get_language() + translation.deactivate_all() + try: + res = handle_func(*args, **kwargs) + finally: + if saved_locale is not None: + translation.activate(saved_locale) + return res + return wrapped + + +class DjangoHelpFormatter(HelpFormatter): + """ + Customized formatter so that command-specific arguments appear in the + --help output before arguments common to all commands. + """ + show_last = { + '--version', '--verbosity', '--traceback', '--settings', '--pythonpath', + '--no-color', + } + + def _reordered_actions(self, actions): + return sorted( + actions, + key=lambda a: set(a.option_strings) & self.show_last != set() + ) + + def add_usage(self, usage, actions, *args, **kwargs): + super().add_usage(usage, self._reordered_actions(actions), *args, **kwargs) + + def add_arguments(self, actions): + super().add_arguments(self._reordered_actions(actions)) + + +class OutputWrapper(TextIOBase): + """ + Wrapper around stdout/stderr + """ + @property + def style_func(self): + return self._style_func + + @style_func.setter + def style_func(self, style_func): + if style_func and self.isatty(): + self._style_func = style_func + else: + self._style_func = lambda x: x + + def __init__(self, out, style_func=None, ending='\n'): + self._out = out + self.style_func = None + self.ending = ending + + def __getattr__(self, name): + return getattr(self._out, name) + + def isatty(self): + return hasattr(self._out, 'isatty') and self._out.isatty() + + def write(self, msg, style_func=None, ending=None): + ending = self.ending if ending is None else ending + if ending and not msg.endswith(ending): + msg += ending + style_func = style_func or self.style_func + self._out.write(style_func(msg)) + + +class BaseCommand: + """ + The base class from which all management commands ultimately + derive. + + Use this class if you want access to all of the mechanisms which + parse the command-line arguments and work out what code to call in + response; if you don't need to change any of that behavior, + consider using one of the subclasses defined in this file. + + If you are interested in overriding/customizing various aspects of + the command-parsing and -execution behavior, the normal flow works + as follows: + + 1. ``django-admin`` or ``manage.py`` loads the command class + and calls its ``run_from_argv()`` method. + + 2. The ``run_from_argv()`` method calls ``create_parser()`` to get + an ``ArgumentParser`` for the arguments, parses them, performs + any environment changes requested by options like + ``pythonpath``, and then calls the ``execute()`` method, + passing the parsed arguments. + + 3. The ``execute()`` method attempts to carry out the command by + calling the ``handle()`` method with the parsed arguments; any + output produced by ``handle()`` will be printed to standard + output and, if the command is intended to produce a block of + SQL statements, will be wrapped in ``BEGIN`` and ``COMMIT``. + + 4. If ``handle()`` or ``execute()`` raised any exception (e.g. + ``CommandError``), ``run_from_argv()`` will instead print an error + message to ``stderr``. + + Thus, the ``handle()`` method is typically the starting point for + subclasses; many built-in commands and command types either place + all of their logic in ``handle()``, or perform some additional + parsing work in ``handle()`` and then delegate from it to more + specialized methods as needed. + + Several attributes affect behavior at various steps along the way: + + ``help`` + A short description of the command, which will be printed in + help messages. + + ``output_transaction`` + A boolean indicating whether the command outputs SQL + statements; if ``True``, the output will automatically be + wrapped with ``BEGIN;`` and ``COMMIT;``. Default value is + ``False``. + + ``requires_migrations_checks`` + A boolean; if ``True``, the command prints a warning if the set of + migrations on disk don't match the migrations in the database. + + ``requires_system_checks`` + A boolean; if ``True``, entire Django project will be checked for errors + prior to executing the command. Default value is ``True``. + To validate an individual application's models + rather than all applications' models, call + ``self.check(app_configs)`` from ``handle()``, where ``app_configs`` + is the list of application's configuration provided by the + app registry. + + ``stealth_options`` + A tuple of any options the command uses which aren't defined by the + argument parser. + """ + # Metadata about this command. + help = '' + + # Configuration shortcuts that alter various logic. + _called_from_command_line = False + output_transaction = False # Whether to wrap the output in a "BEGIN; COMMIT;" + requires_migrations_checks = False + requires_system_checks = True + # Arguments, common to all commands, which aren't defined by the argument + # parser. + base_stealth_options = ('skip_checks', 'stderr', 'stdout') + # Command-specific options not defined by the argument parser. + stealth_options = () + + def __init__(self, stdout=None, stderr=None, no_color=False): + self.stdout = OutputWrapper(stdout or sys.stdout) + self.stderr = OutputWrapper(stderr or sys.stderr) + if no_color: + self.style = no_style() + else: + self.style = color_style() + self.stderr.style_func = self.style.ERROR + + def get_version(self): + """ + Return the Django version, which should be correct for all built-in + Django commands. User-supplied commands can override this method to + return their own version. + """ + return django.get_version() + + def create_parser(self, prog_name, subcommand): + """ + Create and return the ``ArgumentParser`` which will be used to + parse the arguments to this command. + """ + parser = CommandParser( + prog='%s %s' % (os.path.basename(prog_name), subcommand), + description=self.help or None, + formatter_class=DjangoHelpFormatter, + missing_args_message=getattr(self, 'missing_args_message', None), + called_from_command_line=getattr(self, '_called_from_command_line', None), + ) + parser.add_argument('--version', action='version', version=self.get_version()) + parser.add_argument( + '-v', '--verbosity', action='store', dest='verbosity', default=1, + type=int, choices=[0, 1, 2, 3], + help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output', + ) + parser.add_argument( + '--settings', + help=( + 'The Python path to a settings module, e.g. ' + '"myproject.settings.main". If this isn\'t provided, the ' + 'DJANGO_SETTINGS_MODULE environment variable will be used.' + ), + ) + parser.add_argument( + '--pythonpath', + help='A directory to add to the Python path, e.g. "/home/djangoprojects/myproject".', + ) + parser.add_argument('--traceback', action='store_true', help='Raise on CommandError exceptions') + parser.add_argument( + '--no-color', action='store_true', dest='no_color', + help="Don't colorize the command output.", + ) + self.add_arguments(parser) + return parser + + def add_arguments(self, parser): + """ + Entry point for subclassed commands to add custom arguments. + """ + pass + + def print_help(self, prog_name, subcommand): + """ + Print the help message for this command, derived from + ``self.usage()``. + """ + parser = self.create_parser(prog_name, subcommand) + parser.print_help() + + def run_from_argv(self, argv): + """ + Set up any environment changes requested (e.g., Python path + and Django settings), then run this command. If the + command raises a ``CommandError``, intercept it and print it sensibly + to stderr. If the ``--traceback`` option is present or the raised + ``Exception`` is not ``CommandError``, raise it. + """ + self._called_from_command_line = True + parser = self.create_parser(argv[0], argv[1]) + + options = parser.parse_args(argv[2:]) + cmd_options = vars(options) + # Move positional args out of options to mimic legacy optparse + args = cmd_options.pop('args', ()) + handle_default_options(options) + try: + self.execute(*args, **cmd_options) + except Exception as e: + if options.traceback or not isinstance(e, CommandError): + raise + + # SystemCheckError takes care of its own formatting. + if isinstance(e, SystemCheckError): + self.stderr.write(str(e), lambda x: x) + else: + self.stderr.write('%s: %s' % (e.__class__.__name__, e)) + sys.exit(1) + finally: + try: + connections.close_all() + except ImproperlyConfigured: + # Ignore if connections aren't setup at this point (e.g. no + # configured settings). + pass + + def execute(self, *args, **options): + """ + Try to execute this command, performing system checks if needed (as + controlled by the ``requires_system_checks`` attribute, except if + force-skipped). + """ + if options['no_color']: + self.style = no_style() + self.stderr.style_func = None + if options.get('stdout'): + self.stdout = OutputWrapper(options['stdout']) + if options.get('stderr'): + self.stderr = OutputWrapper(options['stderr'], self.stderr.style_func) + + if self.requires_system_checks and not options.get('skip_checks'): + self.check() + if self.requires_migrations_checks: + self.check_migrations() + output = self.handle(*args, **options) + if output: + if self.output_transaction: + connection = connections[options.get('database', DEFAULT_DB_ALIAS)] + output = '%s\n%s\n%s' % ( + self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()), + output, + self.style.SQL_KEYWORD(connection.ops.end_transaction_sql()), + ) + self.stdout.write(output) + return output + + def _run_checks(self, **kwargs): + return checks.run_checks(**kwargs) + + def check(self, app_configs=None, tags=None, display_num_errors=False, + include_deployment_checks=False, fail_level=checks.ERROR): + """ + Use the system check framework to validate entire Django project. + Raise CommandError for any serious message (error or critical errors). + If there are only light messages (like warnings), print them to stderr + and don't raise an exception. + """ + all_issues = self._run_checks( + app_configs=app_configs, + tags=tags, + include_deployment_checks=include_deployment_checks, + ) + + header, body, footer = "", "", "" + visible_issue_count = 0 # excludes silenced warnings + + if all_issues: + debugs = [e for e in all_issues if e.level < checks.INFO and not e.is_silenced()] + infos = [e for e in all_issues if checks.INFO <= e.level < checks.WARNING and not e.is_silenced()] + warnings = [e for e in all_issues if checks.WARNING <= e.level < checks.ERROR and not e.is_silenced()] + errors = [e for e in all_issues if checks.ERROR <= e.level < checks.CRITICAL and not e.is_silenced()] + criticals = [e for e in all_issues if checks.CRITICAL <= e.level and not e.is_silenced()] + sorted_issues = [ + (criticals, 'CRITICALS'), + (errors, 'ERRORS'), + (warnings, 'WARNINGS'), + (infos, 'INFOS'), + (debugs, 'DEBUGS'), + ] + + for issues, group_name in sorted_issues: + if issues: + visible_issue_count += len(issues) + formatted = ( + self.style.ERROR(str(e)) + if e.is_serious() + else self.style.WARNING(str(e)) + for e in issues) + formatted = "\n".join(sorted(formatted)) + body += '\n%s:\n%s\n' % (group_name, formatted) + + if visible_issue_count: + header = "System check identified some issues:\n" + + if display_num_errors: + if visible_issue_count: + footer += '\n' + footer += "System check identified %s (%s silenced)." % ( + "no issues" if visible_issue_count == 0 else + "1 issue" if visible_issue_count == 1 else + "%s issues" % visible_issue_count, + len(all_issues) - visible_issue_count, + ) + + if any(e.is_serious(fail_level) and not e.is_silenced() for e in all_issues): + msg = self.style.ERROR("SystemCheckError: %s" % header) + body + footer + raise SystemCheckError(msg) + else: + msg = header + body + footer + + if msg: + if visible_issue_count: + self.stderr.write(msg, lambda x: x) + else: + self.stdout.write(msg) + + def check_migrations(self): + """ + Print a warning if the set of migrations on disk don't match the + migrations in the database. + """ + from django.db.migrations.executor import MigrationExecutor + try: + executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) + except ImproperlyConfigured: + # No databases are configured (or the dummy one) + return + + plan = executor.migration_plan(executor.loader.graph.leaf_nodes()) + if plan: + apps_waiting_migration = sorted({migration.app_label for migration, backwards in plan}) + self.stdout.write( + self.style.NOTICE( + "\nYou have %(unpplied_migration_count)s unapplied migration(s). " + "Your project may not work properly until you apply the " + "migrations for app(s): %(apps_waiting_migration)s." % { + "unpplied_migration_count": len(plan), + "apps_waiting_migration": ", ".join(apps_waiting_migration), + } + ) + ) + self.stdout.write(self.style.NOTICE("Run 'python manage.py migrate' to apply them.\n")) + + def handle(self, *args, **options): + """ + The actual logic of the command. Subclasses must implement + this method. + """ + raise NotImplementedError('subclasses of BaseCommand must provide a handle() method') + + +class AppCommand(BaseCommand): + """ + A management command which takes one or more installed application labels + as arguments, and does something with each of them. + + Rather than implementing ``handle()``, subclasses must implement + ``handle_app_config()``, which will be called once for each application. + """ + missing_args_message = "Enter at least one application label." + + def add_arguments(self, parser): + parser.add_argument('args', metavar='app_label', nargs='+', help='One or more application label.') + + def handle(self, *app_labels, **options): + from django.apps import apps + try: + app_configs = [apps.get_app_config(app_label) for app_label in app_labels] + except (LookupError, ImportError) as e: + raise CommandError("%s. Are you sure your INSTALLED_APPS setting is correct?" % e) + output = [] + for app_config in app_configs: + app_output = self.handle_app_config(app_config, **options) + if app_output: + output.append(app_output) + return '\n'.join(output) + + def handle_app_config(self, app_config, **options): + """ + Perform the command's actions for app_config, an AppConfig instance + corresponding to an application label given on the command line. + """ + raise NotImplementedError( + "Subclasses of AppCommand must provide" + "a handle_app_config() method.") + + +class LabelCommand(BaseCommand): + """ + A management command which takes one or more arbitrary arguments + (labels) on the command line, and does something with each of + them. + + Rather than implementing ``handle()``, subclasses must implement + ``handle_label()``, which will be called once for each label. + + If the arguments should be names of installed applications, use + ``AppCommand`` instead. + """ + label = 'label' + missing_args_message = "Enter at least one %s." % label + + def add_arguments(self, parser): + parser.add_argument('args', metavar=self.label, nargs='+') + + def handle(self, *labels, **options): + output = [] + for label in labels: + label_output = self.handle_label(label, **options) + if label_output: + output.append(label_output) + return '\n'.join(output) + + def handle_label(self, label, **options): + """ + Perform the command's actions for ``label``, which will be the + string as given on the command line. + """ + raise NotImplementedError('subclasses of LabelCommand must provide a handle_label() method') diff --git a/env/lib/python3.5/site-packages/django/core/management/color.py b/env/lib/python3.5/site-packages/django/core/management/color.py new file mode 100644 index 0000000..42600fa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/color.py @@ -0,0 +1,73 @@ +""" +Sets up the terminal color scheme. +""" + +import functools +import os +import sys + +from django.utils import termcolors + + +def supports_color(): + """ + Return True if the running system's terminal supports color, + and False otherwise. + """ + plat = sys.platform + supported_platform = plat != 'Pocket PC' and (plat != 'win32' or 'ANSICON' in os.environ) + + # isatty is not always implemented, #6223. + is_a_tty = hasattr(sys.stdout, 'isatty') and sys.stdout.isatty() + return supported_platform and is_a_tty + + +class Style: + pass + + +def make_style(config_string=''): + """ + Create a Style object from the given config_string. + + If config_string is empty django.utils.termcolors.DEFAULT_PALETTE is used. + """ + + style = Style() + + color_settings = termcolors.parse_color_setting(config_string) + + # The nocolor palette has all available roles. + # Use that palette as the basis for populating + # the palette as defined in the environment. + for role in termcolors.PALETTES[termcolors.NOCOLOR_PALETTE]: + if color_settings: + format = color_settings.get(role, {}) + style_func = termcolors.make_style(**format) + else: + def style_func(x): + return x + setattr(style, role, style_func) + + # For backwards compatibility, + # set style for ERROR_OUTPUT == ERROR + style.ERROR_OUTPUT = style.ERROR + + return style + + +@functools.lru_cache(maxsize=None) +def no_style(): + """ + Return a Style object with no color scheme. + """ + return make_style('nocolor') + + +def color_style(): + """ + Return a Style object from the Django color scheme. + """ + if not supports_color(): + return no_style() + return make_style(os.environ.get('DJANGO_COLORS', '')) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/check.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/check.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c65053c62b211dce085323060397c5573fa2a574 GIT binary patch literal 2422 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/dbshell.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/dbshell.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3368911a42ba59c6ee988fdc904b9bf941b84602 GIT binary patch literal 1312 zcmY*YQEwwP5FYPtHn}t@R}g^{FRPP~h;&J$6E7fy+Phv+#VJVi5ZnsMa@S6??XJCN zdk-2NFO)ySKSF-xiNC-TV{g(HYiI2B*fZbEe4dQQ!>7fUKmU~g{0;X8{=*@PIYGto zBTxa<1abm(1bGC+??zC?P$!TlQ1>A30r`fH!Q;*F<>La9q>uT-vV>V zT2#&E)l$`^WLB7r-CrWNHX^?Qv0XXRpi0;7(Wk;3}p;H?nMj1Lk$LBb!mL<8DczzCu9=;2eF+|*8l(j literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/diffsettings.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/diffsettings.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb0387faac4245e4ad8b3b7b1933684025b50570 GIT binary patch literal 3248 zcmb7HPjB4D6(5qj+&@}biRCC!)4Bt>fx3-$mHLzxt`k&pi=wVvcoPIzBp^oQ>@FoP zNzagSc43_yG`-{$Bp)ER-uoH)33}qK=&4^Jr~clMTx$ijXerOz$9eN+9)IsQZ^k>D zo89~VFF);XGWJh)!^vVL_XX`kjAa64tkhjb95bkCORZ#DQ;7Cm#B>(T>nG;$SZrJ2NZ3wBT%? z6qX0yuFizY^z$&A;mtb#3sWuze}8hA&C|m)Ob4fV7zKm)%=<-f|2#Vk&O|&->K{K* z@(}BashrC=JM_ya^kEQACR%1$7*F*uT@>vHk(i$b;vqqx(U@vO_!J^N^y^ejb0}Xj zHn9jG!1AX$`ZEB)*s=KnXLu(u`9rSibK*piqEO`j9}@^wAx*+$*E^vcx0%@IjRL zBGM0suZH*SqU{;0=M~K`lXHzOw{%oJ%u|I^>a<#MYkgV+yn)+Rufy)6tsd(C5KTXZ zkc{{kK!TBAA^2vqF-QreK~x+!iJ)L6>4u*mB{bXd?edYc6sAX=|zRn%O5avbV3 z5(|xtOeRvv*q550%Ivw6G0$d_`?*4I#;-7kgVg-kkZxahIi5gHL>^rk^qVynb@2s9 z^eJ-)q^l%-xw!(fv&t>?(sHcIj8I`Pkt1eOuuI z2Ek+0zjLx|4hABM3Rf7)(e}a)@iLXmq7g`)6%LsjGa04JNreYT*XolGxRO($f=Fu3 zlL^5RDt;lNTn_o~V!k&MdbUS|mj^2-j9GJ`Bu|x`grCcRpDy^`y?giehRe=iP+?ZI zR?1vv;zFpx{lk;vj~_o;UVH@nYuxMogk3~zrFm~k4;NDr#yT7F$5LEKF6U{spsiOs zRrXc>Rsq)w4VUe~Ajz{d&j1R(tZ4bOBm^&tRvw3wPzHrt+C>8;Z6qVQnGypLj%rcx*#mW-_M(pV;n zlIJC^fEDXi@l{J!xR;?_qiDGxs#F-~n(J^HAFR!1uw4)GRUS>Sf~QgCI_%p^1C{y_ z2#!+I6G7k!HO;94qbfACj3$MPtZAvr>OR`P^`{XtRvs~-8-Dq(Cs?gMSE18OvTnTN=`-O)h6{8#;UhT5W4CvL}7LN-SI|w@D2SW zo~V0d`w5A6Xn;%pd1}h)xa~bx#G#iP*Uf-%-YF0PSk}&Rf6sHMVNlGV_zCQ70 zjufs3SG-n{Yt=oj*O}z8e?8wWXoXtR$0}8#f9Q1WEvswYwL4bN+OU?l>O_}AeFtOd zA<|GY8U7B+lu`RkHfNrz%7E?!*GMv&N17*U<-HFY1kVfm-cHM)~ zFz=o_Oy#wQ>AJxKhYlE`;9JfNCfqdhCoqrt&68#C9nF8mAvm__vQ@pQ9eluY16^by zJDs08Q5jVj%2yopU6T!UfT3zY;$0Gk1J1czT*FrV6xR3AN?>i*+6JI^tvhI4>&Mn| zy9V|O57yA7W7?qm4=5G7f4_?E-`3H6Qei+l0GkNN+yL``MEbAm-Z=3}$je+*Nh0qO z=>KVv|2H|EcWd}@D%EP4n+~tv`%QHSK-7B>MN?;sNEWTp$45txMx&zn=;_lZPyb7* z6y4^or;7N0jHd5EP_d&_{S2wvhcwCBxt6SIpPuwPbn~K%C2n3_&#Nv~UeWWsXSs+< zi+U5&j(3!NmWN7ePcJm?Xr4cl{<&6rFsdO5qKu+ot^~L$&Wb8A)m2Rwx}NRgulIxA yRqot=5} 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/inspectdb.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/inspectdb.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e964cf545f0d0a254ca0b8c1ca4f1b959ed28b44 GIT binary patch literal 9651 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/loaddata.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/loaddata.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3f80d94987e4ebaa83ba8f9b686e9362b008f24 GIT binary patch literal 11233 zcma)C>u(&_b-y$FesPx%QKYEH=s}5Vi>p{k;nE1NyOF`l0BjejD^diy$xz6ey6728#4|&YhVh zY0JrybNAjm=brmI_x#Q|cc&|r;??$x?-ai(#LvZnPZ{}_@u(jfLOA$0geQcZs|mZN%Q@kVi{6B=Cq!>j*ps?8FT5$yJ0|R7x?B+6wCEid z_HkV<3U5aAW`#W~dMAW^LiFZ@Jtul6g?&==P6_*z=$#h!X-!=c-Wk!egl!39cRHTZ zSz(_Q4n}%TtoCO_+C48ei$cC?;Nw)N`dfWNJa91f3*r^0Dx8}5E@oU4?u2-PMVm+M zxNs)8c0#yW(Y?qoE(vE+I8#(_FVHru)Q^2a8?{_F!rYb|IK#G&Y`V3zrSP3suJ3pH z81Ip0w+6jltM7#6D05rNfh2zY zK~wp=o{Rk4R!b_kNj)_|+w2V-*K2yMHP=)1Y*<^medoqouibAh-E7`??e2}0u(H(h zTWjFX+`_TDec#=X9e-DsOYK3w@3#HUps&KL91ML|h9zIN`l`jX=(E~xwI8`oQ;*!= zy?^IZW3f#O5Pwq0yo^Wv0EvrbV!>c*t33!%-TNcS4QVrh5n+MrMla=~pn2T02Xx!~9zvX$# z@*lZYztwXcYrV7MWBC_U-RktY-iel~5ww>FR$Ph+Ew$ygJL?_SX;^Q1E|%27iahQ( zE;rt4`H!r@y4CV6dg)t(zMC|SI%w-1w!BW?ZM01+7JcZugy$9>^`A)g4AJHDj)l{! zrq>HA^~6XS(d&G)T6%@BJU&((%Q*(3bW8*>=OrbgnxHiVV-SrWB${9W2i+7e_c5lJ z7EjEiuj9g*;disl?*wt$(46K#mvndXKzFAOba$G&L*Fa)Gs`$Aazll=p6jBXnUvtjy?>um+qJ9>*OE#HlxxVRYaN|@F18D^9}kZzcET;+%P47SCRG-QWCxRpdB*z1;gLoCx}HO#4q0>tR)64I?V&_JK1RnqK{$CttUem( z)C~%Yi|$U_8#->7i!)h_)9pLKH*WN4$aeTI+Jqvy_i~ z13I(Za-1dvX4s=8p#y}Datm!slrw}O@o$t(5zvOJ4X%Ttt`K@t`oyK-%yfHd+PRbHUV%urz?>tmYua!f3r zrCgCHs*wyu(5AvlQURe;%tqEgX=htLPIf!Y$J=9%ZMc53HS`Cxa~)rf5yMQ|8z{G) zk{78o7U`M@GQ-?pi?NRdMJIKl%RU0SdhTx{ucnX)qZ0j{G%Dt_F_oP#g0Xl{HF2WQ zX(MShSfMXNz5CcgUg_C=-d5U}Bm-E)rlKY-{0yxq<+H-iiEchFVza;nXlROcG{jby zL>CCCi)aYNp5a#q@Dxoz+<{Pl;h6BNLjJYzYoZIFWMb5Jft3YuZRZ^A`_jW{v7h3h zPKdn}$$|Vxyt)06AZb{ENOmV_L?50P#?G8>F&Vd*idq=kp;(Qi2Urf^`L3RQRxE+x zep>8;6s!O<5T!I28pdk>t0L`Bv&Hs~VeDsw5dd&1VlN}6*Rebq(L65R7h?5W7zzGC z@m@weAd8M>!E3mg7V^IgVm%|ev%)_StzI_^h!Xoa16d{j{T#vMW=6=LvDBXwU7%H! z1)tgjt}x4av7Zw(PmKH_=9w3J*poA258Hwhvi&bcJWm<|Sk{>3*G($&s$*Q6CPbfW zbSLAyyn2y&_oj(g{~}jw60AK>X~YJEDZzxa5B14qNqQqRfo z;}w61hMrYCDu)DOh||7OHQ7^{wq^3&oq55S4@zIA;_oluVj5nTA9k;V;R=Mw)W znS&}g^QIi2)B~`xsmOq%?GN>$HLpG)*1^<0H?r;lRog?i-*#2;6Pj;Ok8Dgp-n?TC z*19mO$+%?HLe0qD44!)m=>iaN-ub*Hb&Iu`B$XLfVkOod4EugKN!tPYTzA>jl~Xaz zq1qG%A7*(amCO*YQ=~JuhHGA@-Auq&HZ?M<@K{{eA~l&*r{Tl&!}JCTUj7xNcRHRM zR#&iSo@;lu?g6pkNKDekNLQ(YZF7%WstGBPU!(qWH|?w37?XlO6OCHgC*YVU_#rUI zn(#i_o2uz_6z!K27HPs-gWKc$5|fUpRam&a({@>{vtWm*!IrWo;_Yf;JeacD_9W?P zhMq8slLOx;%)ATN2u2soB{hI$>h8F0xJ2~=qlbKsMqC`ZOrxD(3st^M?+w>3C!J9@ zbpFCL+5AVOS6;!JZ{kt+kN{#*1%v*|W;Indsz%wEgE=vststK<(c1h{q-@ydfK~)Z?fe_- zEIy@BP)iU0*?cEOsvi0qx|gU;;ipK?bx~xj03Fd}No|s{1Pydsa$^*~B+k0NId2`|ClaS+D*p7q#VrE@8Z62oecFj6^?b zT%?z9c+fi-02;NS1INfT_s7J}bH?5nrc^ift74B)^m%l-R~23SGd@zg39*?K>X*Ww zj9#G|s-L2I`CG;|UL6zN>8O*a`EiZoS=#QRNESUV7Ny9^mMbN{;Mq(-`r@Js9Dzt(4 zrs8>8SQO7A81p)Ye1S*$lW3%i!k?$keFRucq5jl_KT3j8BZK9OhC_J2iqT)*?;>ITg zS@I?&q}b&RB*FPeWfLsSqgCXYUYb{zA`Pz^tex%g&pLH86@Uwng506`&IlVCb{6gx zScW3Fb89g49Cp@7y;<`MiIY`VjroO0j}utc)xy^1OY=zTst#;ga4AyM?5T~q(#Ch` z0Ci|?ZQ6x|WH~thbfmLrK7@9`ONfBPlO*2<>on{G#Nhl9O~YCstxaWka#pXkOa5M` z{}{0@r%|szt4(@RZedZ!tZ3w+IZ$DmLM36If>Kl`muZnn5y`hGd7Ikg9}VG&QP_-7 z$}YjXj~!iJWp*IKte&R4Moo&eUeL{ms>udbr2Sn)+7^+ORbn!U0MOvwW)JTX4$z^q zu+VI_y_QnVrhJ7OrQn~zi)_JrDO1Y|RTkfFc|#pR*E?@5a0#Et4A0q!b=;3o_09~ za}wFG6qlTi43k&9yhbz3VWFDqJwME~ds~#TO9a+rR6QDCY6Sjr8lBh^di7MZ17O$k zY|kFDB@VsHMdZNKwXXa&&5OKiosiQc3B~>dkAjs7!AY5R(?#FM>UnGhB(2a*Og;YB}U!9$NZ`X-a_GOvhj$Ffb0e1`Sdl3W^5FaN5LL+#b$MLoF@GAmf zpDYXz47IR8Xwtth02^=hUQ)Yglf*y(<(FD%Y1fYA8;5h^p)1a^e{@*sXab{Dn1k#~#cr~CBG^e?U(|F{d zN}TMtC3)V)GEbwf=NG2j9sh_D{Iqaw!$mlEOJ4sU;!3QuBDnhNrWiMBB+YTVBm=aL zI?V2(7GIA;&=Jh3=nCinrF8>qOSg87;N$^bB+X8Al*j;T)K7-Rd$(^aHCOI0 z-CdR~@YhZ`96b1|Y|GGU%2z4jxMpJ295^o-@@19$T_S?SiV=?E$S4G7TsYRa8|aa( zBuR**O9=@C{BCcs7G^s9m339S1v}?Fy-9g)pG}T13(__{4C35t3yjr+_+Y5WfW%U>1x5whIV^K4f0# z05xg$d^A^rni7TD31K-;J^xf}--(&RSq1FE8n{E}5~hGI8lYIE3J&%rJ z82T!4q#1Q2Zl#_JJ}z3(=bnq3QC#`pqLMB$*Awi))*`AkpbMx*F(JQ?J5{EH_3a~K zLsw6(btyhM`*r8; zgZppYyWL#6dvE2k1xX{KgjaOoWyOtl8_BES8K@P$pl=-HVI`w?hI$;Bq@9mv5wx|o zP*|4eGVn9YvdjJvPoDfj%!kK?V?cLsaFA$~piiKjK6eNW7?VP@4+1p_>Iw-exik?_ zUl@riMPW2zGg3h&@c&el&OzsB=L=VA9_3;rGn}KqLLgnoNIpkb^SwD8bM<)`U9ZVB z+S=uVi!1*SRS;Jsbo_v;ps4bFP2#nwFr&k0Yednegw&n(XrVCCA!|ALM^yU+Nj=Nj z4VS+d3u`TjCDJYI9QlLPh7Au+So4r_tI)(QA|ndqbDSnm1K%_FCQVXHkzX=ljH9-K zCzu+c>S*$be?c>%=N2Ay2CQ)gu`A?XJjW;45b7+cl|*siEuCywD;(Nip+n2Y2^~_X z3G6D)J}VxaSF$HRpdtc6bP0%v8|e>SRTQ)2o!}*G^OE=g_k?H;F9T(~ILhb$n6#|< zWSP&ub5#ZHxKH9U7W3Io88mJf>QHA0qv>v{{2G!*<(im{j9_TQs9*lIho%Qrr1ii( zMPAlQeLPrAPU8yBnxC8`!dp5X^nE$G4Q7=P#TqW-oF+l#sP4eo{&IY~jC*J3E}Xg1 zt^3n1lldBi%^5bK*=Se}Ui}TiBvuEe1devg+UyVBrBkhc?Q?Lz`cQxJD}3aiK|;Pb zspsYUM0A0YJQDmWN6`}L6U6q#U3$l+p_YHPufq(&EWToVXQU6)w1`KgzlFA!6X{Qv zA@zj46XrZ{cGAoOc_%qX=inKXtLDhd9tCph)iB@Wo0DcUEH){aGQ?F%Gb}fo+rySe zT_dD2i{9+1UI#Y-{SCUTSBOI>g&TJH3{B$8lu#6$V+Ubjeb@)Q3_Jw!JvnT)>4!&> zOa(bk2_0Q+a*fXP=wOopYvEB7NDv}0v+43od7^x?{PO7+C(cNEPg*7Uq@o<_Ru>~> z?*Tts`o8vv`FMU0_3_aJYT}1Xc)L>1$k)-jjg{mNv7(1U4T>%{aKfMP3CGdKDfuBn zm1I|-3Z5pr@=ykZ>(8?lz(*bD$06RSWo@@MaFenaOFLjAh9WK65nM&TGxFRlFCzHp_XQAa*>ZZQPghQ6Y9TEq(a+vcSigKmt zS0A{rW*_4szK%-r-=Xe4jgYKk0UdpGbi@Gr^yk#}FDUs-N`6cUwH@(`XU`L-ZGD~C z(mcxM#F34r8B&KlLlQL13RiQO5;D^((C4&&L7I$(paQ%dc(_2a*o-GpMPF?6j|7-| zh4hIBqsg$bU$4u*Lbdz>CEuWgf$;^(^(pxqBw+y;R+7&Qy9o%D@{d{?KtH8nHm;%A zsD|cIjf?`U(@`t>4NL>SxX|}!iox2RJNR<+1DOUzaAl50l1E~nd}IdIL`^0ca;GbrCc5|;3rOSpFY zdq=HXNfF4urGz$HJ65Cp;2dpAn7^jg+I8A=^%W##D9h1b&8#6bNq^IvHqtfxWUdVL QSusjxHZ}b#(U>j$KWp!BBLDyZ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/makemessages.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/makemessages.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b05f7e31ab3ece00fc8669bc186a3c1655b10b2 GIT binary patch literal 22564 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/makemigrations.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/makemigrations.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..58b7019dc8dc2047ae6761f10398ce4f19d7f4d2 GIT binary patch literal 10253 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 KB_|Nzl=Z*SY;9ct literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/migrate.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/migrate.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d750c221f2799ac10a441c1595df95ca7ff7f784 GIT binary patch literal 9886 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 RU@Yes^2^-9KZHH`{{?##nVSFr literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/runserver.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/runserver.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4cbd6f7fb758eb8e6e831639136c75aaf86a3c8 GIT binary patch literal 5144 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 ZiKdK_Ci$x(UZ%9udNq^Jjq6i?{2#1V=`;WU literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sendtestemail.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sendtestemail.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab527e063530f19d93b00da03640cf83f413aa15 GIT binary patch literal 1801 zcmbVNUyIvD5TBJ~Str|e8;V{^aEN6Hd1)!-E@=sQh!1k1P_-a*()vz5{c(0z z949VM&X?)8>GQt!sb8T_omp9R5(Msi?$2jCu6dW^Plnn-sr()n4CgD)fnL}Yk7+)VECXfv=GEWb; zhqNbWc)SdfKyj%8PH_aP4%8*zJ|tNtxRhK5a?R6xne!}2aD%vLN?s`$wy%G#o1koP zduMSI$hz#e3*58L$?$Pdi(s8dX`IhyJp!~mn;CF|dad%hl3_|Y(nWU<$8#L=7ZkS) zR;F~AW|t#ow_z6BDolo%2N@Q@CkV0;s_kAqCIGhTiBazxH3E1xy|d5*gMc1Xn4i?_ zk#;V5v2LH9R-EE2YtbjR!v*1@8h(ml*!sI9wVR}rn)anaAF&b**G`6*Yp(~QeMYtT z)Qv%Fci657d4Y zd}?V&@?xpobs{7ezk#@imHF#*uFCa%ov&x-O`kIN+}*DNFTaM^Hcyl6jvvum-XsLSAM8PpX@J(SJ)il<5sOKdfKFSL(dE`yu8 zd5ClqJjt-g$b%evC|AKXwx4X$6it^+5k@{aiw$bg{y+T|7r9h|dPm$r(N5ps{%ubi z4~Tu==`vS5=xG>=1G0bkU-lin!s$@EvQDqK(xVHmE^Dc(q~yXyC)%#+YeDD>n*??9 z)Dcuf?U)X8udeAXJ|i`;s1x_e!o9?|V8Oq@xg-^^2Uzp&H?n;;v3%C<_m%IA7Z{Eg z#}q*vYd?<5I%^7=kK_1llN6msjL=NPFLPDSl66@1n9Eumg5r{|(5I-bMfb literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/shell.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/shell.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bb8d8112d36ad9f3e956aadd553bfb1de46ca1e GIT binary patch literal 3256 zcmZ`*O>Z1Y8Gfs~=hHLxti5p(mWalDtc>EZ)}WQJ5ZaI|OF;65ILOI}-B!E1Z1=dQ zds0;s?7`-+<^~csF8l&6{1Scusw)S?9yuZoJa2W6<3unsRa0H{)>}`#AJ5zC{eE{R z+5P3eR*3#iH$DNzAED_fx)eV_Inn5PENCPa^B#@7#n`8j@5UbG0Zke-YS5%fqb3Q~ z;#1zDNt;G(5}%|2r49NmrW+(1bcMYgK4^cl`A?imdz+qJ`cbUq!*Vi-i`4e&!N*FK zYE#(mrz(|7ru)()ykYV2G582gAET3i?VvJ9zy>@3#?cr!0LM7DL1~lH7J~uQv`uNp zja!s%#2LKScgfO%HfY~E35R`R;}1JtBJ&eefY!w9khpN8h)Y+L1X81 z*y`F)m5Hu|FY0AyCK%{~Xbcm>noG`(J-YI)h5F7^SX*&x1FU%*3$WPUytlPglv}uk zGP9{|vXRQdcC{&$jEtH|8>CVj+bzmyAr+j+d^(R0PGkYYWyNtg&Eu@7tqr3c7ud}f z3!l7r_LEQd_Mbg?`s^1^LRq}ZR9Q@9VZv9j%Git{>=*uKdsrDnB^ZP{QQ6cC=iXK} zU)tJo?mLPTX27M@Tu91smfn92(Zj?}utuARy~~92<|u zadBL_W8_(8hRC&EoTgE%j%REk+jKiM<^wJBBg9Osv{Zj4bqfLV?@zYPWV$`grdx-z zEKj$JarFIk=hSScPVwR|fh)F=yz#MQt=lyMz3sHa+O~i5RQ)bT;3_&2O|dFkUQ^t0 z{fe01dRX0m_{NUwAm*&+=7RX^7$DmbzM!p%pi7U$g^Oiy!WD@s0)sszAP6eyyXcA* znG(PZuQt6=tIkSwhsAughCkb?UFRm9HL7kMi>irk15F3$NDRb$WdXZZ{sv&qJO}tI z7%*UBz(5PI$f+x+aJk~uNIlhppl!&>p-gK)iubztx52RNx6x`ay&GWaNV^8ph1h#& z4h&o6CYTJ6d^#U2CSlKj4vJL@j7O(kQXj&i;zco`=k+$9E*o?a&^Vxr28}WH=?bLM z` zMjZsT!=Og(g^+C>OA{NT?6TvE2pkqMY!v{R^-679H3wTCqBfYu=EQd8*%Xqffyy>B zeU#;3eP%NoFfR2q-prIY<(1CIXNh#wX*&j0RUXF4sqIV^C^?d6$*8?3x0_v;u2pt0 zAB+Z>yPZs<@^CB@qZMbW`X(RHTiAe2KWZ=Pfo+}uTP{ca#SDyqmk#E@8(H7R<9E>X z4muJ&zlkb25Pi`Idg89X3KAQ5{h%v80Im5THealWHQyKaAhYJpmtjtR#i{F1!mPv} zHXOV4XK4CMbR6=6?y9enxqd*{I+8HRFHjsZ(kEqzAAL?h1a6O?T^?4m$4Cd_UyATU zCi+kb30iDIet{-yy?kZ>f#12)F~aTwDT}J#VyZgZWwv_s*^VQL+hmY200+&WF>n~( z=nh`~2`SNWDe+gw6_|LAc7P;Bb|Y;of`ITBjs@`&xTglVv2FY+E55tqh+5$_mFD*z zma{x9-pBin^Jn<$%Nr$jvsXooug|q@*0fq=YM|G1qB0vqHP;tFc z-{S5Y-1+EilXt~tGk6_DqrvstS5y^8Xyx+yb~Jns3ii=76Ek^Tu`Gh%fmjoP7kYj8 z{x-bc5wE>o#n|5Fl5Iy(5lgq1HA>k@fRTVfo6@$6~)CI7sSPd*N`)js#&uccCV#Vt%_X2!36|W+b-p8NX z=Vy=Ri-mueUA+{(k`s!y-HY literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/showmigrations.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/showmigrations.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..485c86892427b65389c4c63e9660a98cc3a7a6b3 GIT binary patch literal 4408 zcmai1y>r~g6@LH@xDVcm6h+aZB`b&$CW0&;9ZhUUjz*)8V;nmYozW?g=41{AJb)yQ zH~`$mQREF-#FUe?apg&uGEIsUY4R_mO%b%I)TVTm-&@=VrPwieyIkzP-F^G^{eJIZ zvC*jA=zj3&KNpDpO{bm`+ILXouTlB8*QukE#=Sa42K7tSDN)~~j#=~? z6j{_SQ>RSYhkl8ClU_jBq(Gw+gE|%REowXEmspz|J)gPf$>4s{?|ZSI*GG*tArgVX zxz^gx?*8h*W4CqBz5C#!yX}0Yo5XR@&B7#>j+W0p47Y{HZx0gB4@8$&9X|#dcTnV0 zQ~|O2&>QOGKple*;2W$Q4lq#^$AEr*S@oj})5ny8|JDII~lc^l+B04*mFHg=bLiqsYIY zI?|}8>|f|wXnCUP+Gs#&I?>Uep$tdFY3g*Mm6VW9Cq&0O9qDSN2Ki_BbpEV5*Btq0 z$)8tq&e4gEIfdK;`RD&fZc)j-QOH3vm=FuhV+V~LqU~H*&#PXVx;S_cZh7k3 zb5mxC2=bC2$Ski+hRc4i!@=$6 zJ7IUn_C!z|Kk(HiY2?M&B+W~z^|z@TothrTg>eMjoLh(X^AH-RgQ5a6g$!ODxGDy*yBXl{ zfiu}XjJwgm$4Q)0UiW<8#jOweaBoq92j`c#t3SvF*!R#44j?SU{lMK8$so<^GRWMK z<)vffB^g9pxs`g@Tjb@!%<|79E@7>&ez}_U)73OgS2hP>r4yan+-JPjr!Z#$bCU}fv)E6}b9J7p3M!{0zQb+SE3dK%T=ue2lYP}O#S#ye z6kf|os@OHx{mr~KrCW6cMfDa-TRZTRDEJ=QvW|+hhEdaM`kc0)56_HkR0wqq7Qn+w zaJi2nKSi|-b~5PT8XKXtafR3%_$l7oEt6=lk$Nyy36w_KUW1;XLp-HSSrxnpvt*cI z@Hl>pD4!{!Z#%~N@U8V^>gE!R8%SneIMxUDvK;EyZO6JLf7XuoLg4MC2+PqcEYR zHMCjnEF5llacsh`nXx`GXbp4umX$$w;Decp8gMw6=0wwA+`@o`pNSujy$k&iKq!xA zDJz7Oi4iLfE^`=YZ7gcXrV=-)XVFp7E>o|f=4DkCS}Z#F2j5Pw#u6}oYvb>9T&9D+ zs@@qoDi^(fqT>o3;b#$F?3dj3;r5utZeP5Y0EnuZSm*JjUW3Gc=m;U$r0mSA1AN)< zvozL(kId4pMdE_SNKpzSj$RFX^)DabDuZJ5}a2wR>)6VHUj(KJi^lc^^ey zMMc)URt3YKGiHs3wxm_HMf_dTYucQ4S)bM3&=<7x7$2S;15t4&6Xpbc4PFL?nL^45 z`ruBdarb*@`%rliSluAJGVXpyv;~wZp#B!11%$w1L@l0eQVal$yYR|9X))13g3=!;MgQV+7U3W7UQ9sA_Bm1M#1rpf@7V4W5%5t zMZUT;YE{vy)0R=7bnjnk=|UQMeyj8oWV~&sKK#uDDFqOb;q1oni&HqTuf7gDl}*Vs z=!RQxKt^1_#?EB1Z_l_UqFqKIKb*>Q^go9pe}D=X2YYQ?qGJRx6_=La08CZ55RLwz z(;j~hX$s6LTHw1!Z@!ZoyTKv4mDgXwLV~02SG8Np0h4}uJK!yNzbXxvU-41KLGxCW zbiGL4MuT0JXH2wYe`PJ(yaXpI>|Pojysg3qu2+T9*2bIa(*eO)1zQ9KxTqr3y+shE zM&cKvuc)4i+3=yoHaw^8nCnAxSvJ8sRlC`2GCMgOY;!^gWoF6C$ng+~rC=uZXXUN0?*oKoh&WXX4R?*j~PMA^|O0<*++oEuuk;kyJ2piQi6v<9RRvjE? zf!(g?oY7XndW*<%8~8hK)GH12&EkDtYwE9Y9{ZD1%`2`#i0kGx*X<|%APUf~yDq{` z#Bs}Y1%JMZ%UrSZ7m-Ea)_tnU{Q|(+V()%Xo z_04Hs-{h}C!S|;!wN7;;=5MMm50&sv=K7n>iQ#0kNZ*RvHq)$ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlflush.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlflush.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7907035d8c4115a36247a3be0585fbc150179183 GIT binary patch literal 1249 zcmZ`&O>Yx15FKwen>0;JRjHLqFRNZq4oRfms1Ty1fPkt3S}rRj%iVRF4c?F1UZF+;Kx7# zWDFt(jC>E22U!cER^zuo`H;0CYC{%46aagX_>i>W3kJ7AGPuFu4kQ7b4LZN@R2Z;& z^+*``w8%1%C+M!2E5#?OGSh)qZyY~+e)#_6oF5kU$_2W8@KR1c+cGAHD%ha2{PBzT#?|a3LH7h;VTgan+p#nECg2(pEY*p$JuK zY*4Z@pLvW_N+zT8*jq59F~FY~n;~`<;09pE;4>%Z#Y~6sym6Ch)UVopGsBEPfv?1&5<0jUIr2BQm46f*opt7(4+9U*=d%f z_7+F&{oObk_;uS`*&UKBMVHoZ={;kK`FG6nreabSP5e|{{g>W zjcrzr%d{L`RH;ga`HVkI_CMNjG86e_u^i$;%Q4oHxODj$$4zCKG1iqUt5JEadwAbE z$=AgW*aiz&pUt-xi67m?W@1J$*p|A#M%z5V4l8Sh>Z9(czLOf2N6mM37Lt1m(?N>Y ztQU2cYDTL?uC93l`y3VWXGNN8N+*hCua(qovUhR8=Qih@Ip3M=Y-}_h2A}@$R|DW5So@f` z{t|~A;uPXngBT#uz|$bn!P7w_st&OMi3y$wNe#SOMKvI{AhE%-tGx-a14$jcI%r>o zH3%*E1(hw}8eALTH6XO1-*x`Qv!JV&&BsjggDgo{8kVj3;z)>0Aam>R=*j*!$7lZG zV}Jkn>3+X#23eZ&pop?mcD3@Y=g~+o+8w>-!K6Sft!(cngJ?8~ic4iDppzCKW4@42 zaKV8>#Mm%I4B9g&NDME;g-LE>kiP*8QAP#wD^e`-KXeq=CT_o5FYUSC(}$-bN(<>0 z=iKeTJa%Ql3Z8Hx4Ktz0DNA_hCJVoNXMsNViGCd%2RP&aru#qaKy`Vyj+>@{3D($?NUzQu|=gJlp(iTpjy^VjC*3xX< z(zdnf&3VE0-jEM8lEn|9gvKTgc?Ty%#|-OAherj#HNY76iu5}bk#Tb7IceqxS*&1N zlari_(&h@2ylaSUv{9Ov5Lwz;zCdr?_k);8>H8`d;wDOocX6U2DQjRhwCU!;*}1)? zn@tp;@dAguh0ddM_QHMs07Bv2H;7F_FaWy81W3or`{E*c>I0K_FJDn3dL^@aNP>4zw0E3v;9 zVtB4PdRxYo%Mlv4exb2`vPC^b85@c$ zSu^)kx>4cc2~SV@XZy#;M~D9Y>1qE9LG>!Az)P*s-4r$2TC}y|jD=iy8*^+R81q~T zs%h_?5ik7Z$^PKd&jlYwuZ2yT&NE&;8>LB2%d=R4ttcqBvq_Op3TzlGmGd4_!?!0t z_iAZ|4aCEzDUR`J@)44yInJWA+f;=wI^@?avffxdU!_x(b0${T;nkOZm3Dz};f3_f zJZ7oaMyvknIjI0c9Ymp~w6F(-F@FyU@;*+Ww~dx@6S2O9t-hmeAo_2p8EHn#ysvF) z)Aj;bm2%f99bdI>-!B`!pJd@A=D2S8{;LU#DIW+`{PzKbOVbWbgjMkYP0AaZx|+C6 z1chgM(I~T$^jeywTY9UtZ408GberDos?qhR!}V4ju161opeM1qwfbBv9H@4x?%KPv wB=(kxlf7kLsT7v>!@;^tRUhigl_x9bSFNaY9#tv$oa#)H!#mmzCUndAAL@)^K>z>% literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlsequencereset.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/sqlsequencereset.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f1c71bc2310ac1fea18452b9077e2341fc940b8 GIT binary patch literal 1309 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 aur-qr;tqYVJa#{OIplig`)qyeL;4>s)8bSB literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/startproject.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/startproject.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2333a0d1190f2508f3888a62b7a2d21c0b64a83c GIT binary patch literal 963 zcmYjQy>8nu5I*Y9j%(L$(RS9VAu^DyK@b#3fp+qeE)@z8szlpzNJ%BB05;MoMLP9C zy7hUucFHSs>QR#I2;%8@yu0taJL=73GCIr7zx;6k{=$>TL;W2tb&ev(mjDM41QG%y zcOZ9xJ0M(0Tp%BE4{{%Vpqmejz&)DL62Nsdc*J;!h?#z3qUNb)SCtTHnLi?;wZC35 zO(hyCK^4m+?rzvNvr+rU?G+WH!oX5MMhTKYIxZj^MEeP_L_2Ohc)(NNTCOAC40^!b z!R-*!*!u`hx8cd|c0PsgEe` z2yEI}+!Ofj?6(fstqU4E-}+z|E;L#JHf=xd(ABlxzi?RCI&90rcoxf?9Ec^OWBbjZ zClq7^V4gVH% zE$Vq))TdvYg6F5@hQ7_uZuC5FXR`lfm1J|gC+Ug_Z1OzoZjG8NOsjjKxZX;7+0(*6g=Z*;*` b+vYa(h}3Bo#|$qz-k0`%C_9pwGjsm~bNd07 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/test.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/test.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1bd702f5c7cc3659169ac84d5a9f5324a1c79b63 GIT binary patch literal 2324 zcmZ8jOK;mo5S}F|O4cKOq=^%>Xn815sHi9)=%wicP2;2}&?-T!v;dKopvjd*g(8{V zr4tMG$$gyqLwe|;K!43%d&*zvsWVGjRzr)+*`49+x4Yjr^v%Jbdndm8>{$okAK17Y zw7${43-uI7BKSJklC= zO)HQ;VS|XzEqHYg&JZOoz=mHexP9>B7|v}tvta>nX2Asmu}@vanr;(#1`t~C_{Bc_ zplrARSU8jk;~7RA4xQECU9Y(w3qC3%A$bk6-eoUKa~vo<{z{1`R>pS{Wfk{|ndyv1 zwC?&8*13vOrA6+0(|IbrD9ehM_%ItpJB8;(DHA@US%B$Rxas=2l^p6ecAYbc^yvMRaI14IzcM6nDp^U2WBj^x=) zJJi!|ja=K_hF$c~-8%?~Hc5GE#F%l%d#9y*SFfBi;xrkCyzS4cnh$%zdmAB)D386tW)n z&3rifyhv7CqfuU@d0DAdm&}o|wTnzgM(UnKf%0$`Ws++r!Nj_k=8BUN(i6VAJLOp> zy#sUpgm3a_>Xk^XvKC4uk?AwUVbYRfqWsi*p5}>9^Ub0(n?;xuc}w%4ig?hu99qmO{t&;XeMnoy;kCC{^m4@dZT=q zIU3O#E#P9L;!$#001DLbRkb@hHOQt94yWOhr<2KpCtg#)eLX;_ljv$W4_)2g91v9a z1W8#C$#r`k$w(<7-oxI|7Ni#KnhGU?U2}>xtXiUCm)t0?J=V5d zcEhx_jjgk1ZExsq6OW7;y@{8LH-USEw|sz&!k?+MD81Xnd{c{&?Y{$@qXZmSpe{_E zJxBhxK->eYzgT=xsHXUm7VL>2Y_DmWVe4x7!4}D%7AUnXPo;MFt5gkLvjah0(u`hE zMRmE7L3fJbPfTewyI0ew5?sEqFWQ~s_bTHb(^|UN0K0DW**0#?>e^-bsY8Zax)X*Z zo-owiFs#Ldc0UYXR8dxY@WX@O%A10}sPKy>Lj= z9U3s_)j|vZ)2ORrpSiZnTx)O8za_{s?1=aA5%lU>>&HbtGh7MYUXKXwUzJ_|2upyV oiW%%S5wxRzrP55+drf(-z+6#BcRs6^`URbgBv5^8hvA?7AMvJUzW@LL literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/testserver.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/management/commands/__pycache__/testserver.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84799b7b5994b6879c85d6707eb30e737e79860b GIT binary patch literal 1914 zcmZuxTW=gS6!z?8_L5Bqq1`qr2#brvqV5J&C=wN_Dhfp)lvYh&7$J?kV{dlSxz+Y; zn^htqg=Zf55Bw#+^2A@@iSKweZ9$#H-ZMTvKA+Eg-x+Uj5AP&*fBCM@*kA08rvv*w zhWQbb#DBmt#`1tg0SoB8#j+O5+bn7~?`@WKSl(q(mj&O;4wGH>8@6?sYO_mh3z-br z@uc@R&SR6njS`V%aZ={FC?wvuz7a+}c=b9=%A!z-P0J#oh^was<35J@5|d&C2WX-e z0R$AlijW&dhtdNK5FjzxK+pq%zUyt$tnWRk3&RDMYNfKW%2i>xQF^5`f05cHm%<9Z z&}Gi;Qt^{?r3$`CU)ox$&&*`@Fd;Pb(C+}_0fzY%(|N#7ebE4@LDS#>g3F*CY}|b& z2TTr`++uRX6C zJ~6JBD=St)N4*Vl*Dbsw_}q1tDy!CqkA+?0KHQd9w=-mCrI38C7Nu5P*F}*QC%z6% zg=Xu)bXt^YQPp-mBy;L*7YhH?+?KJ3j29v^%5|hN)@`MQRhs-OwZ8jQWtrjMo{Hk6 zqU7_XV$Ux7mu;Pi#nep zlp-tIb(gkL0$k#a3-Gd-t;6XwtyYKY*7VQ~8^BiA%Jq>w_MT7v4-+0B;XgcH9dbHe z88ah3!;VqdnpiYxxsFlU!iAO4xW}JNkHLz6embyubx@_%bY7>KoEE3?SMts?dmw!k zu6_~}?f|+FCyGux*r>!DSX6OS{_4zaznRi(5%+FlVnG<}1-(`nT=(;6W3R7oct873 zToO=fMgo^!|yz788fZQ%DMYhQGk#cD_b zfFiLY4cPD0GJ5R1%f=U>KcT};yX>Op_j(afssY=F7S167$N{Py`LrXfZnJaJO_v(a z@nq-74It5ZX;OQpcK|fn616RpteoS+y8$YciY#5Lhf$wMOfp`d438US<11H{lC$Aa zX%+Y&8oE(wz2N8QL$~>-`Ziw*!;8{F1JJ!xnX(AuKbJL6Kmhf!%19ci1(Wz$S%Y#f zidi%O&6;l%^^v8@GUR>B|W;0wNMG$Mv+v>hRp)_b^x+omPE)JjNbZ4&AZ-L0Qs zf%;&y<1K6f)L70nbsg7Vz>9`tqK`N0F&b<6!o)d5kye>Plf7!CX42Q!=+K=_Gl(-W zR~foQSy2k3_u*}7+LQCR5V_K~Xz6{Lh{Mfv1C|SyXx*9m0Jb4N3x>h4{ZV@ywn4cO z`do;W(9i3gEAll#N0XlG$38(EyI~yXrL2K9cB43cUW<%U$FUyb*l4WP^E$;HV{>M# z%Hw3Il4nK}+x3Suy+-COf~UKfLJZ@H9fYm0HQMv5NFI$F$<0V>v)5YlMU8H~-8my} i=r+!b2AduD4D^-!v2R1+`d>FUyGJrJgl9LvU;AI2jR5-q literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/check.py b/env/lib/python3.5/site-packages/django/core/management/commands/check.py new file mode 100644 index 0000000..e119960 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/check.py @@ -0,0 +1,66 @@ +from django.apps import apps +from django.core import checks +from django.core.checks.registry import registry +from django.core.management.base import BaseCommand, CommandError + + +class Command(BaseCommand): + help = "Checks the entire Django project for potential problems." + + requires_system_checks = False + + def add_arguments(self, parser): + parser.add_argument('args', metavar='app_label', nargs='*') + parser.add_argument( + '--tag', '-t', action='append', dest='tags', + help='Run only checks labeled with given tag.', + ) + parser.add_argument( + '--list-tags', action='store_true', dest='list_tags', + help='List available tags.', + ) + parser.add_argument( + '--deploy', action='store_true', dest='deploy', + help='Check deployment settings.', + ) + parser.add_argument( + '--fail-level', + default='ERROR', + choices=['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'], + dest='fail_level', + help=( + 'Message level that will cause the command to exit with a ' + 'non-zero status. Default is ERROR.' + ), + ) + + def handle(self, *app_labels, **options): + include_deployment_checks = options['deploy'] + if options['list_tags']: + self.stdout.write('\n'.join(sorted(registry.tags_available(include_deployment_checks)))) + return + + if app_labels: + app_configs = [apps.get_app_config(app_label) for app_label in app_labels] + else: + app_configs = None + + tags = options['tags'] + if tags: + try: + invalid_tag = next( + tag for tag in tags if not checks.tag_exists(tag, include_deployment_checks) + ) + except StopIteration: + # no invalid tags + pass + else: + raise CommandError('There is no system check with the "%s" tag.' % invalid_tag) + + self.check( + app_configs=app_configs, + tags=tags, + display_num_errors=True, + include_deployment_checks=include_deployment_checks, + fail_level=getattr(checks, options['fail_level']), + ) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/compilemessages.py b/env/lib/python3.5/site-packages/django/core/management/commands/compilemessages.py new file mode 100644 index 0000000..bf704a4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/compilemessages.py @@ -0,0 +1,130 @@ +import codecs +import glob +import os + +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import find_command, popen_wrapper + + +def has_bom(fn): + with open(fn, 'rb') as f: + sample = f.read(4) + return sample.startswith((codecs.BOM_UTF8, codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE)) + + +def is_writable(path): + # Known side effect: updating file access/modified time to current time if + # it is writable. + try: + with open(path, 'a'): + os.utime(path, None) + except (IOError, OSError): + return False + return True + + +class Command(BaseCommand): + help = 'Compiles .po files to .mo files for use with builtin gettext support.' + + requires_system_checks = False + + program = 'msgfmt' + program_options = ['--check-format'] + + def add_arguments(self, parser): + parser.add_argument( + '--locale', '-l', dest='locale', action='append', default=[], + help='Locale(s) to process (e.g. de_AT). Default is to process all. ' + 'Can be used multiple times.', + ) + parser.add_argument( + '--exclude', '-x', dest='exclude', action='append', default=[], + help='Locales to exclude. Default is none. Can be used multiple times.', + ) + parser.add_argument( + '--use-fuzzy', '-f', dest='fuzzy', action='store_true', + help='Use fuzzy translations.', + ) + + def handle(self, **options): + locale = options['locale'] + exclude = options['exclude'] + self.verbosity = options['verbosity'] + if options['fuzzy']: + self.program_options = self.program_options + ['-f'] + + if find_command(self.program) is None: + raise CommandError("Can't find %s. Make sure you have GNU gettext " + "tools 0.15 or newer installed." % self.program) + + basedirs = [os.path.join('conf', 'locale'), 'locale'] + if os.environ.get('DJANGO_SETTINGS_MODULE'): + from django.conf import settings + basedirs.extend(settings.LOCALE_PATHS) + + # Walk entire tree, looking for locale directories + for dirpath, dirnames, filenames in os.walk('.', topdown=True): + for dirname in dirnames: + if dirname == 'locale': + basedirs.append(os.path.join(dirpath, dirname)) + + # Gather existing directories. + basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs))) + + if not basedirs: + raise CommandError("This script should be run from the Django Git " + "checkout or your project or app tree, or with " + "the settings module specified.") + + # Build locale list + all_locales = [] + for basedir in basedirs: + locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % basedir)) + all_locales.extend(map(os.path.basename, locale_dirs)) + + # Account for excluded locales + locales = locale or all_locales + locales = set(locales).difference(exclude) + + for basedir in basedirs: + if locales: + dirs = [os.path.join(basedir, l, 'LC_MESSAGES') for l in locales] + else: + dirs = [basedir] + locations = [] + for ldir in dirs: + for dirpath, dirnames, filenames in os.walk(ldir): + locations.extend((dirpath, f) for f in filenames if f.endswith('.po')) + if locations: + self.compile_messages(locations) + + def compile_messages(self, locations): + """ + Locations is a list of tuples: [(directory, file), ...] + """ + for i, (dirpath, f) in enumerate(locations): + if self.verbosity > 0: + self.stdout.write('processing file %s in %s\n' % (f, dirpath)) + po_path = os.path.join(dirpath, f) + if has_bom(po_path): + raise CommandError("The %s file has a BOM (Byte Order Mark). " + "Django only supports .po files encoded in " + "UTF-8 and without any BOM." % po_path) + base_path = os.path.splitext(po_path)[0] + + # Check writability on first location + if i == 0 and not is_writable(base_path + '.mo'): + self.stderr.write("The po files under %s are in a seemingly not writable location. " + "mo files will not be updated/created." % dirpath) + return + + args = [self.program] + self.program_options + [ + '-o', base_path + '.mo', base_path + '.po' + ] + output, errors, status = popen_wrapper(args) + if status: + if errors: + msg = "Execution of %s failed: %s" % (self.program, errors) + else: + msg = "Execution of %s failed" % self.program + raise CommandError(msg) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/createcachetable.py b/env/lib/python3.5/site-packages/django/core/management/commands/createcachetable.py new file mode 100644 index 0000000..3acb3dd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/createcachetable.py @@ -0,0 +1,108 @@ +from django.conf import settings +from django.core.cache import caches +from django.core.cache.backends.db import BaseDatabaseCache +from django.core.management.base import BaseCommand, CommandError +from django.db import ( + DEFAULT_DB_ALIAS, connections, models, router, transaction, +) +from django.db.utils import DatabaseError + + +class Command(BaseCommand): + help = "Creates the tables needed to use the SQL cache backend." + + requires_system_checks = False + + def add_arguments(self, parser): + parser.add_argument( + 'args', metavar='table_name', nargs='*', + help='Optional table names. Otherwise, settings.CACHES is used to find cache tables.', + ) + parser.add_argument( + '--database', action='store', dest='database', + default=DEFAULT_DB_ALIAS, + help='Nominates a database onto which the cache tables will be ' + 'installed. Defaults to the "default" database.', + ) + parser.add_argument( + '--dry-run', action='store_true', dest='dry_run', + help='Does not create the table, just prints the SQL that would be run.', + ) + + def handle(self, *tablenames, **options): + db = options['database'] + self.verbosity = options['verbosity'] + dry_run = options['dry_run'] + if tablenames: + # Legacy behavior, tablename specified as argument + for tablename in tablenames: + self.create_table(db, tablename, dry_run) + else: + for cache_alias in settings.CACHES: + cache = caches[cache_alias] + if isinstance(cache, BaseDatabaseCache): + self.create_table(db, cache._table, dry_run) + + def create_table(self, database, tablename, dry_run): + cache = BaseDatabaseCache(tablename, {}) + if not router.allow_migrate_model(database, cache.cache_model_class): + return + connection = connections[database] + + if tablename in connection.introspection.table_names(): + if self.verbosity > 0: + self.stdout.write("Cache table '%s' already exists." % tablename) + return + + fields = ( + # "key" is a reserved word in MySQL, so use "cache_key" instead. + models.CharField(name='cache_key', max_length=255, unique=True, primary_key=True), + models.TextField(name='value'), + models.DateTimeField(name='expires', db_index=True), + ) + table_output = [] + index_output = [] + qn = connection.ops.quote_name + for f in fields: + field_output = [ + qn(f.name), + f.db_type(connection=connection), + '%sNULL' % ('NOT ' if not f.null else ''), + ] + if f.primary_key: + field_output.append("PRIMARY KEY") + elif f.unique: + field_output.append("UNIQUE") + if f.db_index: + unique = "UNIQUE " if f.unique else "" + index_output.append( + "CREATE %sINDEX %s ON %s (%s);" % + (unique, qn('%s_%s' % (tablename, f.name)), qn(tablename), qn(f.name)) + ) + table_output.append(" ".join(field_output)) + full_statement = ["CREATE TABLE %s (" % qn(tablename)] + for i, line in enumerate(table_output): + full_statement.append(' %s%s' % (line, ',' if i < len(table_output) - 1 else '')) + full_statement.append(');') + + full_statement = "\n".join(full_statement) + + if dry_run: + self.stdout.write(full_statement) + for statement in index_output: + self.stdout.write(statement) + return + + with transaction.atomic(using=database, savepoint=connection.features.can_rollback_ddl): + with connection.cursor() as curs: + try: + curs.execute(full_statement) + except DatabaseError as e: + raise CommandError( + "Cache table '%s' could not be created.\nThe error was: %s." % + (tablename, e)) + for statement in index_output: + curs.execute(statement) + + if self.verbosity > 1: + self.stdout.write("Cache table '%s' created." % tablename) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/dbshell.py b/env/lib/python3.5/site-packages/django/core/management/commands/dbshell.py new file mode 100644 index 0000000..eda1ff6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/dbshell.py @@ -0,0 +1,31 @@ +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(BaseCommand): + help = ( + "Runs the command-line client for specified database, or the " + "default database if none is provided." + ) + + requires_system_checks = False + + def add_arguments(self, parser): + parser.add_argument( + '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS, + help='Nominates a database onto which to open a shell. Defaults to the "default" database.', + ) + + def handle(self, **options): + connection = connections[options['database']] + try: + connection.client.runshell() + except OSError: + # Note that we're assuming OSError means that the client program + # isn't installed. There's a possibility OSError would be raised + # for some other reason, in which case this error message would be + # inaccurate. Still, this message catches the common case. + raise CommandError( + 'You appear not to have the %r program installed or on your path.' % + connection.client.executable_name + ) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/diffsettings.py b/env/lib/python3.5/site-packages/django/core/management/commands/diffsettings.py new file mode 100644 index 0000000..5d1621e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/diffsettings.py @@ -0,0 +1,78 @@ +from django.core.management.base import BaseCommand + + +def module_to_dict(module, omittable=lambda k: k.startswith('_')): + """Convert a module namespace to a Python dictionary.""" + return {k: repr(v) for k, v in module.__dict__.items() if not omittable(k)} + + +class Command(BaseCommand): + help = """Displays differences between the current settings.py and Django's + default settings.""" + + requires_system_checks = False + + def add_arguments(self, parser): + parser.add_argument( + '--all', action='store_true', dest='all', + help=( + 'Display all settings, regardless of their value. In "hash" ' + 'mode, default values are prefixed by "###".' + ), + ) + parser.add_argument( + '--default', dest='default', metavar='MODULE', default=None, + help=( + "The settings module to compare the current settings against. Leave empty to " + "compare against Django's default settings." + ), + ) + parser.add_argument( + '--output', default='hash', choices=('hash', 'unified'), dest='output', + help=( + "Selects the output format. 'hash' mode displays each changed " + "setting, with the settings that don't appear in the defaults " + "followed by ###. 'unified' mode prefixes the default setting " + "with a minus sign, followed by the changed setting prefixed " + "with a plus sign." + ), + ) + + def handle(self, **options): + from django.conf import settings, Settings, global_settings + + # Because settings are imported lazily, we need to explicitly load them. + settings._setup() + + user_settings = module_to_dict(settings._wrapped) + default = options['default'] + default_settings = module_to_dict(Settings(default) if default else global_settings) + output_func = { + 'hash': self.output_hash, + 'unified': self.output_unified, + }[options['output']] + return '\n'.join(output_func(user_settings, default_settings, **options)) + + def output_hash(self, user_settings, default_settings, **options): + # Inspired by Postfix's "postconf -n". + output = [] + for key in sorted(user_settings): + if key not in default_settings: + output.append("%s = %s ###" % (key, user_settings[key])) + elif user_settings[key] != default_settings[key]: + output.append("%s = %s" % (key, user_settings[key])) + elif options['all']: + output.append("### %s = %s" % (key, user_settings[key])) + return output + + def output_unified(self, user_settings, default_settings, **options): + output = [] + for key in sorted(user_settings): + if key not in default_settings: + output.append(self.style.SUCCESS("+ %s = %s" % (key, user_settings[key]))) + elif user_settings[key] != default_settings[key]: + output.append(self.style.ERROR("- %s = %s" % (key, default_settings[key]))) + output.append(self.style.SUCCESS("+ %s = %s" % (key, user_settings[key]))) + elif options['all']: + output.append(" %s = %s" % (key, user_settings[key])) + return output diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/dumpdata.py b/env/lib/python3.5/site-packages/django/core/management/commands/dumpdata.py new file mode 100644 index 0000000..ae00a3b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/dumpdata.py @@ -0,0 +1,194 @@ +import warnings +from collections import OrderedDict + +from django.apps import apps +from django.core import serializers +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import parse_apps_and_model_labels +from django.db import DEFAULT_DB_ALIAS, router + + +class ProxyModelWarning(Warning): + pass + + +class Command(BaseCommand): + help = ( + "Output the contents of the database as a fixture of the given format " + "(using each model's default manager unless --all is specified)." + ) + + def add_arguments(self, parser): + parser.add_argument( + 'args', metavar='app_label[.ModelName]', nargs='*', + help='Restricts dumped data to the specified app_label or app_label.ModelName.', + ) + parser.add_argument( + '--format', default='json', dest='format', + help='Specifies the output serialization format for fixtures.', + ) + parser.add_argument( + '--indent', default=None, dest='indent', type=int, + help='Specifies the indent level to use when pretty-printing output.', + ) + parser.add_argument( + '--database', action='store', dest='database', + default=DEFAULT_DB_ALIAS, + help='Nominates a specific database to dump fixtures from. ' + 'Defaults to the "default" database.', + ) + parser.add_argument( + '-e', '--exclude', dest='exclude', action='append', default=[], + help='An app_label or app_label.ModelName to exclude ' + '(use multiple --exclude to exclude multiple apps/models).', + ) + parser.add_argument( + '--natural-foreign', action='store_true', dest='use_natural_foreign_keys', + help='Use natural foreign keys if they are available.', + ) + parser.add_argument( + '--natural-primary', action='store_true', dest='use_natural_primary_keys', + help='Use natural primary keys if they are available.', + ) + parser.add_argument( + '-a', '--all', action='store_true', dest='use_base_manager', + help="Use Django's base manager to dump all models stored in the database, " + "including those that would otherwise be filtered or modified by a custom manager.", + ) + parser.add_argument( + '--pks', dest='primary_keys', + help="Only dump objects with given primary keys. Accepts a comma-separated " + "list of keys. This option only works when you specify one model.", + ) + parser.add_argument( + '-o', '--output', default=None, dest='output', + help='Specifies file to which the output is written.' + ) + + def handle(self, *app_labels, **options): + format = options['format'] + indent = options['indent'] + using = options['database'] + excludes = options['exclude'] + output = options['output'] + show_traceback = options['traceback'] + use_natural_foreign_keys = options['use_natural_foreign_keys'] + use_natural_primary_keys = options['use_natural_primary_keys'] + use_base_manager = options['use_base_manager'] + pks = options['primary_keys'] + + if pks: + primary_keys = [pk.strip() for pk in pks.split(',')] + else: + primary_keys = [] + + excluded_models, excluded_apps = parse_apps_and_model_labels(excludes) + + if not app_labels: + if primary_keys: + raise CommandError("You can only use --pks option with one model") + app_list = OrderedDict.fromkeys( + app_config for app_config in apps.get_app_configs() + if app_config.models_module is not None and app_config not in excluded_apps + ) + else: + if len(app_labels) > 1 and primary_keys: + raise CommandError("You can only use --pks option with one model") + app_list = OrderedDict() + for label in app_labels: + try: + app_label, model_label = label.split('.') + try: + app_config = apps.get_app_config(app_label) + except LookupError as e: + raise CommandError(str(e)) + if app_config.models_module is None or app_config in excluded_apps: + continue + try: + model = app_config.get_model(model_label) + except LookupError: + raise CommandError("Unknown model: %s.%s" % (app_label, model_label)) + + app_list_value = app_list.setdefault(app_config, []) + + # We may have previously seen a "all-models" request for + # this app (no model qualifier was given). In this case + # there is no need adding specific models to the list. + if app_list_value is not None: + if model not in app_list_value: + app_list_value.append(model) + except ValueError: + if primary_keys: + raise CommandError("You can only use --pks option with one model") + # This is just an app - no model qualifier + app_label = label + try: + app_config = apps.get_app_config(app_label) + except LookupError as e: + raise CommandError(str(e)) + if app_config.models_module is None or app_config in excluded_apps: + continue + app_list[app_config] = None + + # Check that the serialization format exists; this is a shortcut to + # avoid collating all the objects and _then_ failing. + if format not in serializers.get_public_serializer_formats(): + try: + serializers.get_serializer(format) + except serializers.SerializerDoesNotExist: + pass + + raise CommandError("Unknown serialization format: %s" % format) + + def get_objects(count_only=False): + """ + Collate the objects to be serialized. If count_only is True, just + count the number of objects to be serialized. + """ + models = serializers.sort_dependencies(app_list.items()) + for model in models: + if model in excluded_models: + continue + if model._meta.proxy and model._meta.proxy_for_model not in models: + warnings.warn( + "%s is a proxy model and won't be serialized." % model._meta.label, + category=ProxyModelWarning, + ) + if not model._meta.proxy and router.allow_migrate_model(using, model): + if use_base_manager: + objects = model._base_manager + else: + objects = model._default_manager + + queryset = objects.using(using).order_by(model._meta.pk.name) + if primary_keys: + queryset = queryset.filter(pk__in=primary_keys) + if count_only: + yield queryset.order_by().count() + else: + yield from queryset.iterator() + + try: + self.stdout.ending = None + progress_output = None + object_count = 0 + # If dumpdata is outputting to stdout, there is no way to display progress + if output and self.stdout.isatty() and options['verbosity'] > 0: + progress_output = self.stdout + object_count = sum(get_objects(count_only=True)) + stream = open(output, 'w') if output else None + try: + serializers.serialize( + format, get_objects(), indent=indent, + use_natural_foreign_keys=use_natural_foreign_keys, + use_natural_primary_keys=use_natural_primary_keys, + stream=stream or self.stdout, progress_output=progress_output, + object_count=object_count, + ) + finally: + if stream: + stream.close() + except Exception as e: + if show_traceback: + raise + raise CommandError("Unable to serialize database: %s" % e) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/flush.py b/env/lib/python3.5/site-packages/django/core/management/commands/flush.py new file mode 100644 index 0000000..f6ae839 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/flush.py @@ -0,0 +1,82 @@ +from importlib import import_module + +from django.apps import apps +from django.core.management.base import BaseCommand, CommandError +from django.core.management.color import no_style +from django.core.management.sql import emit_post_migrate_signal, sql_flush +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(BaseCommand): + help = ( + 'Removes ALL DATA from the database, including data added during ' + 'migrations. Does not achieve a "fresh install" state.' + ) + stealth_options = ('reset_sequences', 'allow_cascade', 'inhibit_post_migrate') + + def add_arguments(self, parser): + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help='Tells Django to NOT prompt the user for input of any kind.', + ) + parser.add_argument( + '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS, + help='Nominates a database to flush. Defaults to the "default" database.', + ) + + def handle(self, **options): + database = options['database'] + connection = connections[database] + verbosity = options['verbosity'] + interactive = options['interactive'] + # The following are stealth options used by Django's internals. + reset_sequences = options.get('reset_sequences', True) + allow_cascade = options.get('allow_cascade', False) + inhibit_post_migrate = options.get('inhibit_post_migrate', False) + + self.style = no_style() + + # Import the 'management' module within each installed app, to register + # dispatcher events. + for app_config in apps.get_app_configs(): + try: + import_module('.management', app_config.name) + except ImportError: + pass + + sql_list = sql_flush(self.style, connection, only_django=True, + reset_sequences=reset_sequences, + allow_cascade=allow_cascade) + + if interactive: + confirm = input("""You have requested a flush of the database. +This will IRREVERSIBLY DESTROY all data currently in the %r database, +and return each table to an empty state. +Are you sure you want to do this? + + Type 'yes' to continue, or 'no' to cancel: """ % connection.settings_dict['NAME']) + else: + confirm = 'yes' + + if confirm == 'yes': + try: + connection.ops.execute_sql_flush(database, sql_list) + except Exception as exc: + raise CommandError( + "Database %s couldn't be flushed. Possible reasons:\n" + " * The database isn't running or isn't configured correctly.\n" + " * At least one of the expected database tables doesn't exist.\n" + " * The SQL was invalid.\n" + "Hint: Look at the output of 'django-admin sqlflush'. " + "That's the SQL this command wasn't able to run.\n" % ( + connection.settings_dict['NAME'], + ) + ) from exc + + # Empty sql_list may signify an empty database and post_migrate would then crash + if sql_list and not inhibit_post_migrate: + # Emit the post migrate signal. This allows individual applications to + # respond as if the database had been migrated from scratch. + emit_post_migrate_signal(verbosity, interactive, database) + else: + self.stdout.write("Flush cancelled.\n") diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/inspectdb.py b/env/lib/python3.5/site-packages/django/core/management/commands/inspectdb.py new file mode 100644 index 0000000..c84ce14 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/inspectdb.py @@ -0,0 +1,293 @@ +import keyword +import re +from collections import OrderedDict + +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.models.constants import LOOKUP_SEP + + +class Command(BaseCommand): + help = "Introspects the database tables in the given database and outputs a Django model module." + requires_system_checks = False + stealth_options = ('table_name_filter',) + db_module = 'django.db' + + def add_arguments(self, parser): + parser.add_argument( + 'table', action='store', nargs='*', type=str, + help='Selects what tables or views should be introspected.', + ) + parser.add_argument( + '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS, + help='Nominates a database to introspect. Defaults to using the "default" database.', + ) + parser.add_argument( + '--include-views', action='store_true', help='Also output models for database views.', + ) + + def handle(self, **options): + try: + for line in self.handle_inspection(options): + self.stdout.write("%s\n" % line) + except NotImplementedError: + raise CommandError("Database inspection isn't supported for the currently selected database backend.") + + def handle_inspection(self, options): + connection = connections[options['database']] + # 'table_name_filter' is a stealth option + table_name_filter = options.get('table_name_filter') + + def table2model(table_name): + return re.sub(r'[^a-zA-Z0-9]', '', table_name.title()) + + def strip_prefix(s): + return s[1:] if s.startswith("u'") else s + + with connection.cursor() as cursor: + yield "# This is an auto-generated Django model module." + yield "# You'll have to do the following manually to clean this up:" + yield "# * Rearrange models' order" + yield "# * Make sure each model has one field with primary_key=True" + yield "# * Make sure each ForeignKey has `on_delete` set to the desired behavior." + yield ( + "# * Remove `managed = False` lines if you wish to allow " + "Django to create, modify, and delete the table" + ) + yield "# Feel free to rename the models, but don't rename db_table values or field names." + yield 'from %s import models' % self.db_module + known_models = [] + table_info = connection.introspection.get_table_list(cursor) + tables_to_introspect = ( + options['table'] or + sorted(info.name for info in table_info if options['include_views'] or info.type == 't') + ) + + for table_name in tables_to_introspect: + if table_name_filter is not None and callable(table_name_filter): + if not table_name_filter(table_name): + continue + try: + try: + relations = connection.introspection.get_relations(cursor, table_name) + except NotImplementedError: + relations = {} + try: + constraints = connection.introspection.get_constraints(cursor, table_name) + except NotImplementedError: + constraints = {} + primary_key_column = connection.introspection.get_primary_key_column(cursor, table_name) + unique_columns = [ + c['columns'][0] for c in constraints.values() + if c['unique'] and len(c['columns']) == 1 + ] + table_description = connection.introspection.get_table_description(cursor, table_name) + except Exception as e: + yield "# Unable to inspect table '%s'" % table_name + yield "# The error was: %s" % e + continue + + yield '' + yield '' + yield 'class %s(models.Model):' % table2model(table_name) + known_models.append(table2model(table_name)) + used_column_names = [] # Holds column names used in the table so far + column_to_field_name = {} # Maps column names to names of model fields + for row in table_description: + comment_notes = [] # Holds Field notes, to be displayed in a Python comment. + extra_params = OrderedDict() # Holds Field parameters such as 'db_column'. + column_name = row[0] + is_relation = column_name in relations + + att_name, params, notes = self.normalize_col_name( + column_name, used_column_names, is_relation) + extra_params.update(params) + comment_notes.extend(notes) + + used_column_names.append(att_name) + column_to_field_name[column_name] = att_name + + # Add primary_key and unique, if necessary. + if column_name == primary_key_column: + extra_params['primary_key'] = True + elif column_name in unique_columns: + extra_params['unique'] = True + + if is_relation: + rel_to = ( + "self" if relations[column_name][1] == table_name + else table2model(relations[column_name][1]) + ) + if rel_to in known_models: + field_type = 'ForeignKey(%s' % rel_to + else: + field_type = "ForeignKey('%s'" % rel_to + else: + # Calling `get_field_type` to get the field type string and any + # additional parameters and notes. + field_type, field_params, field_notes = self.get_field_type(connection, table_name, row) + extra_params.update(field_params) + comment_notes.extend(field_notes) + + field_type += '(' + + # Don't output 'id = meta.AutoField(primary_key=True)', because + # that's assumed if it doesn't exist. + if att_name == 'id' and extra_params == {'primary_key': True}: + if field_type == 'AutoField(': + continue + elif field_type == 'IntegerField(' and not connection.features.can_introspect_autofield: + comment_notes.append('AutoField?') + + # Add 'null' and 'blank', if the 'null_ok' flag was present in the + # table description. + if row[6]: # If it's NULL... + extra_params['blank'] = True + extra_params['null'] = True + + field_desc = '%s = %s%s' % ( + att_name, + # Custom fields will have a dotted path + '' if '.' in field_type else 'models.', + field_type, + ) + if field_type.startswith('ForeignKey('): + field_desc += ', models.DO_NOTHING' + + if extra_params: + if not field_desc.endswith('('): + field_desc += ', ' + field_desc += ', '.join( + '%s=%s' % (k, strip_prefix(repr(v))) + for k, v in extra_params.items()) + field_desc += ')' + if comment_notes: + field_desc += ' # ' + ' '.join(comment_notes) + yield ' %s' % field_desc + is_view = any(info.name == table_name and info.type == 'v' for info in table_info) + for meta_line in self.get_meta(table_name, constraints, column_to_field_name, is_view): + yield meta_line + + def normalize_col_name(self, col_name, used_column_names, is_relation): + """ + Modify the column name to make it Python-compatible as a field name + """ + field_params = {} + field_notes = [] + + new_name = col_name.lower() + if new_name != col_name: + field_notes.append('Field name made lowercase.') + + if is_relation: + if new_name.endswith('_id'): + new_name = new_name[:-3] + else: + field_params['db_column'] = col_name + + new_name, num_repl = re.subn(r'\W', '_', new_name) + if num_repl > 0: + field_notes.append('Field renamed to remove unsuitable characters.') + + if new_name.find(LOOKUP_SEP) >= 0: + while new_name.find(LOOKUP_SEP) >= 0: + new_name = new_name.replace(LOOKUP_SEP, '_') + if col_name.lower().find(LOOKUP_SEP) >= 0: + # Only add the comment if the double underscore was in the original name + field_notes.append("Field renamed because it contained more than one '_' in a row.") + + if new_name.startswith('_'): + new_name = 'field%s' % new_name + field_notes.append("Field renamed because it started with '_'.") + + if new_name.endswith('_'): + new_name = '%sfield' % new_name + field_notes.append("Field renamed because it ended with '_'.") + + if keyword.iskeyword(new_name): + new_name += '_field' + field_notes.append('Field renamed because it was a Python reserved word.') + + if new_name[0].isdigit(): + new_name = 'number_%s' % new_name + field_notes.append("Field renamed because it wasn't a valid Python identifier.") + + if new_name in used_column_names: + num = 0 + while '%s_%d' % (new_name, num) in used_column_names: + num += 1 + new_name = '%s_%d' % (new_name, num) + field_notes.append('Field renamed because of name conflict.') + + if col_name != new_name and field_notes: + field_params['db_column'] = col_name + + return new_name, field_params, field_notes + + def get_field_type(self, connection, table_name, row): + """ + Given the database connection, the table name, and the cursor row + description, this routine will return the given field type name, as + well as any additional keyword parameters and notes for the field. + """ + field_params = OrderedDict() + field_notes = [] + + try: + field_type = connection.introspection.get_field_type(row[1], row) + except KeyError: + field_type = 'TextField' + field_notes.append('This field type is a guess.') + + # This is a hook for data_types_reverse to return a tuple of + # (field_type, field_params_dict). + if type(field_type) is tuple: + field_type, new_params = field_type + field_params.update(new_params) + + # Add max_length for all CharFields. + if field_type == 'CharField' and row[3]: + field_params['max_length'] = int(row[3]) + + if field_type == 'DecimalField': + if row[4] is None or row[5] is None: + field_notes.append( + 'max_digits and decimal_places have been guessed, as this ' + 'database handles decimal fields as float') + field_params['max_digits'] = row[4] if row[4] is not None else 10 + field_params['decimal_places'] = row[5] if row[5] is not None else 5 + else: + field_params['max_digits'] = row[4] + field_params['decimal_places'] = row[5] + + return field_type, field_params, field_notes + + def get_meta(self, table_name, constraints, column_to_field_name, is_view): + """ + Return a sequence comprising the lines of code necessary + to construct the inner Meta class for the model corresponding + to the given database table name. + """ + unique_together = [] + has_unsupported_constraint = False + for params in constraints.values(): + if params['unique']: + columns = params['columns'] + if None in columns: + has_unsupported_constraint = True + columns = [x for x in columns if x is not None] + if len(columns) > 1: + unique_together.append(str(tuple(column_to_field_name[c] for c in columns))) + managed_comment = " # Created from a view. Don't remove." if is_view else "" + meta = [''] + if has_unsupported_constraint: + meta.append(' # A unique constraint could not be introspected.') + meta += [ + ' class Meta:', + ' managed = False%s' % managed_comment, + ' db_table = %r' % table_name + ] + if unique_together: + tup = '(' + ', '.join(unique_together) + ',)' + meta += [" unique_together = %s" % tup] + return meta diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/loaddata.py b/env/lib/python3.5/site-packages/django/core/management/commands/loaddata.py new file mode 100644 index 0000000..42dff67 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/loaddata.py @@ -0,0 +1,345 @@ +import functools +import glob +import gzip +import os +import sys +import warnings +import zipfile +from itertools import product + +from django.apps import apps +from django.conf import settings +from django.core import serializers +from django.core.exceptions import ImproperlyConfigured +from django.core.management.base import BaseCommand, CommandError +from django.core.management.color import no_style +from django.core.management.utils import parse_apps_and_model_labels +from django.db import ( + DEFAULT_DB_ALIAS, DatabaseError, IntegrityError, connections, router, + transaction, +) +from django.utils.functional import cached_property + +try: + import bz2 + has_bz2 = True +except ImportError: + has_bz2 = False + +READ_STDIN = '-' + + +class Command(BaseCommand): + help = 'Installs the named fixture(s) in the database.' + missing_args_message = ( + "No database fixture specified. Please provide the path of at least " + "one fixture in the command line." + ) + + def add_arguments(self, parser): + parser.add_argument('args', metavar='fixture', nargs='+', help='Fixture labels.') + parser.add_argument( + '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS, + help='Nominates a specific database to load fixtures into. Defaults to the "default" database.', + ) + parser.add_argument( + '--app', action='store', dest='app_label', default=None, + help='Only look for fixtures in the specified app.', + ) + parser.add_argument( + '--ignorenonexistent', '-i', action='store_true', dest='ignore', + help='Ignores entries in the serialized data for fields that do not ' + 'currently exist on the model.', + ) + parser.add_argument( + '-e', '--exclude', dest='exclude', action='append', default=[], + help='An app_label or app_label.ModelName to exclude. Can be used multiple times.', + ) + parser.add_argument( + '--format', action='store', dest='format', default=None, + help='Format of serialized data when reading from stdin.', + ) + + def handle(self, *fixture_labels, **options): + self.ignore = options['ignore'] + self.using = options['database'] + self.app_label = options['app_label'] + self.verbosity = options['verbosity'] + self.excluded_models, self.excluded_apps = parse_apps_and_model_labels(options['exclude']) + self.format = options['format'] + + with transaction.atomic(using=self.using): + self.loaddata(fixture_labels) + + # Close the DB connection -- unless we're still in a transaction. This + # is required as a workaround for an edge case in MySQL: if the same + # connection is used to create tables, load data, and query, the query + # can return incorrect results. See Django #7572, MySQL #37735. + if transaction.get_autocommit(self.using): + connections[self.using].close() + + def loaddata(self, fixture_labels): + connection = connections[self.using] + + # Keep a count of the installed objects and fixtures + self.fixture_count = 0 + self.loaded_object_count = 0 + self.fixture_object_count = 0 + self.models = set() + + self.serialization_formats = serializers.get_public_serializer_formats() + # Forcing binary mode may be revisited after dropping Python 2 support (see #22399) + self.compression_formats = { + None: (open, 'rb'), + 'gz': (gzip.GzipFile, 'rb'), + 'zip': (SingleZipReader, 'r'), + 'stdin': (lambda *args: sys.stdin, None), + } + if has_bz2: + self.compression_formats['bz2'] = (bz2.BZ2File, 'r') + + # Django's test suite repeatedly tries to load initial_data fixtures + # from apps that don't have any fixtures. Because disabling constraint + # checks can be expensive on some database (especially MSSQL), bail + # out early if no fixtures are found. + for fixture_label in fixture_labels: + if self.find_fixtures(fixture_label): + break + else: + return + + with connection.constraint_checks_disabled(): + for fixture_label in fixture_labels: + self.load_label(fixture_label) + + # Since we disabled constraint checks, we must manually check for + # any invalid keys that might have been added + table_names = [model._meta.db_table for model in self.models] + try: + connection.check_constraints(table_names=table_names) + except Exception as e: + e.args = ("Problem installing fixtures: %s" % e,) + raise + + # If we found even one object in a fixture, we need to reset the + # database sequences. + if self.loaded_object_count > 0: + sequence_sql = connection.ops.sequence_reset_sql(no_style(), self.models) + if sequence_sql: + if self.verbosity >= 2: + self.stdout.write("Resetting sequences\n") + with connection.cursor() as cursor: + for line in sequence_sql: + cursor.execute(line) + + if self.verbosity >= 1: + if self.fixture_object_count == self.loaded_object_count: + self.stdout.write( + "Installed %d object(s) from %d fixture(s)" + % (self.loaded_object_count, self.fixture_count) + ) + else: + self.stdout.write( + "Installed %d object(s) (of %d) from %d fixture(s)" + % (self.loaded_object_count, self.fixture_object_count, self.fixture_count) + ) + + def load_label(self, fixture_label): + """Load fixtures files for a given label.""" + show_progress = self.verbosity >= 3 + for fixture_file, fixture_dir, fixture_name in self.find_fixtures(fixture_label): + _, ser_fmt, cmp_fmt = self.parse_name(os.path.basename(fixture_file)) + open_method, mode = self.compression_formats[cmp_fmt] + fixture = open_method(fixture_file, mode) + try: + self.fixture_count += 1 + objects_in_fixture = 0 + loaded_objects_in_fixture = 0 + if self.verbosity >= 2: + self.stdout.write( + "Installing %s fixture '%s' from %s." + % (ser_fmt, fixture_name, humanize(fixture_dir)) + ) + + objects = serializers.deserialize( + ser_fmt, fixture, using=self.using, ignorenonexistent=self.ignore, + ) + + for obj in objects: + objects_in_fixture += 1 + if (obj.object._meta.app_config in self.excluded_apps or + type(obj.object) in self.excluded_models): + continue + if router.allow_migrate_model(self.using, obj.object.__class__): + loaded_objects_in_fixture += 1 + self.models.add(obj.object.__class__) + try: + obj.save(using=self.using) + if show_progress: + self.stdout.write( + '\rProcessed %i object(s).' % loaded_objects_in_fixture, + ending='' + ) + # psycopg2 raises ValueError if data contains NUL chars. + except (DatabaseError, IntegrityError, ValueError) as e: + e.args = ("Could not load %(app_label)s.%(object_name)s(pk=%(pk)s): %(error_msg)s" % { + 'app_label': obj.object._meta.app_label, + 'object_name': obj.object._meta.object_name, + 'pk': obj.object.pk, + 'error_msg': e, + },) + raise + if objects and show_progress: + self.stdout.write('') # add a newline after progress indicator + self.loaded_object_count += loaded_objects_in_fixture + self.fixture_object_count += objects_in_fixture + except Exception as e: + if not isinstance(e, CommandError): + e.args = ("Problem installing fixture '%s': %s" % (fixture_file, e),) + raise + finally: + fixture.close() + + # Warn if the fixture we loaded contains 0 objects. + if objects_in_fixture == 0: + warnings.warn( + "No fixture data found for '%s'. (File format may be " + "invalid.)" % fixture_name, + RuntimeWarning + ) + + @functools.lru_cache(maxsize=None) + def find_fixtures(self, fixture_label): + """Find fixture files for a given label.""" + if fixture_label == READ_STDIN: + return [(READ_STDIN, None, READ_STDIN)] + + fixture_name, ser_fmt, cmp_fmt = self.parse_name(fixture_label) + databases = [self.using, None] + cmp_fmts = list(self.compression_formats) if cmp_fmt is None else [cmp_fmt] + ser_fmts = serializers.get_public_serializer_formats() if ser_fmt is None else [ser_fmt] + + if self.verbosity >= 2: + self.stdout.write("Loading '%s' fixtures..." % fixture_name) + + if os.path.isabs(fixture_name): + fixture_dirs = [os.path.dirname(fixture_name)] + fixture_name = os.path.basename(fixture_name) + else: + fixture_dirs = self.fixture_dirs + if os.path.sep in os.path.normpath(fixture_name): + fixture_dirs = [os.path.join(dir_, os.path.dirname(fixture_name)) + for dir_ in fixture_dirs] + fixture_name = os.path.basename(fixture_name) + + suffixes = ( + '.'.join(ext for ext in combo if ext) + for combo in product(databases, ser_fmts, cmp_fmts) + ) + targets = {'.'.join((fixture_name, suffix)) for suffix in suffixes} + + fixture_files = [] + for fixture_dir in fixture_dirs: + if self.verbosity >= 2: + self.stdout.write("Checking %s for fixtures..." % humanize(fixture_dir)) + fixture_files_in_dir = [] + path = os.path.join(fixture_dir, fixture_name) + for candidate in glob.iglob(glob.escape(path) + '*'): + if os.path.basename(candidate) in targets: + # Save the fixture_dir and fixture_name for future error messages. + fixture_files_in_dir.append((candidate, fixture_dir, fixture_name)) + + if self.verbosity >= 2 and not fixture_files_in_dir: + self.stdout.write("No fixture '%s' in %s." % + (fixture_name, humanize(fixture_dir))) + + # Check kept for backwards-compatibility; it isn't clear why + # duplicates are only allowed in different directories. + if len(fixture_files_in_dir) > 1: + raise CommandError( + "Multiple fixtures named '%s' in %s. Aborting." % + (fixture_name, humanize(fixture_dir))) + fixture_files.extend(fixture_files_in_dir) + + if not fixture_files: + raise CommandError("No fixture named '%s' found." % fixture_name) + + return fixture_files + + @cached_property + def fixture_dirs(self): + """ + Return a list of fixture directories. + + The list contains the 'fixtures' subdirectory of each installed + application, if it exists, the directories in FIXTURE_DIRS, and the + current directory. + """ + dirs = [] + fixture_dirs = settings.FIXTURE_DIRS + if len(fixture_dirs) != len(set(fixture_dirs)): + raise ImproperlyConfigured("settings.FIXTURE_DIRS contains duplicates.") + for app_config in apps.get_app_configs(): + app_label = app_config.label + app_dir = os.path.join(app_config.path, 'fixtures') + if app_dir in fixture_dirs: + raise ImproperlyConfigured( + "'%s' is a default fixture directory for the '%s' app " + "and cannot be listed in settings.FIXTURE_DIRS." % (app_dir, app_label) + ) + + if self.app_label and app_label != self.app_label: + continue + if os.path.isdir(app_dir): + dirs.append(app_dir) + dirs.extend(list(fixture_dirs)) + dirs.append('') + dirs = [os.path.abspath(os.path.realpath(d)) for d in dirs] + return dirs + + def parse_name(self, fixture_name): + """ + Split fixture name in name, serialization format, compression format. + """ + if fixture_name == READ_STDIN: + if not self.format: + raise CommandError('--format must be specified when reading from stdin.') + return READ_STDIN, self.format, 'stdin' + + parts = fixture_name.rsplit('.', 2) + + if len(parts) > 1 and parts[-1] in self.compression_formats: + cmp_fmt = parts[-1] + parts = parts[:-1] + else: + cmp_fmt = None + + if len(parts) > 1: + if parts[-1] in self.serialization_formats: + ser_fmt = parts[-1] + parts = parts[:-1] + else: + raise CommandError( + "Problem installing fixture '%s': %s is not a known " + "serialization format." % (''.join(parts[:-1]), parts[-1])) + else: + ser_fmt = None + + name = '.'.join(parts) + + return name, ser_fmt, cmp_fmt + + +class SingleZipReader(zipfile.ZipFile): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if len(self.namelist()) != 1: + raise ValueError("Zip-compressed fixtures must contain one file.") + + def read(self): + return zipfile.ZipFile.read(self, self.namelist()[0]) + + +def humanize(dirname): + return "'%s'" % dirname if dirname else 'absolute path' diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/makemessages.py b/env/lib/python3.5/site-packages/django/core/management/commands/makemessages.py new file mode 100644 index 0000000..d077648 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/makemessages.py @@ -0,0 +1,687 @@ +import fnmatch +import glob +import os +import re +import sys +from functools import total_ordering +from itertools import dropwhile + +import django +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.core.files.temp import NamedTemporaryFile +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import ( + find_command, handle_extensions, popen_wrapper, +) +from django.utils.encoding import DEFAULT_LOCALE_ENCODING +from django.utils.functional import cached_property +from django.utils.jslex import prepare_js_for_gettext +from django.utils.text import get_text_list +from django.utils.translation import templatize + +plural_forms_re = re.compile(r'^(?P"Plural-Forms.+?\\n")\s*$', re.MULTILINE | re.DOTALL) +STATUS_OK = 0 +NO_LOCALE_DIR = object() + + +def check_programs(*programs): + for program in programs: + if find_command(program) is None: + raise CommandError( + "Can't find %s. Make sure you have GNU gettext tools 0.15 or " + "newer installed." % program + ) + + +@total_ordering +class TranslatableFile: + def __init__(self, dirpath, file_name, locale_dir): + self.file = file_name + self.dirpath = dirpath + self.locale_dir = locale_dir + + def __repr__(self): + return "<%s: %s>" % ( + self.__class__.__name__, + os.sep.join([self.dirpath, self.file]), + ) + + def __eq__(self, other): + return self.path == other.path + + def __lt__(self, other): + return self.path < other.path + + @property + def path(self): + return os.path.join(self.dirpath, self.file) + + +class BuildFile: + """ + Represent the state of a translatable file during the build process. + """ + def __init__(self, command, domain, translatable): + self.command = command + self.domain = domain + self.translatable = translatable + + @cached_property + def is_templatized(self): + if self.domain == 'djangojs': + return self.command.gettext_version < (0, 18, 3) + elif self.domain == 'django': + file_ext = os.path.splitext(self.translatable.file)[1] + return file_ext != '.py' + return False + + @cached_property + def path(self): + return self.translatable.path + + @cached_property + def work_path(self): + """ + Path to a file which is being fed into GNU gettext pipeline. This may + be either a translatable or its preprocessed version. + """ + if not self.is_templatized: + return self.path + extension = { + 'djangojs': 'c', + 'django': 'py', + }.get(self.domain) + filename = '%s.%s' % (self.translatable.file, extension) + return os.path.join(self.translatable.dirpath, filename) + + def preprocess(self): + """ + Preprocess (if necessary) a translatable file before passing it to + xgettext GNU gettext utility. + """ + if not self.is_templatized: + return + + encoding = settings.FILE_CHARSET if self.command.settings_available else 'utf-8' + with open(self.path, 'r', encoding=encoding) as fp: + src_data = fp.read() + + if self.domain == 'djangojs': + content = prepare_js_for_gettext(src_data) + elif self.domain == 'django': + content = templatize(src_data, origin=self.path[2:]) + + with open(self.work_path, 'w', encoding='utf-8') as fp: + fp.write(content) + + def postprocess_messages(self, msgs): + """ + Postprocess messages generated by xgettext GNU gettext utility. + + Transform paths as if these messages were generated from original + translatable files rather than from preprocessed versions. + """ + if not self.is_templatized: + return msgs + + # Remove '.py' suffix + if os.name == 'nt': + # Preserve '.\' prefix on Windows to respect gettext behavior + old_path = self.work_path + new_path = self.path + else: + old_path = self.work_path[2:] + new_path = self.path[2:] + + return re.sub( + r'^(#: .*)(' + re.escape(old_path) + r')', + lambda match: match.group().replace(old_path, new_path), + msgs, + flags=re.MULTILINE + ) + + def cleanup(self): + """ + Remove a preprocessed copy of a translatable file (if any). + """ + if self.is_templatized: + # This check is needed for the case of a symlinked file and its + # source being processed inside a single group (locale dir); + # removing either of those two removes both. + if os.path.exists(self.work_path): + os.unlink(self.work_path) + + +def normalize_eols(raw_contents): + """ + Take a block of raw text that will be passed through str.splitlines() to + get universal newlines treatment. + + Return the resulting block of text with normalized `\n` EOL sequences ready + to be written to disk using current platform's native EOLs. + """ + lines_list = raw_contents.splitlines() + # Ensure last line has its EOL + if lines_list and lines_list[-1]: + lines_list.append('') + return '\n'.join(lines_list) + + +def write_pot_file(potfile, msgs): + """ + Write the `potfile` with the `msgs` contents, making sure its format is + valid. + """ + pot_lines = msgs.splitlines() + if os.path.exists(potfile): + # Strip the header + lines = dropwhile(len, pot_lines) + else: + lines = [] + found, header_read = False, False + for line in pot_lines: + if not found and not header_read: + if 'charset=CHARSET' in line: + found = True + line = line.replace('charset=CHARSET', 'charset=UTF-8') + if not line and not found: + header_read = True + lines.append(line) + msgs = '\n'.join(lines) + # Force newlines of POT files to '\n' to work around + # https://savannah.gnu.org/bugs/index.php?52395 + with open(potfile, 'a', encoding='utf-8', newline='\n') as fp: + fp.write(msgs) + + +class Command(BaseCommand): + help = ( + "Runs over the entire source tree of the current directory and " + "pulls out all strings marked for translation. It creates (or updates) a message " + "file in the conf/locale (in the django tree) or locale (for projects and " + "applications) directory.\n\nYou must run this command with one of either the " + "--locale, --exclude, or --all options." + ) + + translatable_file_class = TranslatableFile + build_file_class = BuildFile + + requires_system_checks = False + + msgmerge_options = ['-q', '--previous'] + msguniq_options = ['--to-code=utf-8'] + msgattrib_options = ['--no-obsolete'] + xgettext_options = ['--from-code=UTF-8', '--add-comments=Translators'] + + def add_arguments(self, parser): + parser.add_argument( + '--locale', '-l', default=[], dest='locale', action='append', + help='Creates or updates the message files for the given locale(s) (e.g. pt_BR). ' + 'Can be used multiple times.', + ) + parser.add_argument( + '--exclude', '-x', default=[], dest='exclude', action='append', + help='Locales to exclude. Default is none. Can be used multiple times.', + ) + parser.add_argument( + '--domain', '-d', default='django', dest='domain', + help='The domain of the message files (default: "django").', + ) + parser.add_argument( + '--all', '-a', action='store_true', dest='all', + help='Updates the message files for all existing locales.', + ) + parser.add_argument( + '--extension', '-e', dest='extensions', action='append', + help='The file extension(s) to examine (default: "html,txt,py", or "js" ' + 'if the domain is "djangojs"). Separate multiple extensions with ' + 'commas, or use -e multiple times.', + ) + parser.add_argument( + '--symlinks', '-s', action='store_true', dest='symlinks', + help='Follows symlinks to directories when examining source code ' + 'and templates for translation strings.', + ) + parser.add_argument( + '--ignore', '-i', action='append', dest='ignore_patterns', + default=[], metavar='PATTERN', + help='Ignore files or directories matching this glob-style pattern. ' + 'Use multiple times to ignore more.', + ) + parser.add_argument( + '--no-default-ignore', action='store_false', dest='use_default_ignore_patterns', + help="Don't ignore the common glob-style patterns 'CVS', '.*', '*~' and '*.pyc'.", + ) + parser.add_argument( + '--no-wrap', action='store_true', dest='no_wrap', + help="Don't break long message lines into several lines.", + ) + parser.add_argument( + '--no-location', action='store_true', dest='no_location', + help="Don't write '#: filename:line' lines.", + ) + parser.add_argument( + '--add-location', dest='add_location', + choices=('full', 'file', 'never'), const='full', nargs='?', + help=( + "Controls '#: filename:line' lines. If the option is 'full' " + "(the default if not given), the lines include both file name " + "and line number. If it's 'file', the line number is omitted. If " + "it's 'never', the lines are suppressed (same as --no-location). " + "--add-location requires gettext 0.19 or newer." + ), + ) + parser.add_argument( + '--no-obsolete', action='store_true', dest='no_obsolete', + help="Remove obsolete message strings.", + ) + parser.add_argument( + '--keep-pot', action='store_true', dest='keep_pot', + help="Keep .pot file after making messages. Useful when debugging.", + ) + + def handle(self, *args, **options): + locale = options['locale'] + exclude = options['exclude'] + self.domain = options['domain'] + self.verbosity = options['verbosity'] + process_all = options['all'] + extensions = options['extensions'] + self.symlinks = options['symlinks'] + + ignore_patterns = options['ignore_patterns'] + if options['use_default_ignore_patterns']: + ignore_patterns += ['CVS', '.*', '*~', '*.pyc'] + self.ignore_patterns = list(set(ignore_patterns)) + + # Avoid messing with mutable class variables + if options['no_wrap']: + self.msgmerge_options = self.msgmerge_options[:] + ['--no-wrap'] + self.msguniq_options = self.msguniq_options[:] + ['--no-wrap'] + self.msgattrib_options = self.msgattrib_options[:] + ['--no-wrap'] + self.xgettext_options = self.xgettext_options[:] + ['--no-wrap'] + if options['no_location']: + self.msgmerge_options = self.msgmerge_options[:] + ['--no-location'] + self.msguniq_options = self.msguniq_options[:] + ['--no-location'] + self.msgattrib_options = self.msgattrib_options[:] + ['--no-location'] + self.xgettext_options = self.xgettext_options[:] + ['--no-location'] + if options['add_location']: + if self.gettext_version < (0, 19): + raise CommandError( + "The --add-location option requires gettext 0.19 or later. " + "You have %s." % '.'.join(str(x) for x in self.gettext_version) + ) + arg_add_location = "--add-location=%s" % options['add_location'] + self.msgmerge_options = self.msgmerge_options[:] + [arg_add_location] + self.msguniq_options = self.msguniq_options[:] + [arg_add_location] + self.msgattrib_options = self.msgattrib_options[:] + [arg_add_location] + self.xgettext_options = self.xgettext_options[:] + [arg_add_location] + + self.no_obsolete = options['no_obsolete'] + self.keep_pot = options['keep_pot'] + + if self.domain not in ('django', 'djangojs'): + raise CommandError("currently makemessages only supports domains " + "'django' and 'djangojs'") + if self.domain == 'djangojs': + exts = extensions or ['js'] + else: + exts = extensions or ['html', 'txt', 'py'] + self.extensions = handle_extensions(exts) + + if (locale is None and not exclude and not process_all) or self.domain is None: + raise CommandError( + "Type '%s help %s' for usage information." + % (os.path.basename(sys.argv[0]), sys.argv[1]) + ) + + if self.verbosity > 1: + self.stdout.write( + 'examining files with the extensions: %s\n' + % get_text_list(list(self.extensions), 'and') + ) + + self.invoked_for_django = False + self.locale_paths = [] + self.default_locale_path = None + if os.path.isdir(os.path.join('conf', 'locale')): + self.locale_paths = [os.path.abspath(os.path.join('conf', 'locale'))] + self.default_locale_path = self.locale_paths[0] + self.invoked_for_django = True + else: + if self.settings_available: + self.locale_paths.extend(settings.LOCALE_PATHS) + # Allow to run makemessages inside an app dir + if os.path.isdir('locale'): + self.locale_paths.append(os.path.abspath('locale')) + if self.locale_paths: + self.default_locale_path = self.locale_paths[0] + if not os.path.exists(self.default_locale_path): + os.makedirs(self.default_locale_path) + + # Build locale list + looks_like_locale = re.compile(r'[a-z]{2}') + locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % self.default_locale_path)) + all_locales = [ + lang_code for lang_code in map(os.path.basename, locale_dirs) + if looks_like_locale.match(lang_code) + ] + + # Account for excluded locales + if process_all: + locales = all_locales + else: + locales = locale or all_locales + locales = set(locales).difference(exclude) + + if locales: + check_programs('msguniq', 'msgmerge', 'msgattrib') + + check_programs('xgettext') + + try: + potfiles = self.build_potfiles() + + # Build po files for each selected locale + for locale in locales: + if self.verbosity > 0: + self.stdout.write("processing locale %s\n" % locale) + for potfile in potfiles: + self.write_po_file(potfile, locale) + finally: + if not self.keep_pot: + self.remove_potfiles() + + @cached_property + def gettext_version(self): + # Gettext tools will output system-encoded bytestrings instead of UTF-8, + # when looking up the version. It's especially a problem on Windows. + out, err, status = popen_wrapper( + ['xgettext', '--version'], + stdout_encoding=DEFAULT_LOCALE_ENCODING, + ) + m = re.search(r'(\d+)\.(\d+)\.?(\d+)?', out) + if m: + return tuple(int(d) for d in m.groups() if d is not None) + else: + raise CommandError("Unable to get gettext version. Is it installed?") + + @cached_property + def settings_available(self): + try: + settings.LOCALE_PATHS + except ImproperlyConfigured: + if self.verbosity > 1: + self.stderr.write("Running without configured settings.") + return False + return True + + def build_potfiles(self): + """ + Build pot files and apply msguniq to them. + """ + file_list = self.find_files(".") + self.remove_potfiles() + self.process_files(file_list) + potfiles = [] + for path in self.locale_paths: + potfile = os.path.join(path, '%s.pot' % self.domain) + if not os.path.exists(potfile): + continue + args = ['msguniq'] + self.msguniq_options + [potfile] + msgs, errors, status = popen_wrapper(args) + if errors: + if status != STATUS_OK: + raise CommandError( + "errors happened while running msguniq\n%s" % errors) + elif self.verbosity > 0: + self.stdout.write(errors) + msgs = normalize_eols(msgs) + with open(potfile, 'w', encoding='utf-8') as fp: + fp.write(msgs) + potfiles.append(potfile) + return potfiles + + def remove_potfiles(self): + for path in self.locale_paths: + pot_path = os.path.join(path, '%s.pot' % self.domain) + if os.path.exists(pot_path): + os.unlink(pot_path) + + def find_files(self, root): + """ + Get all files in the given root. Also check that there is a matching + locale dir for each file. + """ + def is_ignored(path, ignore_patterns): + """ + Check if the given path should be ignored or not. + """ + filename = os.path.basename(path) + + def ignore(pattern): + return fnmatch.fnmatchcase(filename, pattern) or fnmatch.fnmatchcase(path, pattern) + + return any(ignore(pattern) for pattern in ignore_patterns) + + ignore_patterns = [os.path.normcase(p) for p in self.ignore_patterns] + dir_suffixes = {'%s*' % path_sep for path_sep in {'/', os.sep}} + norm_patterns = [] + for p in ignore_patterns: + for dir_suffix in dir_suffixes: + if p.endswith(dir_suffix): + norm_patterns.append(p[:-len(dir_suffix)]) + break + else: + norm_patterns.append(p) + + all_files = [] + ignored_roots = [] + if self.settings_available: + ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings.STATIC_ROOT) if p] + for dirpath, dirnames, filenames in os.walk(root, topdown=True, followlinks=self.symlinks): + for dirname in dirnames[:]: + if (is_ignored(os.path.normpath(os.path.join(dirpath, dirname)), norm_patterns) or + os.path.join(os.path.abspath(dirpath), dirname) in ignored_roots): + dirnames.remove(dirname) + if self.verbosity > 1: + self.stdout.write('ignoring directory %s\n' % dirname) + elif dirname == 'locale': + dirnames.remove(dirname) + self.locale_paths.insert(0, os.path.join(os.path.abspath(dirpath), dirname)) + for filename in filenames: + file_path = os.path.normpath(os.path.join(dirpath, filename)) + file_ext = os.path.splitext(filename)[1] + if file_ext not in self.extensions or is_ignored(file_path, self.ignore_patterns): + if self.verbosity > 1: + self.stdout.write('ignoring file %s in %s\n' % (filename, dirpath)) + else: + locale_dir = None + for path in self.locale_paths: + if os.path.abspath(dirpath).startswith(os.path.dirname(path)): + locale_dir = path + break + locale_dir = locale_dir or self.default_locale_path or NO_LOCALE_DIR + all_files.append(self.translatable_file_class(dirpath, filename, locale_dir)) + return sorted(all_files) + + def process_files(self, file_list): + """ + Group translatable files by locale directory and run pot file build + process for each group. + """ + file_groups = {} + for translatable in file_list: + file_group = file_groups.setdefault(translatable.locale_dir, []) + file_group.append(translatable) + for locale_dir, files in file_groups.items(): + self.process_locale_dir(locale_dir, files) + + def process_locale_dir(self, locale_dir, files): + """ + Extract translatable literals from the specified files, creating or + updating the POT file for a given locale directory. + + Use the xgettext GNU gettext utility. + """ + build_files = [] + for translatable in files: + if self.verbosity > 1: + self.stdout.write('processing file %s in %s\n' % ( + translatable.file, translatable.dirpath + )) + if self.domain not in ('djangojs', 'django'): + continue + build_file = self.build_file_class(self, self.domain, translatable) + try: + build_file.preprocess() + except UnicodeDecodeError as e: + self.stdout.write( + 'UnicodeDecodeError: skipped file %s in %s (reason: %s)' % ( + translatable.file, translatable.dirpath, e, + ) + ) + continue + build_files.append(build_file) + + if self.domain == 'djangojs': + is_templatized = build_file.is_templatized + args = [ + 'xgettext', + '-d', self.domain, + '--language=%s' % ('C' if is_templatized else 'JavaScript',), + '--keyword=gettext_noop', + '--keyword=gettext_lazy', + '--keyword=ngettext_lazy:1,2', + '--keyword=pgettext:1c,2', + '--keyword=npgettext:1c,2,3', + '--output=-', + ] + elif self.domain == 'django': + args = [ + 'xgettext', + '-d', self.domain, + '--language=Python', + '--keyword=gettext_noop', + '--keyword=gettext_lazy', + '--keyword=ngettext_lazy:1,2', + '--keyword=ugettext_noop', + '--keyword=ugettext_lazy', + '--keyword=ungettext_lazy:1,2', + '--keyword=pgettext:1c,2', + '--keyword=npgettext:1c,2,3', + '--keyword=pgettext_lazy:1c,2', + '--keyword=npgettext_lazy:1c,2,3', + '--output=-', + ] + else: + return + + input_files = [bf.work_path for bf in build_files] + with NamedTemporaryFile(mode='w+') as input_files_list: + input_files_list.write(('\n'.join(input_files))) + input_files_list.flush() + args.extend(['--files-from', input_files_list.name]) + args.extend(self.xgettext_options) + msgs, errors, status = popen_wrapper(args) + + if errors: + if status != STATUS_OK: + for build_file in build_files: + build_file.cleanup() + raise CommandError( + 'errors happened while running xgettext on %s\n%s' % + ('\n'.join(input_files), errors) + ) + elif self.verbosity > 0: + # Print warnings + self.stdout.write(errors) + + if msgs: + if locale_dir is NO_LOCALE_DIR: + file_path = os.path.normpath(build_files[0].path) + raise CommandError( + 'Unable to find a locale path to store translations for ' + 'file %s' % file_path + ) + for build_file in build_files: + msgs = build_file.postprocess_messages(msgs) + potfile = os.path.join(locale_dir, '%s.pot' % self.domain) + write_pot_file(potfile, msgs) + + for build_file in build_files: + build_file.cleanup() + + def write_po_file(self, potfile, locale): + """ + Create or update the PO file for self.domain and `locale`. + Use contents of the existing `potfile`. + + Use msgmerge and msgattrib GNU gettext utilities. + """ + basedir = os.path.join(os.path.dirname(potfile), locale, 'LC_MESSAGES') + if not os.path.isdir(basedir): + os.makedirs(basedir) + pofile = os.path.join(basedir, '%s.po' % self.domain) + + if os.path.exists(pofile): + args = ['msgmerge'] + self.msgmerge_options + [pofile, potfile] + msgs, errors, status = popen_wrapper(args) + if errors: + if status != STATUS_OK: + raise CommandError( + "errors happened while running msgmerge\n%s" % errors) + elif self.verbosity > 0: + self.stdout.write(errors) + else: + with open(potfile, 'r', encoding='utf-8') as fp: + msgs = fp.read() + if not self.invoked_for_django: + msgs = self.copy_plural_forms(msgs, locale) + msgs = normalize_eols(msgs) + msgs = msgs.replace( + "#. #-#-#-#-# %s.pot (PACKAGE VERSION) #-#-#-#-#\n" % self.domain, "") + with open(pofile, 'w', encoding='utf-8') as fp: + fp.write(msgs) + + if self.no_obsolete: + args = ['msgattrib'] + self.msgattrib_options + ['-o', pofile, pofile] + msgs, errors, status = popen_wrapper(args) + if errors: + if status != STATUS_OK: + raise CommandError( + "errors happened while running msgattrib\n%s" % errors) + elif self.verbosity > 0: + self.stdout.write(errors) + + def copy_plural_forms(self, msgs, locale): + """ + Copy plural forms header contents from a Django catalog of locale to + the msgs string, inserting it at the right place. msgs should be the + contents of a newly created .po file. + """ + django_dir = os.path.normpath(os.path.join(os.path.dirname(django.__file__))) + if self.domain == 'djangojs': + domains = ('djangojs', 'django') + else: + domains = ('django',) + for domain in domains: + django_po = os.path.join(django_dir, 'conf', 'locale', locale, 'LC_MESSAGES', '%s.po' % domain) + if os.path.exists(django_po): + with open(django_po, 'r', encoding='utf-8') as fp: + m = plural_forms_re.search(fp.read()) + if m: + plural_form_line = m.group('value') + if self.verbosity > 1: + self.stdout.write("copying plural forms: %s\n" % plural_form_line) + lines = [] + found = False + for line in msgs.splitlines(): + if not found and (not line or plural_forms_re.search(line)): + line = plural_form_line + found = True + lines.append(line) + msgs = '\n'.join(lines) + break + return msgs diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/makemigrations.py b/env/lib/python3.5/site-packages/django/core/management/commands/makemigrations.py new file mode 100644 index 0000000..1a166c6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/makemigrations.py @@ -0,0 +1,313 @@ +import os +import sys +from itertools import takewhile + +from django.apps import apps +from django.conf import settings +from django.core.management.base import ( + BaseCommand, CommandError, no_translations, +) +from django.db import DEFAULT_DB_ALIAS, connections, router +from django.db.migrations import Migration +from django.db.migrations.autodetector import MigrationAutodetector +from django.db.migrations.loader import MigrationLoader +from django.db.migrations.questioner import ( + InteractiveMigrationQuestioner, MigrationQuestioner, + NonInteractiveMigrationQuestioner, +) +from django.db.migrations.state import ProjectState +from django.db.migrations.utils import get_migration_name_timestamp +from django.db.migrations.writer import MigrationWriter + + +class Command(BaseCommand): + help = "Creates new migration(s) for apps." + + def add_arguments(self, parser): + parser.add_argument( + 'args', metavar='app_label', nargs='*', + help='Specify the app label(s) to create migrations for.', + ) + parser.add_argument( + '--dry-run', action='store_true', dest='dry_run', + help="Just show what migrations would be made; don't actually write them.", + ) + parser.add_argument( + '--merge', action='store_true', dest='merge', + help="Enable fixing of migration conflicts.", + ) + parser.add_argument( + '--empty', action='store_true', dest='empty', + help="Create an empty migration.", + ) + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help='Tells Django to NOT prompt the user for input of any kind.', + ) + parser.add_argument( + '-n', '--name', action='store', dest='name', default=None, + help="Use this name for migration file(s).", + ) + parser.add_argument( + '--check', action='store_true', dest='check_changes', + help='Exit with a non-zero status if model changes are missing migrations.', + ) + + @no_translations + def handle(self, *app_labels, **options): + self.verbosity = options['verbosity'] + self.interactive = options['interactive'] + self.dry_run = options['dry_run'] + self.merge = options['merge'] + self.empty = options['empty'] + self.migration_name = options['name'] + check_changes = options['check_changes'] + + # Make sure the app they asked for exists + app_labels = set(app_labels) + bad_app_labels = set() + for app_label in app_labels: + try: + apps.get_app_config(app_label) + except LookupError: + bad_app_labels.add(app_label) + if bad_app_labels: + for app_label in bad_app_labels: + if '.' in app_label: + self.stderr.write( + "'%s' is not a valid app label. Did you mean '%s'?" % ( + app_label, + app_label.split('.')[-1], + ) + ) + else: + self.stderr.write("App '%s' could not be found. Is it in INSTALLED_APPS?" % app_label) + sys.exit(2) + + # Load the current graph state. Pass in None for the connection so + # the loader doesn't try to resolve replaced migrations from DB. + loader = MigrationLoader(None, ignore_no_migrations=True) + + # Raise an error if any migrations are applied before their dependencies. + consistency_check_labels = {config.label for config in apps.get_app_configs()} + # Non-default databases are only checked if database routers used. + aliases_to_check = connections if settings.DATABASE_ROUTERS else [DEFAULT_DB_ALIAS] + for alias in sorted(aliases_to_check): + connection = connections[alias] + if (connection.settings_dict['ENGINE'] != 'django.db.backends.dummy' and any( + # At least one model must be migrated to the database. + router.allow_migrate(connection.alias, app_label, model_name=model._meta.object_name) + for app_label in consistency_check_labels + for model in apps.get_app_config(app_label).get_models() + )): + loader.check_consistent_history(connection) + + # Before anything else, see if there's conflicting apps and drop out + # hard if there are any and they don't want to merge + conflicts = loader.detect_conflicts() + + # If app_labels is specified, filter out conflicting migrations for unspecified apps + if app_labels: + conflicts = { + app_label: conflict for app_label, conflict in conflicts.items() + if app_label in app_labels + } + + if conflicts and not self.merge: + name_str = "; ".join( + "%s in %s" % (", ".join(names), app) + for app, names in conflicts.items() + ) + raise CommandError( + "Conflicting migrations detected; multiple leaf nodes in the " + "migration graph: (%s).\nTo fix them run " + "'python manage.py makemigrations --merge'" % name_str + ) + + # If they want to merge and there's nothing to merge, then politely exit + if self.merge and not conflicts: + self.stdout.write("No conflicts detected to merge.") + return + + # If they want to merge and there is something to merge, then + # divert into the merge code + if self.merge and conflicts: + return self.handle_merge(loader, conflicts) + + if self.interactive: + questioner = InteractiveMigrationQuestioner(specified_apps=app_labels, dry_run=self.dry_run) + else: + questioner = NonInteractiveMigrationQuestioner(specified_apps=app_labels, dry_run=self.dry_run) + # Set up autodetector + autodetector = MigrationAutodetector( + loader.project_state(), + ProjectState.from_apps(apps), + questioner, + ) + + # If they want to make an empty migration, make one for each app + if self.empty: + if not app_labels: + raise CommandError("You must supply at least one app label when using --empty.") + # Make a fake changes() result we can pass to arrange_for_graph + changes = { + app: [Migration("custom", app)] + for app in app_labels + } + changes = autodetector.arrange_for_graph( + changes=changes, + graph=loader.graph, + migration_name=self.migration_name, + ) + self.write_migration_files(changes) + return + + # Detect changes + changes = autodetector.changes( + graph=loader.graph, + trim_to_apps=app_labels or None, + convert_apps=app_labels or None, + migration_name=self.migration_name, + ) + + if not changes: + # No changes? Tell them. + if self.verbosity >= 1: + if app_labels: + if len(app_labels) == 1: + self.stdout.write("No changes detected in app '%s'" % app_labels.pop()) + else: + self.stdout.write("No changes detected in apps '%s'" % ("', '".join(app_labels))) + else: + self.stdout.write("No changes detected") + else: + self.write_migration_files(changes) + if check_changes: + sys.exit(1) + + def write_migration_files(self, changes): + """ + Take a changes dict and write them out as migration files. + """ + directory_created = {} + for app_label, app_migrations in changes.items(): + if self.verbosity >= 1: + self.stdout.write(self.style.MIGRATE_HEADING("Migrations for '%s':" % app_label) + "\n") + for migration in app_migrations: + # Describe the migration + writer = MigrationWriter(migration) + if self.verbosity >= 1: + # Display a relative path if it's below the current working + # directory, or an absolute path otherwise. + try: + migration_string = os.path.relpath(writer.path) + except ValueError: + migration_string = writer.path + if migration_string.startswith('..'): + migration_string = writer.path + self.stdout.write(" %s\n" % (self.style.MIGRATE_LABEL(migration_string),)) + for operation in migration.operations: + self.stdout.write(" - %s\n" % operation.describe()) + if not self.dry_run: + # Write the migrations file to the disk. + migrations_directory = os.path.dirname(writer.path) + if not directory_created.get(app_label): + if not os.path.isdir(migrations_directory): + os.mkdir(migrations_directory) + init_path = os.path.join(migrations_directory, "__init__.py") + if not os.path.isfile(init_path): + open(init_path, "w").close() + # We just do this once per app + directory_created[app_label] = True + migration_string = writer.as_string() + with open(writer.path, "w", encoding='utf-8') as fh: + fh.write(migration_string) + elif self.verbosity == 3: + # Alternatively, makemigrations --dry-run --verbosity 3 + # will output the migrations to stdout rather than saving + # the file to the disk. + self.stdout.write(self.style.MIGRATE_HEADING( + "Full migrations file '%s':" % writer.filename) + "\n" + ) + self.stdout.write("%s\n" % writer.as_string()) + + def handle_merge(self, loader, conflicts): + """ + Handles merging together conflicted migrations interactively, + if it's safe; otherwise, advises on how to fix it. + """ + if self.interactive: + questioner = InteractiveMigrationQuestioner() + else: + questioner = MigrationQuestioner(defaults={'ask_merge': True}) + + for app_label, migration_names in conflicts.items(): + # Grab out the migrations in question, and work out their + # common ancestor. + merge_migrations = [] + for migration_name in migration_names: + migration = loader.get_migration(app_label, migration_name) + migration.ancestry = [ + mig for mig in loader.graph.forwards_plan((app_label, migration_name)) + if mig[0] == migration.app_label + ] + merge_migrations.append(migration) + + def all_items_equal(seq): + return all(item == seq[0] for item in seq[1:]) + + merge_migrations_generations = zip(*(m.ancestry for m in merge_migrations)) + common_ancestor_count = sum(1 for common_ancestor_generation + in takewhile(all_items_equal, merge_migrations_generations)) + if not common_ancestor_count: + raise ValueError("Could not find common ancestor of %s" % migration_names) + # Now work out the operations along each divergent branch + for migration in merge_migrations: + migration.branch = migration.ancestry[common_ancestor_count:] + migrations_ops = (loader.get_migration(node_app, node_name).operations + for node_app, node_name in migration.branch) + migration.merged_operations = sum(migrations_ops, []) + # In future, this could use some of the Optimizer code + # (can_optimize_through) to automatically see if they're + # mergeable. For now, we always just prompt the user. + if self.verbosity > 0: + self.stdout.write(self.style.MIGRATE_HEADING("Merging %s" % app_label)) + for migration in merge_migrations: + self.stdout.write(self.style.MIGRATE_LABEL(" Branch %s" % migration.name)) + for operation in migration.merged_operations: + self.stdout.write(" - %s\n" % operation.describe()) + if questioner.ask_merge(app_label): + # If they still want to merge it, then write out an empty + # file depending on the migrations needing merging. + numbers = [ + MigrationAutodetector.parse_number(migration.name) + for migration in merge_migrations + ] + try: + biggest_number = max(x for x in numbers if x is not None) + except ValueError: + biggest_number = 1 + subclass = type("Migration", (Migration,), { + "dependencies": [(app_label, migration.name) for migration in merge_migrations], + }) + migration_name = "%04i_%s" % ( + biggest_number + 1, + self.migration_name or ("merge_%s" % get_migration_name_timestamp()) + ) + new_migration = subclass(migration_name, app_label) + writer = MigrationWriter(new_migration) + + if not self.dry_run: + # Write the merge migrations file to the disk + with open(writer.path, "w", encoding='utf-8') as fh: + fh.write(writer.as_string()) + if self.verbosity > 0: + self.stdout.write("\nCreated new merge migration %s" % writer.path) + elif self.verbosity == 3: + # Alternatively, makemigrations --merge --dry-run --verbosity 3 + # will output the merge migrations to stdout rather than saving + # the file to the disk. + self.stdout.write(self.style.MIGRATE_HEADING( + "Full merge migrations file '%s':" % writer.filename) + "\n" + ) + self.stdout.write("%s\n" % writer.as_string()) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/migrate.py b/env/lib/python3.5/site-packages/django/core/management/commands/migrate.py new file mode 100644 index 0000000..0e27eaa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/migrate.py @@ -0,0 +1,310 @@ +import time +from collections import OrderedDict +from importlib import import_module + +from django.apps import apps +from django.core.checks import Tags, run_checks +from django.core.management.base import ( + BaseCommand, CommandError, no_translations, +) +from django.core.management.sql import ( + emit_post_migrate_signal, emit_pre_migrate_signal, +) +from django.db import DEFAULT_DB_ALIAS, connections, router +from django.db.migrations.autodetector import MigrationAutodetector +from django.db.migrations.executor import MigrationExecutor +from django.db.migrations.loader import AmbiguityError +from django.db.migrations.state import ModelState, ProjectState +from django.utils.module_loading import module_has_submodule + + +class Command(BaseCommand): + help = "Updates database schema. Manages both apps with migrations and those without." + + def add_arguments(self, parser): + parser.add_argument( + 'app_label', nargs='?', + help='App label of an application to synchronize the state.', + ) + parser.add_argument( + 'migration_name', nargs='?', + help='Database state will be brought to the state after that ' + 'migration. Use the name "zero" to unapply all migrations.', + ) + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help='Tells Django to NOT prompt the user for input of any kind.', + ) + parser.add_argument( + '--database', action='store', dest='database', + default=DEFAULT_DB_ALIAS, + help='Nominates a database to synchronize. Defaults to the "default" database.', + ) + parser.add_argument( + '--fake', action='store_true', dest='fake', + help='Mark migrations as run without actually running them.', + ) + parser.add_argument( + '--fake-initial', action='store_true', dest='fake_initial', + help='Detect if tables already exist and fake-apply initial migrations if so. Make sure ' + 'that the current database schema matches your initial migration before using this ' + 'flag. Django will only check for an existing table name.', + ) + parser.add_argument( + '--run-syncdb', action='store_true', dest='run_syncdb', + help='Creates tables for apps without migrations.', + ) + + def _run_checks(self, **kwargs): + issues = run_checks(tags=[Tags.database]) + issues.extend(super()._run_checks(**kwargs)) + return issues + + @no_translations + def handle(self, *args, **options): + + self.verbosity = options['verbosity'] + self.interactive = options['interactive'] + + # Import the 'management' module within each installed app, to register + # dispatcher events. + for app_config in apps.get_app_configs(): + if module_has_submodule(app_config.module, "management"): + import_module('.management', app_config.name) + + # Get the database we're operating from + db = options['database'] + connection = connections[db] + + # Hook for backends needing any database preparation + connection.prepare_database() + # Work out which apps have migrations and which do not + executor = MigrationExecutor(connection, self.migration_progress_callback) + + # Raise an error if any migrations are applied before their dependencies. + executor.loader.check_consistent_history(connection) + + # Before anything else, see if there's conflicting apps and drop out + # hard if there are any + conflicts = executor.loader.detect_conflicts() + if conflicts: + name_str = "; ".join( + "%s in %s" % (", ".join(names), app) + for app, names in conflicts.items() + ) + raise CommandError( + "Conflicting migrations detected; multiple leaf nodes in the " + "migration graph: (%s).\nTo fix them run " + "'python manage.py makemigrations --merge'" % name_str + ) + + # If they supplied command line arguments, work out what they mean. + target_app_labels_only = True + if options['app_label'] and options['migration_name']: + app_label, migration_name = options['app_label'], options['migration_name'] + if app_label not in executor.loader.migrated_apps: + raise CommandError( + "App '%s' does not have migrations." % app_label + ) + if migration_name == "zero": + targets = [(app_label, None)] + else: + try: + migration = executor.loader.get_migration_by_prefix(app_label, migration_name) + except AmbiguityError: + raise CommandError( + "More than one migration matches '%s' in app '%s'. " + "Please be more specific." % + (migration_name, app_label) + ) + except KeyError: + raise CommandError("Cannot find a migration matching '%s' from app '%s'." % ( + migration_name, app_label)) + targets = [(app_label, migration.name)] + target_app_labels_only = False + elif options['app_label']: + app_label = options['app_label'] + if app_label not in executor.loader.migrated_apps: + raise CommandError( + "App '%s' does not have migrations." % app_label + ) + targets = [key for key in executor.loader.graph.leaf_nodes() if key[0] == app_label] + else: + targets = executor.loader.graph.leaf_nodes() + + plan = executor.migration_plan(targets) + run_syncdb = options['run_syncdb'] and executor.loader.unmigrated_apps + + # Print some useful info + if self.verbosity >= 1: + self.stdout.write(self.style.MIGRATE_HEADING("Operations to perform:")) + if run_syncdb: + self.stdout.write( + self.style.MIGRATE_LABEL(" Synchronize unmigrated apps: ") + + (", ".join(sorted(executor.loader.unmigrated_apps))) + ) + if target_app_labels_only: + self.stdout.write( + self.style.MIGRATE_LABEL(" Apply all migrations: ") + + (", ".join(sorted({a for a, n in targets})) or "(none)") + ) + else: + if targets[0][1] is None: + self.stdout.write(self.style.MIGRATE_LABEL( + " Unapply all migrations: ") + "%s" % (targets[0][0],) + ) + else: + self.stdout.write(self.style.MIGRATE_LABEL( + " Target specific migration: ") + "%s, from %s" + % (targets[0][1], targets[0][0]) + ) + + pre_migrate_state = executor._create_project_state(with_applied_migrations=True) + pre_migrate_apps = pre_migrate_state.apps + emit_pre_migrate_signal( + self.verbosity, self.interactive, connection.alias, apps=pre_migrate_apps, plan=plan, + ) + + # Run the syncdb phase. + if run_syncdb: + if self.verbosity >= 1: + self.stdout.write(self.style.MIGRATE_HEADING("Synchronizing apps without migrations:")) + self.sync_apps(connection, executor.loader.unmigrated_apps) + + # Migrate! + if self.verbosity >= 1: + self.stdout.write(self.style.MIGRATE_HEADING("Running migrations:")) + if not plan: + if self.verbosity >= 1: + self.stdout.write(" No migrations to apply.") + # If there's changes that aren't in migrations yet, tell them how to fix it. + autodetector = MigrationAutodetector( + executor.loader.project_state(), + ProjectState.from_apps(apps), + ) + changes = autodetector.changes(graph=executor.loader.graph) + if changes: + self.stdout.write(self.style.NOTICE( + " Your models have changes that are not yet reflected " + "in a migration, and so won't be applied." + )) + self.stdout.write(self.style.NOTICE( + " Run 'manage.py makemigrations' to make new " + "migrations, and then re-run 'manage.py migrate' to " + "apply them." + )) + fake = False + fake_initial = False + else: + fake = options['fake'] + fake_initial = options['fake_initial'] + post_migrate_state = executor.migrate( + targets, plan=plan, state=pre_migrate_state.clone(), fake=fake, + fake_initial=fake_initial, + ) + # post_migrate signals have access to all models. Ensure that all models + # are reloaded in case any are delayed. + post_migrate_state.clear_delayed_apps_cache() + post_migrate_apps = post_migrate_state.apps + + # Re-render models of real apps to include relationships now that + # we've got a final state. This wouldn't be necessary if real apps + # models were rendered with relationships in the first place. + with post_migrate_apps.bulk_update(): + model_keys = [] + for model_state in post_migrate_apps.real_models: + model_key = model_state.app_label, model_state.name_lower + model_keys.append(model_key) + post_migrate_apps.unregister_model(*model_key) + post_migrate_apps.render_multiple([ + ModelState.from_model(apps.get_model(*model)) for model in model_keys + ]) + + # Send the post_migrate signal, so individual apps can do whatever they need + # to do at this point. + emit_post_migrate_signal( + self.verbosity, self.interactive, connection.alias, apps=post_migrate_apps, plan=plan, + ) + + def migration_progress_callback(self, action, migration=None, fake=False): + if self.verbosity >= 1: + compute_time = self.verbosity > 1 + if action == "apply_start": + if compute_time: + self.start = time.time() + self.stdout.write(" Applying %s..." % migration, ending="") + self.stdout.flush() + elif action == "apply_success": + elapsed = " (%.3fs)" % (time.time() - self.start) if compute_time else "" + if fake: + self.stdout.write(self.style.SUCCESS(" FAKED" + elapsed)) + else: + self.stdout.write(self.style.SUCCESS(" OK" + elapsed)) + elif action == "unapply_start": + if compute_time: + self.start = time.time() + self.stdout.write(" Unapplying %s..." % migration, ending="") + self.stdout.flush() + elif action == "unapply_success": + elapsed = " (%.3fs)" % (time.time() - self.start) if compute_time else "" + if fake: + self.stdout.write(self.style.SUCCESS(" FAKED" + elapsed)) + else: + self.stdout.write(self.style.SUCCESS(" OK" + elapsed)) + elif action == "render_start": + if compute_time: + self.start = time.time() + self.stdout.write(" Rendering model states...", ending="") + self.stdout.flush() + elif action == "render_success": + elapsed = " (%.3fs)" % (time.time() - self.start) if compute_time else "" + self.stdout.write(self.style.SUCCESS(" DONE" + elapsed)) + + def sync_apps(self, connection, app_labels): + """Run the old syncdb-style operation on a list of app_labels.""" + with connection.cursor() as cursor: + tables = connection.introspection.table_names(cursor) + + # Build the manifest of apps and models that are to be synchronized. + all_models = [ + ( + app_config.label, + router.get_migratable_models(app_config, connection.alias, include_auto_created=False), + ) + for app_config in apps.get_app_configs() + if app_config.models_module is not None and app_config.label in app_labels + ] + + def model_installed(model): + opts = model._meta + converter = connection.introspection.table_name_converter + return not ( + (converter(opts.db_table) in tables) or + (opts.auto_created and converter(opts.auto_created._meta.db_table) in tables) + ) + + manifest = OrderedDict( + (app_name, list(filter(model_installed, model_list))) + for app_name, model_list in all_models + ) + + # Create the tables for each model + if self.verbosity >= 1: + self.stdout.write(" Creating tables...\n") + with connection.schema_editor() as editor: + for app_name, model_list in manifest.items(): + for model in model_list: + # Never install unmanaged models, etc. + if not model._meta.can_migrate(connection): + continue + if self.verbosity >= 3: + self.stdout.write( + " Processing %s.%s model\n" % (app_name, model._meta.object_name) + ) + if self.verbosity >= 1: + self.stdout.write(" Creating table %s\n" % model._meta.db_table) + editor.create_model(model) + + # Deferred SQL is executed when exiting the editor's context. + if self.verbosity >= 1: + self.stdout.write(" Running deferred SQL...\n") diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/runserver.py b/env/lib/python3.5/site-packages/django/core/management/commands/runserver.py new file mode 100644 index 0000000..0e0fd1c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/runserver.py @@ -0,0 +1,161 @@ +import errno +import os +import re +import socket +import sys +from datetime import datetime + +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.servers.basehttp import ( + WSGIServer, get_internal_wsgi_application, run, +) +from django.utils import autoreload + +naiveip_re = re.compile(r"""^(?: +(?P + (?P\d{1,3}(?:\.\d{1,3}){3}) | # IPv4 address + (?P\[[a-fA-F0-9:]+\]) | # IPv6 address + (?P[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*) # FQDN +):)?(?P\d+)$""", re.X) + + +class Command(BaseCommand): + help = "Starts a lightweight Web server for development." + + # Validation is called explicitly each time the server is reloaded. + requires_system_checks = False + stealth_options = ('shutdown_message',) + + default_addr = '127.0.0.1' + default_addr_ipv6 = '::1' + default_port = '8000' + protocol = 'http' + server_cls = WSGIServer + + def add_arguments(self, parser): + parser.add_argument( + 'addrport', nargs='?', + help='Optional port number, or ipaddr:port' + ) + parser.add_argument( + '--ipv6', '-6', action='store_true', dest='use_ipv6', + help='Tells Django to use an IPv6 address.', + ) + parser.add_argument( + '--nothreading', action='store_false', dest='use_threading', + help='Tells Django to NOT use threading.', + ) + parser.add_argument( + '--noreload', action='store_false', dest='use_reloader', + help='Tells Django to NOT use the auto-reloader.', + ) + + def execute(self, *args, **options): + if options['no_color']: + # We rely on the environment because it's currently the only + # way to reach WSGIRequestHandler. This seems an acceptable + # compromise considering `runserver` runs indefinitely. + os.environ["DJANGO_COLORS"] = "nocolor" + super().execute(*args, **options) + + def get_handler(self, *args, **options): + """Return the default WSGI handler for the runner.""" + return get_internal_wsgi_application() + + def handle(self, *args, **options): + if not settings.DEBUG and not settings.ALLOWED_HOSTS: + raise CommandError('You must set settings.ALLOWED_HOSTS if DEBUG is False.') + + self.use_ipv6 = options['use_ipv6'] + if self.use_ipv6 and not socket.has_ipv6: + raise CommandError('Your Python does not support IPv6.') + self._raw_ipv6 = False + if not options['addrport']: + self.addr = '' + self.port = self.default_port + else: + m = re.match(naiveip_re, options['addrport']) + if m is None: + raise CommandError('"%s" is not a valid port number ' + 'or address:port pair.' % options['addrport']) + self.addr, _ipv4, _ipv6, _fqdn, self.port = m.groups() + if not self.port.isdigit(): + raise CommandError("%r is not a valid port number." % self.port) + if self.addr: + if _ipv6: + self.addr = self.addr[1:-1] + self.use_ipv6 = True + self._raw_ipv6 = True + elif self.use_ipv6 and not _fqdn: + raise CommandError('"%s" is not a valid IPv6 address.' % self.addr) + if not self.addr: + self.addr = self.default_addr_ipv6 if self.use_ipv6 else self.default_addr + self._raw_ipv6 = self.use_ipv6 + self.run(**options) + + def run(self, **options): + """Run the server, using the autoreloader if needed.""" + use_reloader = options['use_reloader'] + + if use_reloader: + autoreload.main(self.inner_run, None, options) + else: + self.inner_run(None, **options) + + def inner_run(self, *args, **options): + # If an exception was silenced in ManagementUtility.execute in order + # to be raised in the child process, raise it now. + autoreload.raise_last_exception() + + threading = options['use_threading'] + # 'shutdown_message' is a stealth option. + shutdown_message = options.get('shutdown_message', '') + quit_command = 'CTRL-BREAK' if sys.platform == 'win32' else 'CONTROL-C' + + self.stdout.write("Performing system checks...\n\n") + self.check(display_num_errors=True) + # Need to check migrations here, so can't use the + # requires_migrations_check attribute. + self.check_migrations() + now = datetime.now().strftime('%B %d, %Y - %X') + self.stdout.write(now) + self.stdout.write(( + "Django version %(version)s, using settings %(settings)r\n" + "Starting development server at %(protocol)s://%(addr)s:%(port)s/\n" + "Quit the server with %(quit_command)s.\n" + ) % { + "version": self.get_version(), + "settings": settings.SETTINGS_MODULE, + "protocol": self.protocol, + "addr": '[%s]' % self.addr if self._raw_ipv6 else self.addr, + "port": self.port, + "quit_command": quit_command, + }) + + try: + handler = self.get_handler(*args, **options) + run(self.addr, int(self.port), handler, + ipv6=self.use_ipv6, threading=threading, server_cls=self.server_cls) + except socket.error as e: + # Use helpful error messages instead of ugly tracebacks. + ERRORS = { + errno.EACCES: "You don't have permission to access that port.", + errno.EADDRINUSE: "That port is already in use.", + errno.EADDRNOTAVAIL: "That IP address can't be assigned to.", + } + try: + error_text = ERRORS[e.errno] + except KeyError: + error_text = e + self.stderr.write("Error: %s" % error_text) + # Need to use an OS exit because sys.exit doesn't work in a thread + os._exit(1) + except KeyboardInterrupt: + if shutdown_message: + self.stdout.write(shutdown_message) + sys.exit(0) + + +# Kept for backward compatibility +BaseRunserverCommand = Command diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/sendtestemail.py b/env/lib/python3.5/site-packages/django/core/management/commands/sendtestemail.py new file mode 100644 index 0000000..1be789d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/sendtestemail.py @@ -0,0 +1,40 @@ +import socket + +from django.core.mail import mail_admins, mail_managers, send_mail +from django.core.management.base import BaseCommand +from django.utils import timezone + + +class Command(BaseCommand): + help = "Sends a test email to the email addresses specified as arguments." + missing_args_message = "You must specify some email recipients, or pass the --managers or --admin options." + + def add_arguments(self, parser): + parser.add_argument( + 'email', nargs='*', + help='One or more email addresses to send a test email to.', + ) + parser.add_argument( + '--managers', action='store_true', dest='managers', + help='Send a test email to the addresses specified in settings.MANAGERS.', + ) + parser.add_argument( + '--admins', action='store_true', dest='admins', + help='Send a test email to the addresses specified in settings.ADMINS.', + ) + + def handle(self, *args, **kwargs): + subject = 'Test email from %s on %s' % (socket.gethostname(), timezone.now()) + + send_mail( + subject=subject, + message="If you\'re reading this, it was successful.", + from_email=None, + recipient_list=kwargs['email'], + ) + + if kwargs['managers']: + mail_managers(subject, "This email was sent to the site managers.") + + if kwargs['admins']: + mail_admins(subject, "This email was sent to the site admins.") diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/shell.py b/env/lib/python3.5/site-packages/django/core/management/commands/shell.py new file mode 100644 index 0000000..e85f7ac --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/shell.py @@ -0,0 +1,102 @@ +import os +import select +import sys +import traceback + +from django.core.management import BaseCommand, CommandError +from django.utils.datastructures import OrderedSet + + +class Command(BaseCommand): + help = ( + "Runs a Python interactive interpreter. Tries to use IPython or " + "bpython, if one of them is available. Any standard input is executed " + "as code." + ) + + requires_system_checks = False + shells = ['ipython', 'bpython', 'python'] + + def add_arguments(self, parser): + parser.add_argument( + '--no-startup', action='store_true', dest='no_startup', + help='When using plain Python, ignore the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.', + ) + parser.add_argument( + '-i', '--interface', choices=self.shells, dest='interface', + help='Specify an interactive interpreter interface. Available options: "ipython", "bpython", and "python"', + ) + parser.add_argument( + '-c', '--command', dest='command', + help='Instead of opening an interactive shell, run a command as Django and exit.', + ) + + def ipython(self, options): + from IPython import start_ipython + start_ipython(argv=[]) + + def bpython(self, options): + import bpython + bpython.embed() + + def python(self, options): + import code + # Set up a dictionary to serve as the environment for the shell, so + # that tab completion works on objects that are imported at runtime. + imported_objects = {} + try: # Try activating rlcompleter, because it's handy. + import readline + except ImportError: + pass + else: + # We don't have to wrap the following import in a 'try', because + # we already know 'readline' was imported successfully. + import rlcompleter + readline.set_completer(rlcompleter.Completer(imported_objects).complete) + # Enable tab completion on systems using libedit (e.g. macOS). + # These lines are copied from Python's Lib/site.py. + readline_doc = getattr(readline, '__doc__', '') + if readline_doc is not None and 'libedit' in readline_doc: + readline.parse_and_bind("bind ^I rl_complete") + else: + readline.parse_and_bind("tab:complete") + + # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system + # conventions and get $PYTHONSTARTUP first then .pythonrc.py. + if not options['no_startup']: + for pythonrc in OrderedSet([os.environ.get("PYTHONSTARTUP"), os.path.expanduser('~/.pythonrc.py')]): + if not pythonrc: + continue + if not os.path.isfile(pythonrc): + continue + with open(pythonrc) as handle: + pythonrc_code = handle.read() + # Match the behavior of the cpython shell where an error in + # PYTHONSTARTUP prints an exception and continues. + try: + exec(compile(pythonrc_code, pythonrc, 'exec'), imported_objects) + except Exception: + traceback.print_exc() + + code.interact(local=imported_objects) + + def handle(self, **options): + # Execute the command and exit. + if options['command']: + exec(options['command']) + return + + # Execute stdin if it has anything to read and exit. + # Not supported on Windows due to select.select() limitations. + if sys.platform != 'win32' and not sys.stdin.isatty() and select.select([sys.stdin], [], [], 0)[0]: + exec(sys.stdin.read()) + return + + available_shells = [options['interface']] if options['interface'] else self.shells + + for shell in available_shells: + try: + return getattr(self, shell)(options) + except ImportError: + pass + raise CommandError("Couldn't import {} interface.".format(shell)) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/showmigrations.py b/env/lib/python3.5/site-packages/django/core/management/commands/showmigrations.py new file mode 100644 index 0000000..4130d44 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/showmigrations.py @@ -0,0 +1,131 @@ +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.migrations.loader import MigrationLoader + + +class Command(BaseCommand): + help = "Shows all available migrations for the current project" + + def add_arguments(self, parser): + parser.add_argument( + 'app_label', nargs='*', + help='App labels of applications to limit the output to.', + ) + parser.add_argument( + '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS, + help='Nominates a database to synchronize. Defaults to the "default" database.', + ) + + formats = parser.add_mutually_exclusive_group() + formats.add_argument( + '--list', '-l', action='store_const', dest='format', const='list', + help='Shows a list of all migrations and which are applied.', + ) + formats.add_argument( + '--plan', '-p', action='store_const', dest='format', const='plan', + help=( + 'Shows all migrations in the order they will be applied. ' + 'With a verbosity level of 2 or above all direct migration dependencies ' + 'and reverse dependencies (run_before) will be included.' + ) + ) + + parser.set_defaults(format='list') + + def handle(self, *args, **options): + self.verbosity = options['verbosity'] + + # Get the database we're operating from + db = options['database'] + connection = connections[db] + + if options['format'] == "plan": + return self.show_plan(connection, options['app_label']) + else: + return self.show_list(connection, options['app_label']) + + def _validate_app_names(self, loader, app_names): + invalid_apps = [] + for app_name in app_names: + if app_name not in loader.migrated_apps: + invalid_apps.append(app_name) + if invalid_apps: + raise CommandError('No migrations present for: %s' % (', '.join(sorted(invalid_apps)))) + + def show_list(self, connection, app_names=None): + """ + Show a list of all migrations on the system, or only those of + some named apps. + """ + # Load migrations from disk/DB + loader = MigrationLoader(connection, ignore_no_migrations=True) + graph = loader.graph + # If we were passed a list of apps, validate it + if app_names: + self._validate_app_names(loader, app_names) + # Otherwise, show all apps in alphabetic order + else: + app_names = sorted(loader.migrated_apps) + # For each app, print its migrations in order from oldest (roots) to + # newest (leaves). + for app_name in app_names: + self.stdout.write(app_name, self.style.MIGRATE_LABEL) + shown = set() + for node in graph.leaf_nodes(app_name): + for plan_node in graph.forwards_plan(node): + if plan_node not in shown and plan_node[0] == app_name: + # Give it a nice title if it's a squashed one + title = plan_node[1] + if graph.nodes[plan_node].replaces: + title += " (%s squashed migrations)" % len(graph.nodes[plan_node].replaces) + # Mark it as applied/unapplied + if plan_node in loader.applied_migrations: + self.stdout.write(" [X] %s" % title) + else: + self.stdout.write(" [ ] %s" % title) + shown.add(plan_node) + # If we didn't print anything, then a small message + if not shown: + self.stdout.write(" (no migrations)", self.style.ERROR) + + def show_plan(self, connection, app_names=None): + """ + Show all known migrations (or only those of the specified app_names) + in the order they will be applied. + """ + # Load migrations from disk/DB + loader = MigrationLoader(connection) + graph = loader.graph + if app_names: + self._validate_app_names(loader, app_names) + targets = [key for key in graph.leaf_nodes() if key[0] in app_names] + else: + targets = graph.leaf_nodes() + plan = [] + seen = set() + + # Generate the plan + for target in targets: + for migration in graph.forwards_plan(target): + if migration not in seen: + node = graph.node_map[migration] + plan.append(node) + seen.add(migration) + + # Output + def print_deps(node): + out = [] + for parent in sorted(node.parents): + out.append("%s.%s" % parent.key) + if out: + return " ... (%s)" % ", ".join(out) + return "" + + for node in plan: + deps = "" + if self.verbosity >= 2: + deps = print_deps(node) + if node.key in loader.applied_migrations: + self.stdout.write("[X] %s.%s%s" % (node.key[0], node.key[1], deps)) + else: + self.stdout.write("[ ] %s.%s%s" % (node.key[0], node.key[1], deps)) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/sqlflush.py b/env/lib/python3.5/site-packages/django/core/management/commands/sqlflush.py new file mode 100644 index 0000000..60e69e6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/sqlflush.py @@ -0,0 +1,22 @@ +from django.core.management.base import BaseCommand +from django.core.management.sql import sql_flush +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(BaseCommand): + help = ( + "Returns a list of the SQL statements required to return all tables in " + "the database to the state they were in just after they were installed." + ) + + output_transaction = True + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + '--database', default=DEFAULT_DB_ALIAS, + help='Nominates a database to print the SQL for. Defaults to the "default" database.', + ) + + def handle(self, **options): + return '\n'.join(sql_flush(self.style, connections[options['database']], only_django=True)) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/sqlmigrate.py b/env/lib/python3.5/site-packages/django/core/management/commands/sqlmigrate.py new file mode 100644 index 0000000..4d0b08b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/sqlmigrate.py @@ -0,0 +1,59 @@ +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections +from django.db.migrations.executor import MigrationExecutor +from django.db.migrations.loader import AmbiguityError + + +class Command(BaseCommand): + help = "Prints the SQL statements for the named migration." + + output_transaction = True + + def add_arguments(self, parser): + parser.add_argument('app_label', help='App label of the application containing the migration.') + parser.add_argument('migration_name', help='Migration name to print the SQL for.') + parser.add_argument( + '--database', default=DEFAULT_DB_ALIAS, + help='Nominates a database to create SQL for. Defaults to the "default" database.', + ) + parser.add_argument( + '--backwards', action='store_true', dest='backwards', + help='Creates SQL to unapply the migration, rather than to apply it', + ) + + def execute(self, *args, **options): + # sqlmigrate doesn't support coloring its output but we need to force + # no_color=True so that the BEGIN/COMMIT statements added by + # output_transaction don't get colored either. + options['no_color'] = True + return super().execute(*args, **options) + + def handle(self, *args, **options): + # Get the database we're operating from + connection = connections[options['database']] + + # Load up an executor to get all the migration data + executor = MigrationExecutor(connection) + + # Resolve command-line arguments into a migration + app_label, migration_name = options['app_label'], options['migration_name'] + if app_label not in executor.loader.migrated_apps: + raise CommandError("App '%s' does not have migrations" % app_label) + try: + migration = executor.loader.get_migration_by_prefix(app_label, migration_name) + except AmbiguityError: + raise CommandError("More than one migration matches '%s' in app '%s'. Please be more specific." % ( + migration_name, app_label)) + except KeyError: + raise CommandError("Cannot find a migration matching '%s' from app '%s'. Is it in INSTALLED_APPS?" % ( + migration_name, app_label)) + targets = [(app_label, migration.name)] + + # Show begin/end around output only for atomic migrations + self.output_transaction = migration.atomic + + # Make a plan that represents just the requested migrations and show SQL + # for it + plan = [(executor.loader.graph.nodes[targets[0]], options['backwards'])] + sql_statements = executor.collect_sql(plan) + return '\n'.join(sql_statements) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/sqlsequencereset.py b/env/lib/python3.5/site-packages/django/core/management/commands/sqlsequencereset.py new file mode 100644 index 0000000..d23f89c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/sqlsequencereset.py @@ -0,0 +1,23 @@ +from django.core.management.base import AppCommand +from django.db import DEFAULT_DB_ALIAS, connections + + +class Command(AppCommand): + help = 'Prints the SQL statements for resetting sequences for the given app name(s).' + + output_transaction = True + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + '--database', default=DEFAULT_DB_ALIAS, + help='Nominates a database to print the SQL for. Defaults to the "default" database.', + ) + + def handle_app_config(self, app_config, **options): + if app_config.models_module is None: + return + connection = connections[options['database']] + models = app_config.get_models(include_auto_created=True) + statements = connection.ops.sequence_reset_sql(self.style, models) + return '\n'.join(statements) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/squashmigrations.py b/env/lib/python3.5/site-packages/django/core/management/commands/squashmigrations.py new file mode 100644 index 0000000..68c2a4e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/squashmigrations.py @@ -0,0 +1,204 @@ +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.db import DEFAULT_DB_ALIAS, connections, migrations +from django.db.migrations.loader import AmbiguityError, MigrationLoader +from django.db.migrations.migration import SwappableTuple +from django.db.migrations.optimizer import MigrationOptimizer +from django.db.migrations.writer import MigrationWriter +from django.utils.version import get_docs_version + + +class Command(BaseCommand): + help = "Squashes an existing set of migrations (from first until specified) into a single new one." + + def add_arguments(self, parser): + parser.add_argument( + 'app_label', + help='App label of the application to squash migrations for.', + ) + parser.add_argument( + 'start_migration_name', default=None, nargs='?', + help='Migrations will be squashed starting from and including this migration.', + ) + parser.add_argument( + 'migration_name', + help='Migrations will be squashed until and including this migration.', + ) + parser.add_argument( + '--no-optimize', action='store_true', dest='no_optimize', + help='Do not try to optimize the squashed operations.', + ) + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help='Tells Django to NOT prompt the user for input of any kind.', + ) + parser.add_argument( + '--squashed-name', dest='squashed_name', + help='Sets the name of the new squashed migration.', + ) + + def handle(self, **options): + + self.verbosity = options['verbosity'] + self.interactive = options['interactive'] + app_label = options['app_label'] + start_migration_name = options['start_migration_name'] + migration_name = options['migration_name'] + no_optimize = options['no_optimize'] + squashed_name = options['squashed_name'] + + # Load the current graph state, check the app and migration they asked for exists + loader = MigrationLoader(connections[DEFAULT_DB_ALIAS]) + if app_label not in loader.migrated_apps: + raise CommandError( + "App '%s' does not have migrations (so squashmigrations on " + "it makes no sense)" % app_label + ) + + migration = self.find_migration(loader, app_label, migration_name) + + # Work out the list of predecessor migrations + migrations_to_squash = [ + loader.get_migration(al, mn) + for al, mn in loader.graph.forwards_plan((migration.app_label, migration.name)) + if al == migration.app_label + ] + + if start_migration_name: + start_migration = self.find_migration(loader, app_label, start_migration_name) + start = loader.get_migration(start_migration.app_label, start_migration.name) + try: + start_index = migrations_to_squash.index(start) + migrations_to_squash = migrations_to_squash[start_index:] + except ValueError: + raise CommandError( + "The migration '%s' cannot be found. Maybe it comes after " + "the migration '%s'?\n" + "Have a look at:\n" + " python manage.py showmigrations %s\n" + "to debug this issue." % (start_migration, migration, app_label) + ) + + # Tell them what we're doing and optionally ask if we should proceed + if self.verbosity > 0 or self.interactive: + self.stdout.write(self.style.MIGRATE_HEADING("Will squash the following migrations:")) + for migration in migrations_to_squash: + self.stdout.write(" - %s" % migration.name) + + if self.interactive: + answer = None + while not answer or answer not in "yn": + answer = input("Do you wish to proceed? [yN] ") + if not answer: + answer = "n" + break + else: + answer = answer[0].lower() + if answer != "y": + return + + # Load the operations from all those migrations and concat together, + # along with collecting external dependencies and detecting + # double-squashing + operations = [] + dependencies = set() + # We need to take all dependencies from the first migration in the list + # as it may be 0002 depending on 0001 + first_migration = True + for smigration in migrations_to_squash: + if smigration.replaces: + raise CommandError( + "You cannot squash squashed migrations! Please transition " + "it to a normal migration first: " + "https://docs.djangoproject.com/en/%s/topics/migrations/#squashing-migrations" % get_docs_version() + ) + operations.extend(smigration.operations) + for dependency in smigration.dependencies: + if isinstance(dependency, SwappableTuple): + if settings.AUTH_USER_MODEL == dependency.setting: + dependencies.add(("__setting__", "AUTH_USER_MODEL")) + else: + dependencies.add(dependency) + elif dependency[0] != smigration.app_label or first_migration: + dependencies.add(dependency) + first_migration = False + + if no_optimize: + if self.verbosity > 0: + self.stdout.write(self.style.MIGRATE_HEADING("(Skipping optimization.)")) + new_operations = operations + else: + if self.verbosity > 0: + self.stdout.write(self.style.MIGRATE_HEADING("Optimizing...")) + + optimizer = MigrationOptimizer() + new_operations = optimizer.optimize(operations, migration.app_label) + + if self.verbosity > 0: + if len(new_operations) == len(operations): + self.stdout.write(" No optimizations possible.") + else: + self.stdout.write( + " Optimized from %s operations to %s operations." % + (len(operations), len(new_operations)) + ) + + # Work out the value of replaces (any squashed ones we're re-squashing) + # need to feed their replaces into ours + replaces = [] + for migration in migrations_to_squash: + if migration.replaces: + replaces.extend(migration.replaces) + else: + replaces.append((migration.app_label, migration.name)) + + # Make a new migration with those operations + subclass = type("Migration", (migrations.Migration,), { + "dependencies": dependencies, + "operations": new_operations, + "replaces": replaces, + }) + if start_migration_name: + if squashed_name: + # Use the name from --squashed-name. + prefix, _ = start_migration.name.split('_', 1) + name = '%s_%s' % (prefix, squashed_name) + else: + # Generate a name. + name = '%s_squashed_%s' % (start_migration.name, migration.name) + new_migration = subclass(name, app_label) + else: + name = '0001_%s' % (squashed_name or 'squashed_%s' % migration.name) + new_migration = subclass(name, app_label) + new_migration.initial = True + + # Write out the new migration file + writer = MigrationWriter(new_migration) + with open(writer.path, "w", encoding='utf-8') as fh: + fh.write(writer.as_string()) + + if self.verbosity > 0: + self.stdout.write(self.style.MIGRATE_HEADING("Created new squashed migration %s" % writer.path)) + self.stdout.write(" You should commit this migration but leave the old ones in place;") + self.stdout.write(" the new migration will be used for new installs. Once you are sure") + self.stdout.write(" all instances of the codebase have applied the migrations you squashed,") + self.stdout.write(" you can delete them.") + if writer.needs_manual_porting: + self.stdout.write(self.style.MIGRATE_HEADING("Manual porting required")) + self.stdout.write(" Your migrations contained functions that must be manually copied over,") + self.stdout.write(" as we could not safely copy their implementation.") + self.stdout.write(" See the comment at the top of the squashed migration for details.") + + def find_migration(self, loader, app_label, name): + try: + return loader.get_migration_by_prefix(app_label, name) + except AmbiguityError: + raise CommandError( + "More than one migration matches '%s' in app '%s'. Please be " + "more specific." % (name, app_label) + ) + except KeyError: + raise CommandError( + "Cannot find a migration matching '%s' from app '%s'." % + (name, app_label) + ) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/startapp.py b/env/lib/python3.5/site-packages/django/core/management/commands/startapp.py new file mode 100644 index 0000000..bba9f3d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/startapp.py @@ -0,0 +1,14 @@ +from django.core.management.templates import TemplateCommand + + +class Command(TemplateCommand): + help = ( + "Creates a Django app directory structure for the given app name in " + "the current directory or optionally in the given directory." + ) + missing_args_message = "You must provide an application name." + + def handle(self, **options): + app_name = options.pop('name') + target = options.pop('directory') + super().handle('app', app_name, target, **options) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/startproject.py b/env/lib/python3.5/site-packages/django/core/management/commands/startproject.py new file mode 100644 index 0000000..7e09a25 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/startproject.py @@ -0,0 +1,20 @@ +from django.core.management.templates import TemplateCommand + +from ..utils import get_random_secret_key + + +class Command(TemplateCommand): + help = ( + "Creates a Django project directory structure for the given project " + "name in the current directory or optionally in the given directory." + ) + missing_args_message = "You must provide a project name." + + def handle(self, **options): + project_name = options.pop('name') + target = options.pop('directory') + + # Create a random SECRET_KEY to put it in the main settings. + options['secret_key'] = get_random_secret_key() + + super().handle('project', project_name, target, **options) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/test.py b/env/lib/python3.5/site-packages/django/core/management/commands/test.py new file mode 100644 index 0000000..f0a442c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/test.py @@ -0,0 +1,59 @@ +import sys + +from django.conf import settings +from django.core.management.base import BaseCommand +from django.test.utils import get_runner + + +class Command(BaseCommand): + help = 'Discover and run tests in the specified modules or the current directory.' + + # DiscoverRunner runs the checks after databases are set up. + requires_system_checks = False + test_runner = None + + def run_from_argv(self, argv): + """ + Pre-parse the command line to extract the value of the --testrunner + option. This allows a test runner to define additional command line + arguments. + """ + option = '--testrunner=' + for arg in argv[2:]: + if arg.startswith(option): + self.test_runner = arg[len(option):] + break + super().run_from_argv(argv) + + def add_arguments(self, parser): + parser.add_argument( + 'args', metavar='test_label', nargs='*', + help='Module paths to test; can be modulename, modulename.TestCase or modulename.TestCase.test_method' + ) + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help='Tells Django to NOT prompt the user for input of any kind.', + ) + parser.add_argument( + '--failfast', action='store_true', dest='failfast', + help='Tells Django to stop running the test suite after first failed test.', + ) + parser.add_argument( + '--testrunner', action='store', dest='testrunner', + help='Tells Django to use specified test runner class instead of ' + 'the one specified by the TEST_RUNNER setting.', + ) + + test_runner_class = get_runner(settings, self.test_runner) + + if hasattr(test_runner_class, 'add_arguments'): + test_runner_class.add_arguments(parser) + + def handle(self, *test_labels, **options): + TestRunner = get_runner(settings, options['testrunner']) + + test_runner = TestRunner(**options) + failures = test_runner.run_tests(test_labels) + + if failures: + sys.exit(1) diff --git a/env/lib/python3.5/site-packages/django/core/management/commands/testserver.py b/env/lib/python3.5/site-packages/django/core/management/commands/testserver.py new file mode 100644 index 0000000..03814e5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/commands/testserver.py @@ -0,0 +1,54 @@ +from django.core.management import call_command +from django.core.management.base import BaseCommand +from django.db import connection + + +class Command(BaseCommand): + help = 'Runs a development server with data from the given fixture(s).' + + requires_system_checks = False + + def add_arguments(self, parser): + parser.add_argument( + 'args', metavar='fixture', nargs='*', + help='Path(s) to fixtures to load before running the server.', + ) + parser.add_argument( + '--noinput', '--no-input', action='store_false', dest='interactive', + help='Tells Django to NOT prompt the user for input of any kind.', + ) + parser.add_argument( + '--addrport', default='', + help='Port number or ipaddr:port to run the server on.', + ) + parser.add_argument( + '--ipv6', '-6', action='store_true', dest='use_ipv6', + help='Tells Django to use an IPv6 address.', + ) + + def handle(self, *fixture_labels, **options): + verbosity = options['verbosity'] + interactive = options['interactive'] + + # Create a test database. + db_name = connection.creation.create_test_db(verbosity=verbosity, autoclobber=not interactive, serialize=False) + + # Import the fixture data into the test database. + call_command('loaddata', *fixture_labels, **{'verbosity': verbosity}) + + # Run the development server. Turn off auto-reloading because it causes + # a strange error -- it causes this handle() method to be called + # multiple times. + shutdown_message = ( + '\nServer stopped.\nNote that the test database, %r, has not been ' + 'deleted. You can explore it on your own.' % db_name + ) + use_threading = connection.features.test_db_allows_multiple_connections + call_command( + 'runserver', + addrport=options['addrport'], + shutdown_message=shutdown_message, + use_reloader=False, + use_ipv6=options['use_ipv6'], + use_threading=use_threading + ) diff --git a/env/lib/python3.5/site-packages/django/core/management/sql.py b/env/lib/python3.5/site-packages/django/core/management/sql.py new file mode 100644 index 0000000..44b57b3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/sql.py @@ -0,0 +1,52 @@ +from django.apps import apps +from django.db import models + + +def sql_flush(style, connection, only_django=False, reset_sequences=True, allow_cascade=False): + """ + Return a list of the SQL statements used to flush the database. + + If only_django is True, only include the table names that have associated + Django models and are in INSTALLED_APPS . + """ + if only_django: + tables = connection.introspection.django_table_names(only_existing=True, include_views=False) + else: + tables = connection.introspection.table_names(include_views=False) + seqs = connection.introspection.sequence_list() if reset_sequences else () + statements = connection.ops.sql_flush(style, tables, seqs, allow_cascade) + return statements + + +def emit_pre_migrate_signal(verbosity, interactive, db, **kwargs): + # Emit the pre_migrate signal for every application. + for app_config in apps.get_app_configs(): + if app_config.models_module is None: + continue + if verbosity >= 2: + print("Running pre-migrate handlers for application %s" % app_config.label) + models.signals.pre_migrate.send( + sender=app_config, + app_config=app_config, + verbosity=verbosity, + interactive=interactive, + using=db, + **kwargs + ) + + +def emit_post_migrate_signal(verbosity, interactive, db, **kwargs): + # Emit the post_migrate signal for every application. + for app_config in apps.get_app_configs(): + if app_config.models_module is None: + continue + if verbosity >= 2: + print("Running post-migrate handlers for application %s" % app_config.label) + models.signals.post_migrate.send( + sender=app_config, + app_config=app_config, + verbosity=verbosity, + interactive=interactive, + using=db, + **kwargs + ) diff --git a/env/lib/python3.5/site-packages/django/core/management/templates.py b/env/lib/python3.5/site-packages/django/core/management/templates.py new file mode 100644 index 0000000..19da55f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/templates.py @@ -0,0 +1,334 @@ +import cgi +import mimetypes +import os +import posixpath +import shutil +import stat +import tempfile +from importlib import import_module +from os import path +from urllib.request import urlretrieve + +import django +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.management.utils import handle_extensions +from django.template import Context, Engine +from django.utils import archive +from django.utils.version import get_docs_version + + +class TemplateCommand(BaseCommand): + """ + Copy either a Django application layout template or a Django project + layout template into the specified directory. + + :param style: A color style object (see django.core.management.color). + :param app_or_project: The string 'app' or 'project'. + :param name: The name of the application or project. + :param directory: The directory to which the template should be copied. + :param options: The additional variables passed to project or app templates + """ + requires_system_checks = False + # The supported URL schemes + url_schemes = ['http', 'https', 'ftp'] + # Rewrite the following suffixes when determining the target filename. + rewrite_template_suffixes = ( + # Allow shipping invalid .py files without byte-compilation. + ('.py-tpl', '.py'), + ) + + def add_arguments(self, parser): + parser.add_argument('name', help='Name of the application or project.') + parser.add_argument('directory', nargs='?', help='Optional destination directory') + parser.add_argument('--template', help='The path or URL to load the template from.') + parser.add_argument( + '--extension', '-e', dest='extensions', + action='append', default=['py'], + help='The file extension(s) to render (default: "py"). ' + 'Separate multiple extensions with commas, or use ' + '-e multiple times.' + ) + parser.add_argument( + '--name', '-n', dest='files', + action='append', default=[], + help='The file name(s) to render. Separate multiple file names ' + 'with commas, or use -n multiple times.' + ) + + def handle(self, app_or_project, name, target=None, **options): + self.app_or_project = app_or_project + self.paths_to_remove = [] + self.verbosity = options['verbosity'] + + self.validate_name(name, app_or_project) + + # if some directory is given, make sure it's nicely expanded + if target is None: + top_dir = path.join(os.getcwd(), name) + try: + os.makedirs(top_dir) + except FileExistsError: + raise CommandError("'%s' already exists" % top_dir) + except OSError as e: + raise CommandError(e) + else: + top_dir = os.path.abspath(path.expanduser(target)) + if not os.path.exists(top_dir): + raise CommandError("Destination directory '%s' does not " + "exist, please create it first." % top_dir) + + extensions = tuple(handle_extensions(options['extensions'])) + extra_files = [] + for file in options['files']: + extra_files.extend(map(lambda x: x.strip(), file.split(','))) + if self.verbosity >= 2: + self.stdout.write("Rendering %s template files with " + "extensions: %s\n" % + (app_or_project, ', '.join(extensions))) + self.stdout.write("Rendering %s template files with " + "filenames: %s\n" % + (app_or_project, ', '.join(extra_files))) + + base_name = '%s_name' % app_or_project + base_subdir = '%s_template' % app_or_project + base_directory = '%s_directory' % app_or_project + camel_case_name = 'camel_case_%s_name' % app_or_project + camel_case_value = ''.join(x for x in name.title() if x != '_') + + context = Context({ + **options, + base_name: name, + base_directory: top_dir, + camel_case_name: camel_case_value, + 'docs_version': get_docs_version(), + 'django_version': django.__version__, + }, autoescape=False) + + # Setup a stub settings environment for template rendering + if not settings.configured: + settings.configure() + django.setup() + + template_dir = self.handle_template(options['template'], + base_subdir) + prefix_length = len(template_dir) + 1 + + for root, dirs, files in os.walk(template_dir): + + path_rest = root[prefix_length:] + relative_dir = path_rest.replace(base_name, name) + if relative_dir: + target_dir = path.join(top_dir, relative_dir) + if not path.exists(target_dir): + os.mkdir(target_dir) + + for dirname in dirs[:]: + if dirname.startswith('.') or dirname == '__pycache__': + dirs.remove(dirname) + + for filename in files: + if filename.endswith(('.pyo', '.pyc', '.py.class')): + # Ignore some files as they cause various breakages. + continue + old_path = path.join(root, filename) + new_path = path.join(top_dir, relative_dir, + filename.replace(base_name, name)) + for old_suffix, new_suffix in self.rewrite_template_suffixes: + if new_path.endswith(old_suffix): + new_path = new_path[:-len(old_suffix)] + new_suffix + break # Only rewrite once + + if path.exists(new_path): + raise CommandError("%s already exists, overlaying a " + "project or app into an existing " + "directory won't replace conflicting " + "files" % new_path) + + # Only render the Python files, as we don't want to + # accidentally render Django templates files + if new_path.endswith(extensions) or filename in extra_files: + with open(old_path, 'r', encoding='utf-8') as template_file: + content = template_file.read() + template = Engine().from_string(content) + content = template.render(context) + with open(new_path, 'w', encoding='utf-8') as new_file: + new_file.write(content) + else: + shutil.copyfile(old_path, new_path) + + if self.verbosity >= 2: + self.stdout.write("Creating %s\n" % new_path) + try: + shutil.copymode(old_path, new_path) + self.make_writeable(new_path) + except OSError: + self.stderr.write( + "Notice: Couldn't set permission bits on %s. You're " + "probably using an uncommon filesystem setup. No " + "problem." % new_path, self.style.NOTICE) + + if self.paths_to_remove: + if self.verbosity >= 2: + self.stdout.write("Cleaning up temporary files.\n") + for path_to_remove in self.paths_to_remove: + if path.isfile(path_to_remove): + os.remove(path_to_remove) + else: + shutil.rmtree(path_to_remove) + + def handle_template(self, template, subdir): + """ + Determine where the app or project templates are. + Use django.__path__[0] as the default because the Django install + directory isn't known. + """ + if template is None: + return path.join(django.__path__[0], 'conf', subdir) + else: + if template.startswith('file://'): + template = template[7:] + expanded_template = path.expanduser(template) + expanded_template = path.normpath(expanded_template) + if path.isdir(expanded_template): + return expanded_template + if self.is_url(template): + # downloads the file and returns the path + absolute_path = self.download(template) + else: + absolute_path = path.abspath(expanded_template) + if path.exists(absolute_path): + return self.extract(absolute_path) + + raise CommandError("couldn't handle %s template %s." % + (self.app_or_project, template)) + + def validate_name(self, name, app_or_project): + a_or_an = 'an' if app_or_project == 'app' else 'a' + if name is None: + raise CommandError('you must provide {an} {app} name'.format( + an=a_or_an, + app=app_or_project, + )) + # Check it's a valid directory name. + if not name.isidentifier(): + raise CommandError( + "'{name}' is not a valid {app} name. Please make sure the " + "name is a valid identifier.".format( + name=name, + app=app_or_project, + ) + ) + # Check it cannot be imported. + try: + import_module(name) + except ImportError: + pass + else: + raise CommandError( + "'{name}' conflicts with the name of an existing Python " + "module and cannot be used as {an} {app} name. Please try " + "another name.".format( + name=name, + an=a_or_an, + app=app_or_project, + ) + ) + + def download(self, url): + """ + Download the given URL and return the file name. + """ + def cleanup_url(url): + tmp = url.rstrip('/') + filename = tmp.split('/')[-1] + if url.endswith('/'): + display_url = tmp + '/' + else: + display_url = url + return filename, display_url + + prefix = 'django_%s_template_' % self.app_or_project + tempdir = tempfile.mkdtemp(prefix=prefix, suffix='_download') + self.paths_to_remove.append(tempdir) + filename, display_url = cleanup_url(url) + + if self.verbosity >= 2: + self.stdout.write("Downloading %s\n" % display_url) + try: + the_path, info = urlretrieve(url, path.join(tempdir, filename)) + except IOError as e: + raise CommandError("couldn't download URL %s to %s: %s" % + (url, filename, e)) + + used_name = the_path.split('/')[-1] + + # Trying to get better name from response headers + content_disposition = info.get('content-disposition') + if content_disposition: + _, params = cgi.parse_header(content_disposition) + guessed_filename = params.get('filename') or used_name + else: + guessed_filename = used_name + + # Falling back to content type guessing + ext = self.splitext(guessed_filename)[1] + content_type = info.get('content-type') + if not ext and content_type: + ext = mimetypes.guess_extension(content_type) + if ext: + guessed_filename += ext + + # Move the temporary file to a filename that has better + # chances of being recognized by the archive utils + if used_name != guessed_filename: + guessed_path = path.join(tempdir, guessed_filename) + shutil.move(the_path, guessed_path) + return guessed_path + + # Giving up + return the_path + + def splitext(self, the_path): + """ + Like os.path.splitext, but takes off .tar, too + """ + base, ext = posixpath.splitext(the_path) + if base.lower().endswith('.tar'): + ext = base[-4:] + ext + base = base[:-4] + return base, ext + + def extract(self, filename): + """ + Extract the given file to a temporarily and return + the path of the directory with the extracted content. + """ + prefix = 'django_%s_template_' % self.app_or_project + tempdir = tempfile.mkdtemp(prefix=prefix, suffix='_extract') + self.paths_to_remove.append(tempdir) + if self.verbosity >= 2: + self.stdout.write("Extracting %s\n" % filename) + try: + archive.extract(filename, tempdir) + return tempdir + except (archive.ArchiveException, IOError) as e: + raise CommandError("couldn't extract file %s to %s: %s" % + (filename, tempdir, e)) + + def is_url(self, template): + """Return True if the name looks like a URL.""" + if ':' not in template: + return False + scheme = template.split(':', 1)[0].lower() + return scheme in self.url_schemes + + def make_writeable(self, filename): + """ + Make sure that the file is writeable. + Useful if our source is read-only. + """ + if not os.access(filename, os.W_OK): + st = os.stat(filename) + new_permissions = stat.S_IMODE(st.st_mode) | stat.S_IWUSR + os.chmod(filename, new_permissions) diff --git a/env/lib/python3.5/site-packages/django/core/management/utils.py b/env/lib/python3.5/site-packages/django/core/management/utils.py new file mode 100644 index 0000000..df61bec --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/management/utils.py @@ -0,0 +1,108 @@ +import os +from subprocess import PIPE, Popen + +from django.apps import apps as installed_apps +from django.utils.crypto import get_random_string +from django.utils.encoding import DEFAULT_LOCALE_ENCODING + +from .base import CommandError + + +def popen_wrapper(args, stdout_encoding='utf-8'): + """ + Friendly wrapper around Popen. + + Return stdout output, stderr output, and OS status code. + """ + try: + p = Popen(args, shell=False, stdout=PIPE, stderr=PIPE, close_fds=os.name != 'nt') + except OSError as err: + raise CommandError('Error executing %s' % args[0]) from err + output, errors = p.communicate() + return ( + output.decode(stdout_encoding), + errors.decode(DEFAULT_LOCALE_ENCODING, errors='replace'), + p.returncode + ) + + +def handle_extensions(extensions): + """ + Organize multiple extensions that are separated with commas or passed by + using --extension/-e multiple times. + + For example: running 'django-admin makemessages -e js,txt -e xhtml -a' + would result in an extension list: ['.js', '.txt', '.xhtml'] + + >>> handle_extensions(['.html', 'html,js,py,py,py,.py', 'py,.py']) + {'.html', '.js', '.py'} + >>> handle_extensions(['.html, txt,.tpl']) + {'.html', '.tpl', '.txt'} + """ + ext_list = [] + for ext in extensions: + ext_list.extend(ext.replace(' ', '').split(',')) + for i, ext in enumerate(ext_list): + if not ext.startswith('.'): + ext_list[i] = '.%s' % ext_list[i] + return set(ext_list) + + +def find_command(cmd, path=None, pathext=None): + if path is None: + path = os.environ.get('PATH', '').split(os.pathsep) + if isinstance(path, str): + path = [path] + # check if there are funny path extensions for executables, e.g. Windows + if pathext is None: + pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD').split(os.pathsep) + # don't use extensions if the command ends with one of them + for ext in pathext: + if cmd.endswith(ext): + pathext = [''] + break + # check if we find the command on PATH + for p in path: + f = os.path.join(p, cmd) + if os.path.isfile(f): + return f + for ext in pathext: + fext = f + ext + if os.path.isfile(fext): + return fext + return None + + +def get_random_secret_key(): + """ + Return a 50 character random string usable as a SECRET_KEY setting value. + """ + chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)' + return get_random_string(50, chars) + + +def parse_apps_and_model_labels(labels): + """ + Parse a list of "app_label.ModelName" or "app_label" strings into actual + objects and return a two-element tuple: + (set of model classes, set of app_configs). + Raise a CommandError if some specified models or apps don't exist. + """ + apps = set() + models = set() + + for label in labels: + if '.' in label: + try: + model = installed_apps.get_model(label) + except LookupError: + raise CommandError('Unknown model: %s' % label) + models.add(model) + else: + try: + app_config = installed_apps.get_app_config(label) + except LookupError as e: + raise CommandError(str(e)) + apps.add(app_config) + + return models, apps diff --git a/env/lib/python3.5/site-packages/django/core/paginator.py b/env/lib/python3.5/site-packages/django/core/paginator.py new file mode 100644 index 0000000..4af80a2 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/paginator.py @@ -0,0 +1,187 @@ +import collections.abc +import warnings +from math import ceil + +from django.utils.functional import cached_property +from django.utils.translation import gettext_lazy as _ + + +class UnorderedObjectListWarning(RuntimeWarning): + pass + + +class InvalidPage(Exception): + pass + + +class PageNotAnInteger(InvalidPage): + pass + + +class EmptyPage(InvalidPage): + pass + + +class Paginator: + + def __init__(self, object_list, per_page, orphans=0, + allow_empty_first_page=True): + self.object_list = object_list + self._check_object_list_is_ordered() + self.per_page = int(per_page) + self.orphans = int(orphans) + self.allow_empty_first_page = allow_empty_first_page + + def validate_number(self, number): + """Validate the given 1-based page number.""" + try: + if isinstance(number, float) and not number.is_integer(): + raise ValueError + number = int(number) + except (TypeError, ValueError): + raise PageNotAnInteger(_('That page number is not an integer')) + if number < 1: + raise EmptyPage(_('That page number is less than 1')) + if number > self.num_pages: + if number == 1 and self.allow_empty_first_page: + pass + else: + raise EmptyPage(_('That page contains no results')) + return number + + def get_page(self, number): + """ + Return a valid page, even if the page argument isn't a number or isn't + in range. + """ + try: + number = self.validate_number(number) + except PageNotAnInteger: + number = 1 + except EmptyPage: + number = self.num_pages + return self.page(number) + + def page(self, number): + """Return a Page object for the given 1-based page number.""" + number = self.validate_number(number) + bottom = (number - 1) * self.per_page + top = bottom + self.per_page + if top + self.orphans >= self.count: + top = self.count + return self._get_page(self.object_list[bottom:top], number, self) + + def _get_page(self, *args, **kwargs): + """ + Return an instance of a single page. + + This hook can be used by subclasses to use an alternative to the + standard :cls:`Page` object. + """ + return Page(*args, **kwargs) + + @cached_property + def count(self): + """Return the total number of objects, across all pages.""" + try: + return self.object_list.count() + except (AttributeError, TypeError): + # AttributeError if object_list has no count() method. + # TypeError if object_list.count() requires arguments + # (i.e. is of type list). + return len(self.object_list) + + @cached_property + def num_pages(self): + """Return the total number of pages.""" + if self.count == 0 and not self.allow_empty_first_page: + return 0 + hits = max(1, self.count - self.orphans) + return ceil(hits / self.per_page) + + @property + def page_range(self): + """ + Return a 1-based range of pages for iterating through within + a template for loop. + """ + return range(1, self.num_pages + 1) + + def _check_object_list_is_ordered(self): + """ + Warn if self.object_list is unordered (typically a QuerySet). + """ + ordered = getattr(self.object_list, 'ordered', None) + if ordered is not None and not ordered: + obj_list_repr = ( + '{} {}'.format(self.object_list.model, self.object_list.__class__.__name__) + if hasattr(self.object_list, 'model') + else '{!r}'.format(self.object_list) + ) + warnings.warn( + 'Pagination may yield inconsistent results with an unordered ' + 'object_list: {}.'.format(obj_list_repr), + UnorderedObjectListWarning, + stacklevel=3 + ) + + +QuerySetPaginator = Paginator # For backwards-compatibility. + + +class Page(collections.abc.Sequence): + + def __init__(self, object_list, number, paginator): + self.object_list = object_list + self.number = number + self.paginator = paginator + + def __repr__(self): + return '' % (self.number, self.paginator.num_pages) + + def __len__(self): + return len(self.object_list) + + def __getitem__(self, index): + if not isinstance(index, (int, slice)): + raise TypeError + # The object_list is converted to a list so that if it was a QuerySet + # it won't be a database hit per __getitem__. + if not isinstance(self.object_list, list): + self.object_list = list(self.object_list) + return self.object_list[index] + + def has_next(self): + return self.number < self.paginator.num_pages + + def has_previous(self): + return self.number > 1 + + def has_other_pages(self): + return self.has_previous() or self.has_next() + + def next_page_number(self): + return self.paginator.validate_number(self.number + 1) + + def previous_page_number(self): + return self.paginator.validate_number(self.number - 1) + + def start_index(self): + """ + Return the 1-based index of the first object on this page, + relative to total objects in the paginator. + """ + # Special case, return zero if no items. + if self.paginator.count == 0: + return 0 + return (self.paginator.per_page * (self.number - 1)) + 1 + + def end_index(self): + """ + Return the 1-based index of the last object on this page, + relative to total objects found (hits). + """ + # Special case for the last page because there can be orphans. + if self.number == self.paginator.num_pages: + return self.paginator.count + return self.number * self.paginator.per_page diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__init__.py b/env/lib/python3.5/site-packages/django/core/serializers/__init__.py new file mode 100644 index 0000000..4b0ae07 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/serializers/__init__.py @@ -0,0 +1,234 @@ +""" +Interfaces for serializing Django objects. + +Usage:: + + from django.core import serializers + json = serializers.serialize("json", some_queryset) + objects = list(serializers.deserialize("json", json)) + +To add your own serializers, use the SERIALIZATION_MODULES setting:: + + SERIALIZATION_MODULES = { + "csv": "path.to.csv.serializer", + "txt": "path.to.txt.serializer", + } + +""" + +import importlib + +from django.apps import apps +from django.conf import settings +from django.core.serializers.base import SerializerDoesNotExist + +# Built-in serializers +BUILTIN_SERIALIZERS = { + "xml": "django.core.serializers.xml_serializer", + "python": "django.core.serializers.python", + "json": "django.core.serializers.json", + "yaml": "django.core.serializers.pyyaml", +} + +_serializers = {} + + +class BadSerializer: + """ + Stub serializer to hold exception raised during registration + + This allows the serializer registration to cache serializers and if there + is an error raised in the process of creating a serializer it will be + raised and passed along to the caller when the serializer is used. + """ + internal_use_only = False + + def __init__(self, exception): + self.exception = exception + + def __call__(self, *args, **kwargs): + raise self.exception + + +def register_serializer(format, serializer_module, serializers=None): + """Register a new serializer. + + ``serializer_module`` should be the fully qualified module name + for the serializer. + + If ``serializers`` is provided, the registration will be added + to the provided dictionary. + + If ``serializers`` is not provided, the registration will be made + directly into the global register of serializers. Adding serializers + directly is not a thread-safe operation. + """ + if serializers is None and not _serializers: + _load_serializers() + + try: + module = importlib.import_module(serializer_module) + except ImportError as exc: + bad_serializer = BadSerializer(exc) + + module = type('BadSerializerModule', (), { + 'Deserializer': bad_serializer, + 'Serializer': bad_serializer, + }) + + if serializers is None: + _serializers[format] = module + else: + serializers[format] = module + + +def unregister_serializer(format): + "Unregister a given serializer. This is not a thread-safe operation." + if not _serializers: + _load_serializers() + if format not in _serializers: + raise SerializerDoesNotExist(format) + del _serializers[format] + + +def get_serializer(format): + if not _serializers: + _load_serializers() + if format not in _serializers: + raise SerializerDoesNotExist(format) + return _serializers[format].Serializer + + +def get_serializer_formats(): + if not _serializers: + _load_serializers() + return list(_serializers) + + +def get_public_serializer_formats(): + if not _serializers: + _load_serializers() + return [k for k, v in _serializers.items() if not v.Serializer.internal_use_only] + + +def get_deserializer(format): + if not _serializers: + _load_serializers() + if format not in _serializers: + raise SerializerDoesNotExist(format) + return _serializers[format].Deserializer + + +def serialize(format, queryset, **options): + """ + Serialize a queryset (or any iterator that returns database objects) using + a certain serializer. + """ + s = get_serializer(format)() + s.serialize(queryset, **options) + return s.getvalue() + + +def deserialize(format, stream_or_string, **options): + """ + Deserialize a stream or a string. Return an iterator that yields ``(obj, + m2m_relation_dict)``, where ``obj`` is an instantiated -- but *unsaved* -- + object, and ``m2m_relation_dict`` is a dictionary of ``{m2m_field_name : + list_of_related_objects}``. + """ + d = get_deserializer(format) + return d(stream_or_string, **options) + + +def _load_serializers(): + """ + Register built-in and settings-defined serializers. This is done lazily so + that user code has a chance to (e.g.) set up custom settings without + needing to be careful of import order. + """ + global _serializers + serializers = {} + for format in BUILTIN_SERIALIZERS: + register_serializer(format, BUILTIN_SERIALIZERS[format], serializers) + if hasattr(settings, "SERIALIZATION_MODULES"): + for format in settings.SERIALIZATION_MODULES: + register_serializer(format, settings.SERIALIZATION_MODULES[format], serializers) + _serializers = serializers + + +def sort_dependencies(app_list): + """Sort a list of (app_config, models) pairs into a single list of models. + + The single list of models is sorted so that any model with a natural key + is serialized before a normal model, and any model with a natural key + dependency has it's dependencies serialized first. + """ + # Process the list of models, and get the list of dependencies + model_dependencies = [] + models = set() + for app_config, model_list in app_list: + if model_list is None: + model_list = app_config.get_models() + + for model in model_list: + models.add(model) + # Add any explicitly defined dependencies + if hasattr(model, 'natural_key'): + deps = getattr(model.natural_key, 'dependencies', []) + if deps: + deps = [apps.get_model(dep) for dep in deps] + else: + deps = [] + + # Now add a dependency for any FK relation with a model that + # defines a natural key + for field in model._meta.fields: + if field.remote_field: + rel_model = field.remote_field.model + if hasattr(rel_model, 'natural_key') and rel_model != model: + deps.append(rel_model) + # Also add a dependency for any simple M2M relation with a model + # that defines a natural key. M2M relations with explicit through + # models don't count as dependencies. + for field in model._meta.many_to_many: + if field.remote_field.through._meta.auto_created: + rel_model = field.remote_field.model + if hasattr(rel_model, 'natural_key') and rel_model != model: + deps.append(rel_model) + model_dependencies.append((model, deps)) + + model_dependencies.reverse() + # Now sort the models to ensure that dependencies are met. This + # is done by repeatedly iterating over the input list of models. + # If all the dependencies of a given model are in the final list, + # that model is promoted to the end of the final list. This process + # continues until the input list is empty, or we do a full iteration + # over the input models without promoting a model to the final list. + # If we do a full iteration without a promotion, that means there are + # circular dependencies in the list. + model_list = [] + while model_dependencies: + skipped = [] + changed = False + while model_dependencies: + model, deps = model_dependencies.pop() + + # If all of the models in the dependency list are either already + # on the final model list, or not on the original serialization list, + # then we've found another model with all it's dependencies satisfied. + if all(d not in models or d in model_list for d in deps): + model_list.append(model) + changed = True + else: + skipped.append((model, deps)) + if not changed: + raise RuntimeError( + "Can't resolve dependencies for %s in serialized app list." % + ', '.join( + '%s.%s' % (model._meta.app_label, model._meta.object_name) + for model, deps in sorted(skipped, key=lambda obj: obj[0].__name__) + ) + ) + model_dependencies = skipped + + return model_list diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75c6183205051097f8375353a1fb2648b8179b62 GIT binary patch literal 7079 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 e7Wke;tL7A)>8ayxtx_x3iufzns literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91a0d0f6653064088266dd29ae8b4d48dbe22873 GIT binary patch literal 10131 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/json.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/json.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2dd131266856a4da09b391f91f309e81d20b20c2 GIT binary patch literal 3672 zcmZ`+S(Dqw5$*xN3rlJ*or%1G?Q$H-5?6LARf$SbC1tG@C#j878%Hv7zz{K%zy$$% z2J~uKk{_g8Fa9BU$%FGV@&i&edCb%Pf>iB`^7VjRaF()^7dsvQz5cD= zU+xh7mzEw61+O;RB4>0QyC<283$#tJy69c`1#(i zcKsvhOS@fR&fk@Kh8LG2Yf|ml#W-?J0IZAaA=~AWnBP=&Q0{c`; z44bKr;)7VpKA$sx+}S|?5d#S=U@AasTed3f40~eWSsiPX;9IxjIwcK)O;~pfT5O8S z4u2&YfX@oS9)H1Zi?FiS?I;h2Ouzkpk$)~#8N|V76R8fhEMW+1gWd;yF%yV?S-AJ{ z>H`3X^^_>Ga42Z#(2Hut<@F(~U0poU3x~vF392lXKnM9J7W%uuH-HSzyMf=GJrU-0C!=_{|v#tD?87eDF8IKNf%J zdTI?5b)Et1tF8ikgSP83PfqLl7LYY_BV5ZGJ{w|sbxGqh1bw~?eq6k4BzrN4##i-y z=FFtmKedA@kYBRMu!%x2p|$YA>42Rt0C1zC=vIC|HV+C^)Wa zm33^W9E(7)&vgBTkxXrnDg@q%t&GP$YrJGK8i%Whl!!-B@o*^nrP=_wT4f%tbs*zn z!`lBa+I^F}?7Lbt{TfZp5bLS8oE8_zG4K>8DCgdtI^H zbxloA#>m%eA03vDi+sV=G@--iaWu}X&q za5OmC>(+7LUPRB95U{0g+b#H*-8y`WP8B^rfI31mw@e{rnf?l}##J z%zob|^#utbo)dkNzl$B;uKk0=Gnd44o$M0sDD+QY+ABFO{Sc&H_bsVCCr^EY7- zQ_G4Nb!DS+k)?x_>D-gKw8drTNm?p)0n^%f(wDZBbiHt`k|ZkBtnAwm3LBNb;!OFZ zzqrEc?p$#BF~ilw8&_QW+;1$vugINzb(#M+N;~W|5(?xnNod4@K(!o5~Ii&r!Kb1B4jxz9Y)D6TEfy zezdAHI-8tZyGLAwkGMKd>+jsWdF$rQqdF!=gwtz$jX^)o-!20s#|qtQjus9VH7#;^ z!#0_As(VM=1Et3=U%u>as%@rk@~twiX`xdc6lxTgW@VK2RiP0Pd19K#&-x%OA0yQR z*LaMr8cgi}meZx}hfRx@6Pcke;OjPxnU92xyOpyTZ!$>}g~)>&-g4 zZcV)dR*EZ+y1}5wfDc*(>0A(-XE}U+iPv^IZLcnDKy}Yogm;+m0|sw0xCankty;ex z_k2A)|Hq+p?_rD?XOM8~n^4BKNZH_5KVXiWy%k4%cwt5}Dbq~%=KnXW@xx1}_6C!@ z&y8-JS-ZbNId_!mN>`S0g4JwchH7Nnzvk_#pxv=i%@>4fQ`z2G6Bk|Xh}PVT*V?Q9 E2h%Aqv;Y7A literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/python.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/python.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..433cc3882e640cacf8387157aed0cc94b0faf7bc GIT binary patch literal 5745 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 aXgG6S=M@cGRRNlxhpn7})>m$wyZK*BEd_x9 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/pyyaml.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/pyyaml.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44259440935fd2a557d401bf5af926153c059114 GIT binary patch literal 2858 zcmaJ@TW{P%6h32nz4v5uX-Y{2R%u8V(oM+|4HXJXLa8WeMUdK92+Of2i8sD%$Fo&; z)gsX%cJNoLoyH3tU3N;nzvQ8V zHdB>DDWdfB&OM};_xSieUq)HFFGMEVhH6abxlpykiA=c1PO^~4Ia2lAL;r-|&HRvy z$#Acq^l)h4t_icC3r;|Cj2{Du9c=kE>^NEjv4MR73`5(;gb-g#(-wp!w3V$|dtE<0 z&FF^FsdN%O^tG__xrn$NeY{ucuw_X1H}OH$yGq z_!DG;Z;nmPMLu?5Z=e>Yw}m{25zbJUUQMb|<~txRRg1cHHwUKj=PL*$M1Sbv8evwIHO zB~|gf)K9qQshZ~@+WIlk4bOYj_v3;i7D$4ni5Ra6B*-5E(lxjppDxY%c zODU8^78jJ%(J?_^2#gC=%KI4Qs&VG0A$sS8wzN%+5M^e^T~#Wkn5ueS5c_%Vc~ig$ zLih%@oNk5kCv43aUYur`&g`)PRuTQsm)7rM%Rj~rO@*i?jSbzSn;1w-(G&kSk33`w0B9>{_1?nhQsSo@LX=7_Qa|?kIrp+O9%!G5tF)BP zo~D5D-INJ5^4F1|p8^a#+pvwr28JI+#6*1y2ekSeTmBbzgn4ZN0{p7>pEkm?3Cq;6 zaC78c#Q8G=Qp7nBF<1kMv0y{DOvon?R4~yqjGC7W_A!*d!J_{ySh5PT1}BCt{l8G@ ze-3bzeukX7p8FHnGZWZwf!3iHo|^F7fCoo-1ir}n*@TDmUx1^-wmICGsgsWH6fknI z^dg0+)5%VBygO7eI?66e1J+*TotmkF8#1&d-@+ZO6gF?HGyt0E$ zS4}YHS%b~9dBbKVTVqSC%odrTHSPBWd05qhERHdJC{|Q?RJxQAWm*R$=q>3`Z!kxBpn literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/xml_serializer.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/serializers/__pycache__/xml_serializer.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f81744f011f5391e7fdf63d23ce7d28688620d88 GIT binary patch literal 14917 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 done: + return + self.prev_done = done + cr = '' if self.total_count == 1 else '\r' + self.output.write(cr + '[' + '.' * done + ' ' * (self.progress_width - done) + ']') + if done == self.progress_width: + self.output.write('\n') + self.output.flush() + + +class Serializer: + """ + Abstract serializer base class. + """ + + # Indicates if the implemented serializer is only available for + # internal Django use. + internal_use_only = False + progress_class = ProgressBar + stream_class = StringIO + + def serialize(self, queryset, *, stream=None, fields=None, use_natural_foreign_keys=False, + use_natural_primary_keys=False, progress_output=None, object_count=0, **options): + """ + Serialize a queryset. + """ + self.options = options + + self.stream = stream if stream is not None else self.stream_class() + self.selected_fields = fields + self.use_natural_foreign_keys = use_natural_foreign_keys + self.use_natural_primary_keys = use_natural_primary_keys + progress_bar = self.progress_class(progress_output, object_count) + + self.start_serialization() + self.first = True + for count, obj in enumerate(queryset, start=1): + self.start_object(obj) + # Use the concrete parent class' _meta instead of the object's _meta + # This is to avoid local_fields problems for proxy models. Refs #17717. + concrete_model = obj._meta.concrete_model + # When using natural primary keys, retrieve the pk field of the + # parent for multi-table inheritance child models. That field must + # be serialized, otherwise deserialization isn't possible. + if self.use_natural_primary_keys: + pk = concrete_model._meta.pk + pk_parent = pk if pk.remote_field and pk.remote_field.parent_link else None + else: + pk_parent = None + for field in concrete_model._meta.local_fields: + if field.serialize or field is pk_parent: + if field.remote_field is None: + if self.selected_fields is None or field.attname in self.selected_fields: + self.handle_field(obj, field) + else: + if self.selected_fields is None or field.attname[:-3] in self.selected_fields: + self.handle_fk_field(obj, field) + for field in concrete_model._meta.many_to_many: + if field.serialize: + if self.selected_fields is None or field.attname in self.selected_fields: + self.handle_m2m_field(obj, field) + self.end_object(obj) + progress_bar.update(count) + self.first = self.first and False + self.end_serialization() + return self.getvalue() + + def start_serialization(self): + """ + Called when serializing of the queryset starts. + """ + raise NotImplementedError('subclasses of Serializer must provide a start_serialization() method') + + def end_serialization(self): + """ + Called when serializing of the queryset ends. + """ + pass + + def start_object(self, obj): + """ + Called when serializing of an object starts. + """ + raise NotImplementedError('subclasses of Serializer must provide a start_object() method') + + def end_object(self, obj): + """ + Called when serializing of an object ends. + """ + pass + + def handle_field(self, obj, field): + """ + Called to handle each individual (non-relational) field on an object. + """ + raise NotImplementedError('subclasses of Serializer must provide an handle_field() method') + + def handle_fk_field(self, obj, field): + """ + Called to handle a ForeignKey field. + """ + raise NotImplementedError('subclasses of Serializer must provide an handle_fk_field() method') + + def handle_m2m_field(self, obj, field): + """ + Called to handle a ManyToManyField. + """ + raise NotImplementedError('subclasses of Serializer must provide an handle_m2m_field() method') + + def getvalue(self): + """ + Return the fully serialized queryset (or None if the output stream is + not seekable). + """ + if callable(getattr(self.stream, 'getvalue', None)): + return self.stream.getvalue() + + +class Deserializer: + """ + Abstract base deserializer class. + """ + + def __init__(self, stream_or_string, **options): + """ + Init this serializer given a stream or a string + """ + self.options = options + if isinstance(stream_or_string, str): + self.stream = StringIO(stream_or_string) + else: + self.stream = stream_or_string + + def __iter__(self): + return self + + def __next__(self): + """Iteration interface -- return the next item in the stream""" + raise NotImplementedError('subclasses of Deserializer must provide a __next__() method') + + +class DeserializedObject: + """ + A deserialized model. + + Basically a container for holding the pre-saved deserialized data along + with the many-to-many data saved with the object. + + Call ``save()`` to save the object (with the many-to-many data) to the + database; call ``save(save_m2m=False)`` to save just the object fields + (and not touch the many-to-many stuff.) + """ + + def __init__(self, obj, m2m_data=None): + self.object = obj + self.m2m_data = m2m_data + + def __repr__(self): + return "<%s: %s(pk=%s)>" % ( + self.__class__.__name__, + self.object._meta.label, + self.object.pk, + ) + + def save(self, save_m2m=True, using=None, **kwargs): + # Call save on the Model baseclass directly. This bypasses any + # model-defined save. The save is also forced to be raw. + # raw=True is passed to any pre/post_save signals. + models.Model.save_base(self.object, using=using, raw=True, **kwargs) + if self.m2m_data and save_m2m: + for accessor_name, object_list in self.m2m_data.items(): + getattr(self.object, accessor_name).set(object_list) + + # prevent a second (possibly accidental) call to save() from saving + # the m2m data twice. + self.m2m_data = None + + +def build_instance(Model, data, db): + """ + Build a model instance. + + If the model instance doesn't have a primary key and the model supports + natural keys, try to retrieve it from the database. + """ + obj = Model(**data) + if (obj.pk is None and hasattr(Model, 'natural_key') and + hasattr(Model._default_manager, 'get_by_natural_key')): + natural_key = obj.natural_key() + try: + obj.pk = Model._default_manager.db_manager(db).get_by_natural_key(*natural_key).pk + except Model.DoesNotExist: + pass + return obj + + +def deserialize_m2m_values(field, field_value, using): + model = field.remote_field.model + if hasattr(model._default_manager, 'get_by_natural_key'): + def m2m_convert(value): + if hasattr(value, '__iter__') and not isinstance(value, str): + return model._default_manager.db_manager(using).get_by_natural_key(*value).pk + else: + return model._meta.pk.to_python(value) + else: + def m2m_convert(v): + return model._meta.pk.to_python(v) + + try: + values = [] + for pk in field_value: + values.append(m2m_convert(pk)) + return values + except Exception as e: + raise M2MDeserializationError(e, pk) + + +def deserialize_fk_value(field, field_value, using): + if field_value is None: + return None + model = field.remote_field.model + default_manager = model._default_manager + field_name = field.remote_field.field_name + if (hasattr(default_manager, 'get_by_natural_key') and + hasattr(field_value, '__iter__') and not isinstance(field_value, str)): + obj = default_manager.db_manager(using).get_by_natural_key(*field_value) + value = getattr(obj, field_name) + # If this is a natural foreign key to an object that has a FK/O2O as + # the foreign key, use the FK value. + if model._meta.pk.remote_field: + value = value.pk + return value + return model._meta.get_field(field_name).to_python(field_value) diff --git a/env/lib/python3.5/site-packages/django/core/serializers/json.py b/env/lib/python3.5/site-packages/django/core/serializers/json.py new file mode 100644 index 0000000..5d35440 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/serializers/json.py @@ -0,0 +1,104 @@ +""" +Serialize data to/from JSON +""" + +import datetime +import decimal +import json +import uuid + +from django.core.serializers.base import DeserializationError +from django.core.serializers.python import ( + Deserializer as PythonDeserializer, Serializer as PythonSerializer, +) +from django.utils.duration import duration_iso_string +from django.utils.functional import Promise +from django.utils.timezone import is_aware + + +class Serializer(PythonSerializer): + """Convert a queryset to JSON.""" + internal_use_only = False + + def _init_options(self): + self._current = None + self.json_kwargs = self.options.copy() + self.json_kwargs.pop('stream', None) + self.json_kwargs.pop('fields', None) + if self.options.get('indent'): + # Prevent trailing spaces + self.json_kwargs['separators'] = (',', ': ') + self.json_kwargs.setdefault('cls', DjangoJSONEncoder) + + def start_serialization(self): + self._init_options() + self.stream.write("[") + + def end_serialization(self): + if self.options.get("indent"): + self.stream.write("\n") + self.stream.write("]") + if self.options.get("indent"): + self.stream.write("\n") + + def end_object(self, obj): + # self._current has the field data + indent = self.options.get("indent") + if not self.first: + self.stream.write(",") + if not indent: + self.stream.write(" ") + if indent: + self.stream.write("\n") + json.dump(self.get_dump_object(obj), self.stream, **self.json_kwargs) + self._current = None + + def getvalue(self): + # Grandparent super + return super(PythonSerializer, self).getvalue() + + +def Deserializer(stream_or_string, **options): + """Deserialize a stream or string of JSON data.""" + if not isinstance(stream_or_string, (bytes, str)): + stream_or_string = stream_or_string.read() + if isinstance(stream_or_string, bytes): + stream_or_string = stream_or_string.decode() + try: + objects = json.loads(stream_or_string) + yield from PythonDeserializer(objects, **options) + except (GeneratorExit, DeserializationError): + raise + except Exception as exc: + raise DeserializationError() from exc + + +class DjangoJSONEncoder(json.JSONEncoder): + """ + JSONEncoder subclass that knows how to encode date/time, decimal types, and + UUIDs. + """ + def default(self, o): + # See "Date Time String Format" in the ECMA-262 specification. + if isinstance(o, datetime.datetime): + r = o.isoformat() + if o.microsecond: + r = r[:23] + r[26:] + if r.endswith('+00:00'): + r = r[:-6] + 'Z' + return r + elif isinstance(o, datetime.date): + return o.isoformat() + elif isinstance(o, datetime.time): + if is_aware(o): + raise ValueError("JSON can't represent timezone-aware times.") + r = o.isoformat() + if o.microsecond: + r = r[:12] + return r + elif isinstance(o, datetime.timedelta): + return duration_iso_string(o) + elif isinstance(o, (decimal.Decimal, uuid.UUID, Promise)): + return str(o) + else: + return super().default(o) diff --git a/env/lib/python3.5/site-packages/django/core/serializers/python.py b/env/lib/python3.5/site-packages/django/core/serializers/python.py new file mode 100644 index 0000000..922e2c6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/serializers/python.py @@ -0,0 +1,148 @@ +""" +A Python "serializer". Doesn't do much serializing per se -- just converts to +and from basic Python data types (lists, dicts, strings, etc.). Useful as a basis for +other serializers. +""" +from collections import OrderedDict + +from django.apps import apps +from django.core.serializers import base +from django.db import DEFAULT_DB_ALIAS, models +from django.utils.encoding import is_protected_type + + +class Serializer(base.Serializer): + """ + Serialize a QuerySet to basic Python objects. + """ + + internal_use_only = True + + def start_serialization(self): + self._current = None + self.objects = [] + + def end_serialization(self): + pass + + def start_object(self, obj): + self._current = OrderedDict() + + def end_object(self, obj): + self.objects.append(self.get_dump_object(obj)) + self._current = None + + def get_dump_object(self, obj): + data = OrderedDict([('model', str(obj._meta))]) + if not self.use_natural_primary_keys or not hasattr(obj, 'natural_key'): + data["pk"] = self._value_from_field(obj, obj._meta.pk) + data['fields'] = self._current + return data + + def _value_from_field(self, obj, field): + value = field.value_from_object(obj) + # Protected types (i.e., primitives like None, numbers, dates, + # and Decimals) are passed through as is. All other values are + # converted to string first. + return value if is_protected_type(value) else field.value_to_string(obj) + + def handle_field(self, obj, field): + self._current[field.name] = self._value_from_field(obj, field) + + def handle_fk_field(self, obj, field): + if self.use_natural_foreign_keys and hasattr(field.remote_field.model, 'natural_key'): + related = getattr(obj, field.name) + if related: + value = related.natural_key() + else: + value = None + else: + value = self._value_from_field(obj, field) + self._current[field.name] = value + + def handle_m2m_field(self, obj, field): + if field.remote_field.through._meta.auto_created: + if self.use_natural_foreign_keys and hasattr(field.remote_field.model, 'natural_key'): + def m2m_value(value): + return value.natural_key() + else: + def m2m_value(value): + return self._value_from_field(value, value._meta.pk) + self._current[field.name] = [ + m2m_value(related) for related in getattr(obj, field.name).iterator() + ] + + def getvalue(self): + return self.objects + + +def Deserializer(object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False, **options): + """ + Deserialize simple Python objects back into Django ORM instances. + + It's expected that you pass the Python objects themselves (instead of a + stream or a string) to the constructor + """ + field_names_cache = {} # Model: + + for d in object_list: + # Look up the model and starting build a dict of data for it. + try: + Model = _get_model(d["model"]) + except base.DeserializationError: + if ignorenonexistent: + continue + else: + raise + data = {} + if 'pk' in d: + try: + data[Model._meta.pk.attname] = Model._meta.pk.to_python(d.get('pk')) + except Exception as e: + raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), None) + m2m_data = {} + + if Model not in field_names_cache: + field_names_cache[Model] = {f.name for f in Model._meta.get_fields()} + field_names = field_names_cache[Model] + + # Handle each field + for (field_name, field_value) in d["fields"].items(): + + if ignorenonexistent and field_name not in field_names: + # skip fields no longer on model + continue + + field = Model._meta.get_field(field_name) + + # Handle M2M relations + if field.remote_field and isinstance(field.remote_field, models.ManyToManyRel): + try: + values = base.deserialize_m2m_values(field, field_value, using) + except base.M2MDeserializationError as e: + raise base.DeserializationError.WithData(e.original_exc, d['model'], d.get('pk'), e.pk) + m2m_data[field.name] = values + # Handle FK fields + elif field.remote_field and isinstance(field.remote_field, models.ManyToOneRel): + try: + value = base.deserialize_fk_value(field, field_value, using) + except Exception as e: + raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), field_value) + data[field.attname] = value + # Handle all other fields + else: + try: + data[field.name] = field.to_python(field_value) + except Exception as e: + raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), field_value) + + obj = base.build_instance(Model, data, using) + yield base.DeserializedObject(obj, m2m_data) + + +def _get_model(model_identifier): + """Look up a model from an "app_label.model_name" string.""" + try: + return apps.get_model(model_identifier) + except (LookupError, TypeError): + raise base.DeserializationError("Invalid model identifier: '%s'" % model_identifier) diff --git a/env/lib/python3.5/site-packages/django/core/serializers/pyyaml.py b/env/lib/python3.5/site-packages/django/core/serializers/pyyaml.py new file mode 100644 index 0000000..ed3d391 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/serializers/pyyaml.py @@ -0,0 +1,77 @@ +""" +YAML serializer. + +Requires PyYaml (https://pyyaml.org/), but that's checked for in __init__. +""" + +import collections +import decimal +from io import StringIO + +import yaml + +from django.core.serializers.base import DeserializationError +from django.core.serializers.python import ( + Deserializer as PythonDeserializer, Serializer as PythonSerializer, +) +from django.db import models + +# Use the C (faster) implementation if possible +try: + from yaml import CSafeLoader as SafeLoader + from yaml import CSafeDumper as SafeDumper +except ImportError: + from yaml import SafeLoader, SafeDumper + + +class DjangoSafeDumper(SafeDumper): + def represent_decimal(self, data): + return self.represent_scalar('tag:yaml.org,2002:str', str(data)) + + def represent_ordered_dict(self, data): + return self.represent_mapping('tag:yaml.org,2002:map', data.items()) + + +DjangoSafeDumper.add_representer(decimal.Decimal, DjangoSafeDumper.represent_decimal) +DjangoSafeDumper.add_representer(collections.OrderedDict, DjangoSafeDumper.represent_ordered_dict) + + +class Serializer(PythonSerializer): + """Convert a queryset to YAML.""" + + internal_use_only = False + + def handle_field(self, obj, field): + # A nasty special case: base YAML doesn't support serialization of time + # types (as opposed to dates or datetimes, which it does support). Since + # we want to use the "safe" serializer for better interoperability, we + # need to do something with those pesky times. Converting 'em to strings + # isn't perfect, but it's better than a "!!python/time" type which would + # halt deserialization under any other language. + if isinstance(field, models.TimeField) and getattr(obj, field.name) is not None: + self._current[field.name] = str(getattr(obj, field.name)) + else: + super().handle_field(obj, field) + + def end_serialization(self): + yaml.dump(self.objects, self.stream, Dumper=DjangoSafeDumper, **self.options) + + def getvalue(self): + # Grandparent super + return super(PythonSerializer, self).getvalue() + + +def Deserializer(stream_or_string, **options): + """Deserialize a stream or string of YAML data.""" + if isinstance(stream_or_string, bytes): + stream_or_string = stream_or_string.decode() + if isinstance(stream_or_string, str): + stream = StringIO(stream_or_string) + else: + stream = stream_or_string + try: + yield from PythonDeserializer(yaml.load(stream, Loader=SafeLoader), **options) + except (GeneratorExit, DeserializationError): + raise + except Exception as exc: + raise DeserializationError() from exc diff --git a/env/lib/python3.5/site-packages/django/core/serializers/xml_serializer.py b/env/lib/python3.5/site-packages/django/core/serializers/xml_serializer.py new file mode 100644 index 0000000..8cd6306 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/serializers/xml_serializer.py @@ -0,0 +1,384 @@ +""" +XML serializer. +""" + +from xml.dom import pulldom +from xml.sax import handler +from xml.sax.expatreader import ExpatParser as _ExpatParser + +from django.apps import apps +from django.conf import settings +from django.core.serializers import base +from django.db import DEFAULT_DB_ALIAS, models +from django.utils.xmlutils import ( + SimplerXMLGenerator, UnserializableContentError, +) + + +class Serializer(base.Serializer): + """Serialize a QuerySet to XML.""" + + def indent(self, level): + if self.options.get('indent') is not None: + self.xml.ignorableWhitespace('\n' + ' ' * self.options.get('indent') * level) + + def start_serialization(self): + """ + Start serialization -- open the XML document and the root element. + """ + self.xml = SimplerXMLGenerator(self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET)) + self.xml.startDocument() + self.xml.startElement("django-objects", {"version": "1.0"}) + + def end_serialization(self): + """ + End serialization -- end the document. + """ + self.indent(0) + self.xml.endElement("django-objects") + self.xml.endDocument() + + def start_object(self, obj): + """ + Called as each object is handled. + """ + if not hasattr(obj, "_meta"): + raise base.SerializationError("Non-model object (%s) encountered during serialization" % type(obj)) + + self.indent(1) + attrs = {'model': str(obj._meta)} + if not self.use_natural_primary_keys or not hasattr(obj, 'natural_key'): + obj_pk = obj.pk + if obj_pk is not None: + attrs['pk'] = str(obj_pk) + + self.xml.startElement("object", attrs) + + def end_object(self, obj): + """ + Called after handling all fields for an object. + """ + self.indent(1) + self.xml.endElement("object") + + def handle_field(self, obj, field): + """ + Handle each field on an object (except for ForeignKeys and + ManyToManyFields). + """ + self.indent(2) + self.xml.startElement('field', { + 'name': field.name, + 'type': field.get_internal_type(), + }) + + # Get a "string version" of the object's data. + if getattr(obj, field.name) is not None: + try: + self.xml.characters(field.value_to_string(obj)) + except UnserializableContentError: + raise ValueError("%s.%s (pk:%s) contains unserializable characters" % ( + obj.__class__.__name__, field.name, obj.pk)) + else: + self.xml.addQuickElement("None") + + self.xml.endElement("field") + + def handle_fk_field(self, obj, field): + """ + Handle a ForeignKey (they need to be treated slightly + differently from regular fields). + """ + self._start_relational_field(field) + related_att = getattr(obj, field.get_attname()) + if related_att is not None: + if self.use_natural_foreign_keys and hasattr(field.remote_field.model, 'natural_key'): + related = getattr(obj, field.name) + # If related object has a natural key, use it + related = related.natural_key() + # Iterable natural keys are rolled out as subelements + for key_value in related: + self.xml.startElement("natural", {}) + self.xml.characters(str(key_value)) + self.xml.endElement("natural") + else: + self.xml.characters(str(related_att)) + else: + self.xml.addQuickElement("None") + self.xml.endElement("field") + + def handle_m2m_field(self, obj, field): + """ + Handle a ManyToManyField. Related objects are only serialized as + references to the object's PK (i.e. the related *data* is not dumped, + just the relation). + """ + if field.remote_field.through._meta.auto_created: + self._start_relational_field(field) + if self.use_natural_foreign_keys and hasattr(field.remote_field.model, 'natural_key'): + # If the objects in the m2m have a natural key, use it + def handle_m2m(value): + natural = value.natural_key() + # Iterable natural keys are rolled out as subelements + self.xml.startElement("object", {}) + for key_value in natural: + self.xml.startElement("natural", {}) + self.xml.characters(str(key_value)) + self.xml.endElement("natural") + self.xml.endElement("object") + else: + def handle_m2m(value): + self.xml.addQuickElement("object", attrs={ + 'pk': str(value.pk) + }) + for relobj in getattr(obj, field.name).iterator(): + handle_m2m(relobj) + + self.xml.endElement("field") + + def _start_relational_field(self, field): + """Output the element for relational fields.""" + self.indent(2) + self.xml.startElement('field', { + 'name': field.name, + 'rel': field.remote_field.__class__.__name__, + 'to': str(field.remote_field.model._meta), + }) + + +class Deserializer(base.Deserializer): + """Deserialize XML.""" + + def __init__(self, stream_or_string, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False, **options): + super().__init__(stream_or_string, **options) + self.event_stream = pulldom.parse(self.stream, self._make_parser()) + self.db = using + self.ignore = ignorenonexistent + + def _make_parser(self): + """Create a hardened XML parser (no custom/external entities).""" + return DefusedExpatParser() + + def __next__(self): + for event, node in self.event_stream: + if event == "START_ELEMENT" and node.nodeName == "object": + self.event_stream.expandNode(node) + return self._handle_object(node) + raise StopIteration + + def _handle_object(self, node): + """Convert an node to a DeserializedObject.""" + # Look up the model using the model loading mechanism. If this fails, + # bail. + Model = self._get_model_from_node(node, "model") + + # Start building a data dictionary from the object. + data = {} + if node.hasAttribute('pk'): + data[Model._meta.pk.attname] = Model._meta.pk.to_python( + node.getAttribute('pk')) + + # Also start building a dict of m2m data (this is saved as + # {m2m_accessor_attribute : [list_of_related_objects]}) + m2m_data = {} + + field_names = {f.name for f in Model._meta.get_fields()} + # Deserialize each field. + for field_node in node.getElementsByTagName("field"): + # If the field is missing the name attribute, bail (are you + # sensing a pattern here?) + field_name = field_node.getAttribute("name") + if not field_name: + raise base.DeserializationError(" node is missing the 'name' attribute") + + # Get the field from the Model. This will raise a + # FieldDoesNotExist if, well, the field doesn't exist, which will + # be propagated correctly unless ignorenonexistent=True is used. + if self.ignore and field_name not in field_names: + continue + field = Model._meta.get_field(field_name) + + # As is usually the case, relation fields get the special treatment. + if field.remote_field and isinstance(field.remote_field, models.ManyToManyRel): + m2m_data[field.name] = self._handle_m2m_field_node(field_node, field) + elif field.remote_field and isinstance(field.remote_field, models.ManyToOneRel): + data[field.attname] = self._handle_fk_field_node(field_node, field) + else: + if field_node.getElementsByTagName('None'): + value = None + else: + value = field.to_python(getInnerText(field_node).strip()) + data[field.name] = value + + obj = base.build_instance(Model, data, self.db) + + # Return a DeserializedObject so that the m2m data has a place to live. + return base.DeserializedObject(obj, m2m_data) + + def _handle_fk_field_node(self, node, field): + """ + Handle a node for a ForeignKey + """ + # Check if there is a child node named 'None', returning None if so. + if node.getElementsByTagName('None'): + return None + else: + model = field.remote_field.model + if hasattr(model._default_manager, 'get_by_natural_key'): + keys = node.getElementsByTagName('natural') + if keys: + # If there are 'natural' subelements, it must be a natural key + field_value = [getInnerText(k).strip() for k in keys] + obj = model._default_manager.db_manager(self.db).get_by_natural_key(*field_value) + obj_pk = getattr(obj, field.remote_field.field_name) + # If this is a natural foreign key to an object that + # has a FK/O2O as the foreign key, use the FK value + if field.remote_field.model._meta.pk.remote_field: + obj_pk = obj_pk.pk + else: + # Otherwise, treat like a normal PK + field_value = getInnerText(node).strip() + obj_pk = model._meta.get_field(field.remote_field.field_name).to_python(field_value) + return obj_pk + else: + field_value = getInnerText(node).strip() + return model._meta.get_field(field.remote_field.field_name).to_python(field_value) + + def _handle_m2m_field_node(self, node, field): + """ + Handle a node for a ManyToManyField. + """ + model = field.remote_field.model + default_manager = model._default_manager + if hasattr(default_manager, 'get_by_natural_key'): + def m2m_convert(n): + keys = n.getElementsByTagName('natural') + if keys: + # If there are 'natural' subelements, it must be a natural key + field_value = [getInnerText(k).strip() for k in keys] + obj_pk = default_manager.db_manager(self.db).get_by_natural_key(*field_value).pk + else: + # Otherwise, treat like a normal PK value. + obj_pk = model._meta.pk.to_python(n.getAttribute('pk')) + return obj_pk + else: + def m2m_convert(n): + return model._meta.pk.to_python(n.getAttribute('pk')) + return [m2m_convert(c) for c in node.getElementsByTagName("object")] + + def _get_model_from_node(self, node, attr): + """ + Look up a model from a or a + node. + """ + model_identifier = node.getAttribute(attr) + if not model_identifier: + raise base.DeserializationError( + "<%s> node is missing the required '%s' attribute" + % (node.nodeName, attr)) + try: + return apps.get_model(model_identifier) + except (LookupError, TypeError): + raise base.DeserializationError( + "<%s> node has invalid model identifier: '%s'" + % (node.nodeName, model_identifier)) + + +def getInnerText(node): + """Get all the inner text of a DOM node (recursively).""" + # inspired by https://mail.python.org/pipermail/xml-sig/2005-March/011022.html + inner_text = [] + for child in node.childNodes: + if child.nodeType == child.TEXT_NODE or child.nodeType == child.CDATA_SECTION_NODE: + inner_text.append(child.data) + elif child.nodeType == child.ELEMENT_NODE: + inner_text.extend(getInnerText(child)) + else: + pass + return "".join(inner_text) + + +# Below code based on Christian Heimes' defusedxml + + +class DefusedExpatParser(_ExpatParser): + """ + An expat parser hardened against XML bomb attacks. + + Forbid DTDs, external entity references + """ + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.setFeature(handler.feature_external_ges, False) + self.setFeature(handler.feature_external_pes, False) + + def start_doctype_decl(self, name, sysid, pubid, has_internal_subset): + raise DTDForbidden(name, sysid, pubid) + + def entity_decl(self, name, is_parameter_entity, value, base, + sysid, pubid, notation_name): + raise EntitiesForbidden(name, value, base, sysid, pubid, notation_name) + + def unparsed_entity_decl(self, name, base, sysid, pubid, notation_name): + # expat 1.2 + raise EntitiesForbidden(name, None, base, sysid, pubid, notation_name) + + def external_entity_ref_handler(self, context, base, sysid, pubid): + raise ExternalReferenceForbidden(context, base, sysid, pubid) + + def reset(self): + _ExpatParser.reset(self) + parser = self._parser + parser.StartDoctypeDeclHandler = self.start_doctype_decl + parser.EntityDeclHandler = self.entity_decl + parser.UnparsedEntityDeclHandler = self.unparsed_entity_decl + parser.ExternalEntityRefHandler = self.external_entity_ref_handler + + +class DefusedXmlException(ValueError): + """Base exception.""" + def __repr__(self): + return str(self) + + +class DTDForbidden(DefusedXmlException): + """Document type definition is forbidden.""" + def __init__(self, name, sysid, pubid): + super().__init__() + self.name = name + self.sysid = sysid + self.pubid = pubid + + def __str__(self): + tpl = "DTDForbidden(name='{}', system_id={!r}, public_id={!r})" + return tpl.format(self.name, self.sysid, self.pubid) + + +class EntitiesForbidden(DefusedXmlException): + """Entity definition is forbidden.""" + def __init__(self, name, value, base, sysid, pubid, notation_name): + super().__init__() + self.name = name + self.value = value + self.base = base + self.sysid = sysid + self.pubid = pubid + self.notation_name = notation_name + + def __str__(self): + tpl = "EntitiesForbidden(name='{}', system_id={!r}, public_id={!r})" + return tpl.format(self.name, self.sysid, self.pubid) + + +class ExternalReferenceForbidden(DefusedXmlException): + """Resolving an external reference is forbidden.""" + def __init__(self, context, base, sysid, pubid): + super().__init__() + self.context = context + self.base = base + self.sysid = sysid + self.pubid = pubid + + def __str__(self): + tpl = "ExternalReferenceForbidden(system_id='{}', public_id={})" + return tpl.format(self.sysid, self.pubid) diff --git a/env/lib/python3.5/site-packages/django/core/servers/__init__.py b/env/lib/python3.5/site-packages/django/core/servers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/core/servers/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/core/servers/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23a091a4325549ffb1462dae04cf3b8d08c7a097 GIT binary patch literal 145 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 z zCF4stP<#D8kTcJ7I@93986_j$YfTT)3D2M!tzU6WwlY}+pqJ-4rTbcSoKBvk(tANW z4gU?xHS314GXRe+GFYHln_b)J%La9XTL}3cx#eLjtAxrA_d=u?rtL0s^$UAH^A1^&7W)xv8C<{s|~L z7zC0b;Z#NpK~IE)SD6U^0|wM?zLAyWAdG^nN)Ql*anN0s9#837ootXlfylZGb1fKR zx~J(gtMrrM5a-KoT>(^^GiG-Y_u)9|=VNt(%t}XGty|CG2Qa0i8%Q3bvjTuEpr#Is zU0z7>B6;dT6{A)8l7+~JnE87=iqJyXXRWg^5q=k~B0@tE*F^6U9K839l5^+mw^@4$ zCv;b)KMqVcD?i0Lvdu!XzQY>1IN@yS>ly^pyN~cFdMg1#qu98(y3nZK?U&KQ4{zXR z7COd@F$y>!j!Z~8^1B30aBy=;fXsp}DDrthJgbNpV@j+%#UDHuIZU6Wp4-;5s-E7} zW?Q8pKdtJE6K&=eUyxL%$gtSf$7+2G(!trGsPC#8<}%BuC0jBlWyJTNg-^C(jXuC0 z!3nM{sWAM4Kn=Qx_`D5m)^PuY+n%h*>?F6y|~m1Mm#qteO=n!nD5NDtn_`bEOPS7 ze7`13Bj~=BH;>aWQmy>*gm=2+h9;BY<^;z_+?)``-_ut;CMWau%;4t=Yr8CXr=XqB z=!#O9licjEmQ_D8OMOg(RqvvJsWP$RyJD{()#8h5mgPd@tww2M^+IXm{f+kj1EDYM AssI20 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/core/servers/basehttp.py b/env/lib/python3.5/site-packages/django/core/servers/basehttp.py new file mode 100644 index 0000000..3e8f176 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/servers/basehttp.py @@ -0,0 +1,213 @@ +""" +HTTP server that implements the Python WSGI protocol (PEP 333, rev 1.21). + +Based on wsgiref.simple_server which is part of the standard library since 2.5. + +This is a simple server for use in testing or debugging Django apps. It hasn't +been reviewed for security issues. DON'T USE IT FOR PRODUCTION USE! +""" + +import logging +import socket +import socketserver +import sys +from wsgiref import simple_server + +from django.core.exceptions import ImproperlyConfigured +from django.core.handlers.wsgi import LimitedStream +from django.core.wsgi import get_wsgi_application +from django.utils.module_loading import import_string + +__all__ = ('WSGIServer', 'WSGIRequestHandler') + +logger = logging.getLogger('django.server') + + +def get_internal_wsgi_application(): + """ + Load and return the WSGI application as configured by the user in + ``settings.WSGI_APPLICATION``. With the default ``startproject`` layout, + this will be the ``application`` object in ``projectname/wsgi.py``. + + This function, and the ``WSGI_APPLICATION`` setting itself, are only useful + for Django's internal server (runserver); external WSGI servers should just + be configured to point to the correct application object directly. + + If settings.WSGI_APPLICATION is not set (is ``None``), return + whatever ``django.core.wsgi.get_wsgi_application`` returns. + """ + from django.conf import settings + app_path = getattr(settings, 'WSGI_APPLICATION') + if app_path is None: + return get_wsgi_application() + + try: + return import_string(app_path) + except ImportError as err: + raise ImproperlyConfigured( + "WSGI application '%s' could not be loaded; " + "Error importing module." % app_path + ) from err + + +def is_broken_pipe_error(): + exc_type, exc_value = sys.exc_info()[:2] + return issubclass(exc_type, socket.error) and exc_value.args[0] == 32 + + +class WSGIServer(simple_server.WSGIServer): + """BaseHTTPServer that implements the Python WSGI protocol""" + + request_queue_size = 10 + + def __init__(self, *args, ipv6=False, allow_reuse_address=True, **kwargs): + if ipv6: + self.address_family = socket.AF_INET6 + self.allow_reuse_address = allow_reuse_address + super().__init__(*args, **kwargs) + + def handle_error(self, request, client_address): + if is_broken_pipe_error(): + logger.info("- Broken pipe from %s\n", client_address) + else: + super().handle_error(request, client_address) + + +class ThreadedWSGIServer(socketserver.ThreadingMixIn, WSGIServer): + """A threaded version of the WSGIServer""" + daemon_threads = True + + +class ServerHandler(simple_server.ServerHandler): + http_version = '1.1' + + def __init__(self, stdin, stdout, stderr, environ, **kwargs): + """ + Use a LimitedStream so that unread request data will be ignored at + the end of the request. WSGIRequest uses a LimitedStream but it + shouldn't discard the data since the upstream servers usually do this. + This fix applies only for testserver/runserver. + """ + try: + content_length = int(environ.get('CONTENT_LENGTH')) + except (ValueError, TypeError): + content_length = 0 + super().__init__(LimitedStream(stdin, content_length), stdout, stderr, environ, **kwargs) + + def cleanup_headers(self): + super().cleanup_headers() + # HTTP/1.1 requires support for persistent connections. Send 'close' if + # the content length is unknown to prevent clients from reusing the + # connection. + if 'Content-Length' not in self.headers: + self.headers['Connection'] = 'close' + # Mark the connection for closing if it's set as such above or if the + # application sent the header. + if self.headers.get('Connection') == 'close': + self.request_handler.close_connection = True + + def close(self): + self.get_stdin()._read_limited() + super().close() + + def handle_error(self): + # Ignore broken pipe errors, otherwise pass on + if not is_broken_pipe_error(): + super().handle_error() + + +class WSGIRequestHandler(simple_server.WSGIRequestHandler): + protocol_version = 'HTTP/1.1' + + def address_string(self): + # Short-circuit parent method to not call socket.getfqdn + return self.client_address[0] + + def log_message(self, format, *args): + extra = { + 'request': self.request, + 'server_time': self.log_date_time_string(), + } + if args[1][0] == '4': + # 0x16 = Handshake, 0x03 = SSL 3.0 or TLS 1.x + if args[0].startswith('\x16\x03'): + extra['status_code'] = 500 + logger.error( + "You're accessing the development server over HTTPS, but " + "it only supports HTTP.\n", extra=extra, + ) + return + + if args[1].isdigit() and len(args[1]) == 3: + status_code = int(args[1]) + extra['status_code'] = status_code + + if status_code >= 500: + level = logger.error + elif status_code >= 400: + level = logger.warning + else: + level = logger.info + else: + level = logger.info + + level(format, *args, extra=extra) + + def get_environ(self): + # Strip all headers with underscores in the name before constructing + # the WSGI environ. This prevents header-spoofing based on ambiguity + # between underscores and dashes both normalized to underscores in WSGI + # env vars. Nginx and Apache 2.4+ both do this as well. + for k in self.headers: + if '_' in k: + del self.headers[k] + + return super().get_environ() + + def handle(self): + self.close_connection = True + self.handle_one_request() + while not self.close_connection: + self.handle_one_request() + try: + self.connection.shutdown(socket.SHUT_WR) + except (socket.error, AttributeError): + pass + + def handle_one_request(self): + """Copy of WSGIRequestHandler.handle() but with different ServerHandler""" + self.raw_requestline = self.rfile.readline(65537) + if len(self.raw_requestline) > 65536: + self.requestline = '' + self.request_version = '' + self.command = '' + self.send_error(414) + return + + if not self.parse_request(): # An error code has been sent, just exit + return + + handler = ServerHandler( + self.rfile, self.wfile, self.get_stderr(), self.get_environ() + ) + handler.request_handler = self # backpointer for logging & connection closing + handler.run(self.server.get_app()) + + +def run(addr, port, wsgi_handler, ipv6=False, threading=False, server_cls=WSGIServer): + server_address = (addr, port) + if threading: + httpd_cls = type('WSGIServer', (socketserver.ThreadingMixIn, server_cls), {}) + else: + httpd_cls = server_cls + httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6) + if threading: + # ThreadingMixIn.daemon_threads indicates how threads will behave on an + # abrupt shutdown; like quitting the server by the user or restarting + # by the auto-reloader. True means the server will not wait for thread + # termination before it quits. This will make auto-reloader faster + # and will prevent the need to kill the server manually if a thread + # isn't terminating correctly. + httpd.daemon_threads = True + httpd.set_app(wsgi_handler) + httpd.serve_forever() diff --git a/env/lib/python3.5/site-packages/django/core/signals.py b/env/lib/python3.5/site-packages/django/core/signals.py new file mode 100644 index 0000000..5d9618d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/signals.py @@ -0,0 +1,6 @@ +from django.dispatch import Signal + +request_started = Signal(providing_args=["environ"]) +request_finished = Signal() +got_request_exception = Signal(providing_args=["request"]) +setting_changed = Signal(providing_args=["setting", "value", "enter"]) diff --git a/env/lib/python3.5/site-packages/django/core/signing.py b/env/lib/python3.5/site-packages/django/core/signing.py new file mode 100644 index 0000000..1e92838 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/signing.py @@ -0,0 +1,198 @@ +""" +Functions for creating and restoring url-safe signed JSON objects. + +The format used looks like this: + +>>> signing.dumps("hello") +'ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk' + +There are two components here, separated by a ':'. The first component is a +URLsafe base64 encoded JSON of the object passed to dumps(). The second +component is a base64 encoded hmac/SHA1 hash of "$first_component:$secret" + +signing.loads(s) checks the signature and returns the deserialized object. +If the signature fails, a BadSignature exception is raised. + +>>> signing.loads("ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk") +'hello' +>>> signing.loads("ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk-modified") +... +BadSignature: Signature failed: ImhlbGxvIg:1QaUZC:YIye-ze3TTx7gtSv422nZA4sgmk-modified + +You can optionally compress the JSON prior to base64 encoding it to save +space, using the compress=True argument. This checks if compression actually +helps and only applies compression if the result is a shorter string: + +>>> signing.dumps(list(range(1, 20)), compress=True) +'.eJwFwcERACAIwLCF-rCiILN47r-GyZVJsNgkxaFxoDgxcOHGxMKD_T7vhAml:1QaUaL:BA0thEZrp4FQVXIXuOvYJtLJSrQ' + +The fact that the string is compressed is signalled by the prefixed '.' at the +start of the base64 JSON. + +There are 65 url-safe characters: the 64 used by url-safe base64 and the ':'. +These functions make use of all of them. +""" + +import base64 +import datetime +import json +import re +import time +import zlib + +from django.conf import settings +from django.utils import baseconv +from django.utils.crypto import constant_time_compare, salted_hmac +from django.utils.encoding import force_bytes +from django.utils.module_loading import import_string + +_SEP_UNSAFE = re.compile(r'^[A-z0-9-_=]*$') + + +class BadSignature(Exception): + """Signature does not match.""" + pass + + +class SignatureExpired(BadSignature): + """Signature timestamp is older than required max_age.""" + pass + + +def b64_encode(s): + return base64.urlsafe_b64encode(s).strip(b'=') + + +def b64_decode(s): + pad = b'=' * (-len(s) % 4) + return base64.urlsafe_b64decode(s + pad) + + +def base64_hmac(salt, value, key): + return b64_encode(salted_hmac(salt, value, key).digest()).decode() + + +def get_cookie_signer(salt='django.core.signing.get_cookie_signer'): + Signer = import_string(settings.SIGNING_BACKEND) + key = force_bytes(settings.SECRET_KEY) # SECRET_KEY may be str or bytes. + return Signer(b'django.http.cookies' + key, salt=salt) + + +class JSONSerializer: + """ + Simple wrapper around json to be used in signing.dumps and + signing.loads. + """ + def dumps(self, obj): + return json.dumps(obj, separators=(',', ':')).encode('latin-1') + + def loads(self, data): + return json.loads(data.decode('latin-1')) + + +def dumps(obj, key=None, salt='django.core.signing', serializer=JSONSerializer, compress=False): + """ + Return URL-safe, hmac/SHA1 signed base64 compressed JSON string. If key is + None, use settings.SECRET_KEY instead. + + If compress is True (not the default), check if compressing using zlib can + save some space. Prepend a '.' to signify compression. This is included + in the signature, to protect against zip bombs. + + Salt can be used to namespace the hash, so that a signed string is + only valid for a given namespace. Leaving this at the default + value or re-using a salt value across different parts of your + application without good cause is a security risk. + + The serializer is expected to return a bytestring. + """ + data = serializer().dumps(obj) + + # Flag for if it's been compressed or not + is_compressed = False + + if compress: + # Avoid zlib dependency unless compress is being used + compressed = zlib.compress(data) + if len(compressed) < (len(data) - 1): + data = compressed + is_compressed = True + base64d = b64_encode(data).decode() + if is_compressed: + base64d = '.' + base64d + return TimestampSigner(key, salt=salt).sign(base64d) + + +def loads(s, key=None, salt='django.core.signing', serializer=JSONSerializer, max_age=None): + """ + Reverse of dumps(), raise BadSignature if signature fails. + + The serializer is expected to accept a bytestring. + """ + # TimestampSigner.unsign() returns str but base64 and zlib compression + # operate on bytes. + base64d = TimestampSigner(key, salt=salt).unsign(s, max_age=max_age).encode() + decompress = base64d[:1] == b'.' + if decompress: + # It's compressed; uncompress it first + base64d = base64d[1:] + data = b64_decode(base64d) + if decompress: + data = zlib.decompress(data) + return serializer().loads(data) + + +class Signer: + + def __init__(self, key=None, sep=':', salt=None): + # Use of native strings in all versions of Python + self.key = key or settings.SECRET_KEY + self.sep = sep + if _SEP_UNSAFE.match(self.sep): + raise ValueError( + 'Unsafe Signer separator: %r (cannot be empty or consist of ' + 'only A-z0-9-_=)' % sep, + ) + self.salt = salt or '%s.%s' % (self.__class__.__module__, self.__class__.__name__) + + def signature(self, value): + return base64_hmac(self.salt + 'signer', value, self.key) + + def sign(self, value): + return '%s%s%s' % (value, self.sep, self.signature(value)) + + def unsign(self, signed_value): + if self.sep not in signed_value: + raise BadSignature('No "%s" found in value' % self.sep) + value, sig = signed_value.rsplit(self.sep, 1) + if constant_time_compare(sig, self.signature(value)): + return value + raise BadSignature('Signature "%s" does not match' % sig) + + +class TimestampSigner(Signer): + + def timestamp(self): + return baseconv.base62.encode(int(time.time())) + + def sign(self, value): + value = '%s%s%s' % (value, self.sep, self.timestamp()) + return super().sign(value) + + def unsign(self, value, max_age=None): + """ + Retrieve original value and check it wasn't signed more + than max_age seconds ago. + """ + result = super().unsign(value) + value, timestamp = result.rsplit(self.sep, 1) + timestamp = baseconv.base62.decode(timestamp) + if max_age is not None: + if isinstance(max_age, datetime.timedelta): + max_age = max_age.total_seconds() + # Check timestamp is not older than max_age + age = time.time() - timestamp + if age > max_age: + raise SignatureExpired( + 'Signature age %s > %s seconds' % (age, max_age)) + return value diff --git a/env/lib/python3.5/site-packages/django/core/validators.py b/env/lib/python3.5/site-packages/django/core/validators.py new file mode 100644 index 0000000..92394a7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/validators.py @@ -0,0 +1,538 @@ +import ipaddress +import re +from pathlib import Path +from urllib.parse import urlsplit, urlunsplit + +from django.core.exceptions import ValidationError +from django.utils.deconstruct import deconstructible +from django.utils.functional import SimpleLazyObject +from django.utils.ipv6 import is_valid_ipv6_address +from django.utils.translation import gettext_lazy as _, ngettext_lazy + +# These values, if given to validate(), will trigger the self.required check. +EMPTY_VALUES = (None, '', [], (), {}) + + +def _lazy_re_compile(regex, flags=0): + """Lazily compile a regex with flags.""" + def _compile(): + # Compile the regex if it was not passed pre-compiled. + if isinstance(regex, str): + return re.compile(regex, flags) + else: + assert not flags, "flags must be empty if regex is passed pre-compiled" + return regex + return SimpleLazyObject(_compile) + + +@deconstructible +class RegexValidator: + regex = '' + message = _('Enter a valid value.') + code = 'invalid' + inverse_match = False + flags = 0 + + def __init__(self, regex=None, message=None, code=None, inverse_match=None, flags=None): + if regex is not None: + self.regex = regex + if message is not None: + self.message = message + if code is not None: + self.code = code + if inverse_match is not None: + self.inverse_match = inverse_match + if flags is not None: + self.flags = flags + if self.flags and not isinstance(self.regex, str): + raise TypeError("If the flags are set, regex must be a regular expression string.") + + self.regex = _lazy_re_compile(self.regex, self.flags) + + def __call__(self, value): + """ + Validate that the input contains (or does *not* contain, if + inverse_match is True) a match for the regular expression. + """ + regex_matches = self.regex.search(str(value)) + invalid_input = regex_matches if self.inverse_match else not regex_matches + if invalid_input: + raise ValidationError(self.message, code=self.code) + + def __eq__(self, other): + return ( + isinstance(other, RegexValidator) and + self.regex.pattern == other.regex.pattern and + self.regex.flags == other.regex.flags and + (self.message == other.message) and + (self.code == other.code) and + (self.inverse_match == other.inverse_match) + ) + + +@deconstructible +class URLValidator(RegexValidator): + ul = '\u00a1-\uffff' # unicode letters range (must not be a raw string) + + # IP patterns + ipv4_re = r'(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}' + ipv6_re = r'\[[0-9a-f:\.]+\]' # (simple regex, validated later) + + # Host patterns + hostname_re = r'[a-z' + ul + r'0-9](?:[a-z' + ul + r'0-9-]{0,61}[a-z' + ul + r'0-9])?' + # Max length for domain name labels is 63 characters per RFC 1034 sec. 3.1 + domain_re = r'(?:\.(?!-)[a-z' + ul + r'0-9-]{1,63}(? ACE + except UnicodeError: # invalid domain part + raise e + url = urlunsplit((scheme, netloc, path, query, fragment)) + super().__call__(url) + else: + raise + else: + # Now verify IPv6 in the netloc part + host_match = re.search(r'^\[(.+)\](?::\d{2,5})?$', urlsplit(value).netloc) + if host_match: + potential_ip = host_match.groups()[0] + try: + validate_ipv6_address(potential_ip) + except ValidationError: + raise ValidationError(self.message, code=self.code) + + # The maximum length of a full host name is 253 characters per RFC 1034 + # section 3.1. It's defined to be 255 bytes or less, but this includes + # one byte for the length of the name and one byte for the trailing dot + # that's used to indicate absolute names in DNS. + if len(urlsplit(value).netloc) > 253: + raise ValidationError(self.message, code=self.code) + + +integer_validator = RegexValidator( + _lazy_re_compile(r'^-?\d+\Z'), + message=_('Enter a valid integer.'), + code='invalid', +) + + +def validate_integer(value): + return integer_validator(value) + + +@deconstructible +class EmailValidator: + message = _('Enter a valid email address.') + code = 'invalid' + user_regex = _lazy_re_compile( + r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z" # dot-atom + r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)', # quoted-string + re.IGNORECASE) + domain_regex = _lazy_re_compile( + # max length for domain name labels is 63 characters per RFC 1034 + r'((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+)(?:[A-Z0-9-]{2,63}(? b + + +@deconstructible +class MinValueValidator(BaseValidator): + message = _('Ensure this value is greater than or equal to %(limit_value)s.') + code = 'min_value' + + def compare(self, a, b): + return a < b + + +@deconstructible +class MinLengthValidator(BaseValidator): + message = ngettext_lazy( + 'Ensure this value has at least %(limit_value)d character (it has %(show_value)d).', + 'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).', + 'limit_value') + code = 'min_length' + + def compare(self, a, b): + return a < b + + def clean(self, x): + return len(x) + + +@deconstructible +class MaxLengthValidator(BaseValidator): + message = ngettext_lazy( + 'Ensure this value has at most %(limit_value)d character (it has %(show_value)d).', + 'Ensure this value has at most %(limit_value)d characters (it has %(show_value)d).', + 'limit_value') + code = 'max_length' + + def compare(self, a, b): + return a > b + + def clean(self, x): + return len(x) + + +@deconstructible +class DecimalValidator: + """ + Validate that the input does not exceed the maximum number of digits + expected, otherwise raise ValidationError. + """ + messages = { + 'invalid': _('Enter a number.'), + 'max_digits': ngettext_lazy( + 'Ensure that there are no more than %(max)s digit in total.', + 'Ensure that there are no more than %(max)s digits in total.', + 'max' + ), + 'max_decimal_places': ngettext_lazy( + 'Ensure that there are no more than %(max)s decimal place.', + 'Ensure that there are no more than %(max)s decimal places.', + 'max' + ), + 'max_whole_digits': ngettext_lazy( + 'Ensure that there are no more than %(max)s digit before the decimal point.', + 'Ensure that there are no more than %(max)s digits before the decimal point.', + 'max' + ), + } + + def __init__(self, max_digits, decimal_places): + self.max_digits = max_digits + self.decimal_places = decimal_places + + def __call__(self, value): + digit_tuple, exponent = value.as_tuple()[1:] + if exponent in {'F', 'n', 'N'}: + raise ValidationError(self.messages['invalid']) + if exponent >= 0: + # A positive exponent adds that many trailing zeros. + digits = len(digit_tuple) + exponent + decimals = 0 + else: + # If the absolute value of the negative exponent is larger than the + # number of digits, then it's the same as the number of digits, + # because it'll consume all of the digits in digit_tuple and then + # add abs(exponent) - len(digit_tuple) leading zeros after the + # decimal point. + if abs(exponent) > len(digit_tuple): + digits = decimals = abs(exponent) + else: + digits = len(digit_tuple) + decimals = abs(exponent) + whole_digits = digits - decimals + + if self.max_digits is not None and digits > self.max_digits: + raise ValidationError( + self.messages['max_digits'], + code='max_digits', + params={'max': self.max_digits}, + ) + if self.decimal_places is not None and decimals > self.decimal_places: + raise ValidationError( + self.messages['max_decimal_places'], + code='max_decimal_places', + params={'max': self.decimal_places}, + ) + if (self.max_digits is not None and self.decimal_places is not None and + whole_digits > (self.max_digits - self.decimal_places)): + raise ValidationError( + self.messages['max_whole_digits'], + code='max_whole_digits', + params={'max': (self.max_digits - self.decimal_places)}, + ) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + self.max_digits == other.max_digits and + self.decimal_places == other.decimal_places + ) + + +@deconstructible +class FileExtensionValidator: + message = _( + "File extension '%(extension)s' is not allowed. " + "Allowed extensions are: '%(allowed_extensions)s'." + ) + code = 'invalid_extension' + + def __init__(self, allowed_extensions=None, message=None, code=None): + if allowed_extensions is not None: + allowed_extensions = [allowed_extension.lower() for allowed_extension in allowed_extensions] + self.allowed_extensions = allowed_extensions + if message is not None: + self.message = message + if code is not None: + self.code = code + + def __call__(self, value): + extension = Path(value.name).suffix[1:].lower() + if self.allowed_extensions is not None and extension not in self.allowed_extensions: + raise ValidationError( + self.message, + code=self.code, + params={ + 'extension': extension, + 'allowed_extensions': ', '.join(self.allowed_extensions) + } + ) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + self.allowed_extensions == other.allowed_extensions and + self.message == other.message and + self.code == other.code + ) + + +def get_available_image_extensions(): + try: + from PIL import Image + except ImportError: + return [] + else: + Image.init() + return [ext.lower()[1:] for ext in Image.EXTENSION] + + +def validate_image_file_extension(value): + return FileExtensionValidator(allowed_extensions=get_available_image_extensions())(value) + + +@deconstructible +class ProhibitNullCharactersValidator: + """Validate that the string doesn't contain the null character.""" + message = _('Null characters are not allowed.') + code = 'null_characters_not_allowed' + + def __init__(self, message=None, code=None): + if message is not None: + self.message = message + if code is not None: + self.code = code + + def __call__(self, value): + if '\x00' in str(value): + raise ValidationError(self.message, code=self.code) + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + self.message == other.message and + self.code == other.code + ) diff --git a/env/lib/python3.5/site-packages/django/core/wsgi.py b/env/lib/python3.5/site-packages/django/core/wsgi.py new file mode 100644 index 0000000..35e0fa8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/core/wsgi.py @@ -0,0 +1,13 @@ +import django +from django.core.handlers.wsgi import WSGIHandler + + +def get_wsgi_application(): + """ + The public interface to Django's WSGI support. Return a WSGI callable. + + Avoids making django.core.handlers.WSGIHandler a public API, in case the + internal WSGI implementation changes or moves in the future. + """ + django.setup(set_prefix=False) + return WSGIHandler() diff --git a/env/lib/python3.5/site-packages/django/db/__init__.py b/env/lib/python3.5/site-packages/django/db/__init__.py new file mode 100644 index 0000000..5708c1c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/__init__.py @@ -0,0 +1,65 @@ +from django.core import signals +from django.db.utils import ( + DEFAULT_DB_ALIAS, DJANGO_VERSION_PICKLE_KEY, ConnectionHandler, + ConnectionRouter, DatabaseError, DataError, Error, IntegrityError, + InterfaceError, InternalError, NotSupportedError, OperationalError, + ProgrammingError, +) + +__all__ = [ + 'connection', 'connections', 'router', 'DatabaseError', 'IntegrityError', + 'InternalError', 'ProgrammingError', 'DataError', 'NotSupportedError', + 'Error', 'InterfaceError', 'OperationalError', 'DEFAULT_DB_ALIAS', + 'DJANGO_VERSION_PICKLE_KEY', +] + +connections = ConnectionHandler() + +router = ConnectionRouter() + + +# DatabaseWrapper.__init__() takes a dictionary, not a settings module, so we +# manually create the dictionary from the settings, passing only the settings +# that the database backends care about. +# We load all these up for backwards compatibility, you should use +# connections['default'] instead. +class DefaultConnectionProxy: + """ + Proxy for accessing the default DatabaseWrapper object's attributes. If you + need to access the DatabaseWrapper object itself, use + connections[DEFAULT_DB_ALIAS] instead. + """ + def __getattr__(self, item): + return getattr(connections[DEFAULT_DB_ALIAS], item) + + def __setattr__(self, name, value): + return setattr(connections[DEFAULT_DB_ALIAS], name, value) + + def __delattr__(self, name): + return delattr(connections[DEFAULT_DB_ALIAS], name) + + def __eq__(self, other): + return connections[DEFAULT_DB_ALIAS] == other + + +connection = DefaultConnectionProxy() + + +# Register an event to reset saved queries when a Django request is started. +def reset_queries(**kwargs): + for conn in connections.all(): + conn.queries_log.clear() + + +signals.request_started.connect(reset_queries) + + +# Register an event to reset transaction state and close connections past +# their lifetime. +def close_old_connections(**kwargs): + for conn in connections.all(): + conn.close_if_unusable_or_obsolete() + + +signals.request_started.connect(close_old_connections) +signals.request_finished.connect(close_old_connections) diff --git a/env/lib/python3.5/site-packages/django/db/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..684429cbc3fb3dbe551149de7f15c774de0aab88 GIT binary patch literal 2314 zcmb7GTXP#V6h7)*C2k@h>EzLmUQuUGDQpZsuA0{9)~$`ZEkV^u2_ z0LPyN0YGShV}V7_83-~EX2Hoqm;)yVVIG`3gavR45Ej8HLRbQ)1YsGRGK3XyDiBt| zsX|x-rv_mioH~R{;4DGd0H=ZTW`XB`=Ybc17lD_6mw{J+SAo}n*MTnqZvbz?0Eaa} zi2t}@`XK(vf+6?hByD!H6B5EcyAVYmTe4X!AoHQ?*U zw>jtAG(L*mGO_71-++e(VcA4G1T+V!NlxBp=0>!YvO-WP1==wRnG+1mSZ zr~B}jeY5}g^x(M5P7ZbtkM`N&{&&gpZX89z(|#O1aw8rHnKWlzkK?h%p8B4v-JYw& zzLc>{%Ji5v^XYBrAktzWeSJCiEc>oE8Br&{M0}}xxf|=#@n{rFEqL11JRS+@5{&Dh z=8234(hWmD8l*85Z;Cak&e|#|NP|-rkqcQNQzO$LgNg!KCsQURIY;XEiz<3*`;pSZ<()K?n4&^=;&KO8xBqb^DYDxxB_+m)e8!RrV`0q40kvz4osZpM;wdu5V~;Vpg;UGhWL_t8 zhYaa&&d{347MfdF740jve8H+^=`#Huc9}wHQ$570-bHh9hq51{{sH!$w%}(AkcMFf zhFR*e&g<}mL#n2nAtlMWLEu!+Q8m6$EQkk5-V1~)@hd5u{p8AlN^Ft4LO>!0t7Xae@P0GMx6pI(+C0eS4CErhY`SbD4Cl5N#7Z!~&&JVMxjp1KmMre6 zI1pO2Gm_Gmv~Y_+*V2)3z}ehB^C?Eo0Kbn<-S#b~nttpZFP1_Qvrc2u!+V{v_5(HB zzh$0YRv=>z0JGzp&E6aZX2&<@fjI@t-cKh(f>J=rQ3_^5TA}f@*s@86m~$FZAgxL> zrCmCzlHvroB%Dt3+TF)}NIesLE@LAl^U;?+OQrZZ{(}MaDw?MCZK+|^@G57^nR2Ps MD(7nXW*)2c7j`fiO#lD@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/__pycache__/transaction.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/__pycache__/transaction.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c776d902992a7c98fcf8e79e07d410e5a58ec979 GIT binary patch literal 7495 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 jzKmwJaJ784JToy0X(acQk?C(xZ)W-h{sg?EU literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2998490e5be711347ceb86ef73dcf8f3c6fa9e44 GIT binary patch literal 11098 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 Fe*ompKi2>N literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/__init__.py b/env/lib/python3.5/site-packages/django/db/backends/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/db/backends/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40c416abe6e099d7f73518f46b4f0f6452054de2 GIT binary patch literal 144 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m#uzDZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaoJ!J9N=(j9%}XiPkB`sH%PfhH*DI*J#bJ}1pHiBW LY6mj57>F4FwCExq literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/__pycache__/ddl_references.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/__pycache__/ddl_references.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c5f4f0d5fd6bff7e272a13d37c315dfa5d4cdd8 GIT binary patch literal 8425 zcmcgx&669&74MNo+Le%Z?KNJ5ZQ}8QF-ovZ2q6VAE(aS23Tjiu@{w#HsUh?peyKs88^_q8?S$t_4z6dA5*jZxv?`E z+}ewsz{g{}b<=lT@Af2$@iWv-ZxHod?cvA0LA*BzoO^qI;P?lAZxRoJTaL@uwHpt@ zpwsLDru?d)brmK04Jset0XWnZ1q6Wv-~(>Jan~k#K#Og`3>dLpCsII$ZAjQuz=LfN zTM8(!4cyis`FhfLmm>N>&!4{Vx*PdUZ|Fv;fRKI=`268JI_u^Pg4ox6x94|yWR(~1 z7Roi0$VLTLciNTd`%Ndk-u2^&77#F)20%^_#u#`IVLSkf`HLycjM3Qd4f+G3>)sst zoqVhtU#fN`u_J%jPipc^lL4u|x^^iZjW3M{G?7Zs-?g-{E z9L}t1D2fygy{sNpNvJU9H2q4e3D1;Ecdjhm z(%wBn$BXx6>-WxoFQY+?o*|RcP!`0rORLtTtfpVmq_CzvFYOblwB~6^+%w=iTgxDKucf50tu%e@n#`wjWulUs0Pd>+R{v<@1qqUSDZflSa2I9;4e$ zR=cvWXjP+Fw=E-AZkk2`(MkJb-R*8+7Q?DF-6&Yi9?!7GF@!ZLYb@M>o!^UN6o#(s zOl}Gr@Kz)EU^;HNE@v;iNBHkM(Ox(idUVpgFu3b$dTA^T_=Gd=w5{a$b{M}k8V|+6 z``#N`hlh!<((U5CZufjif@5U~~=??HyQc>rq%7*%LfSv|&TjnxLL$5|B!N{e=^xnL_O5&O2RdZkrQ|Elt=2XcP#wW}!64OHJrMA>OS zmek&(Tb`bI6FTd-g{2c$H}%;wPJ?X7D$*z)h=O&|5bf%wYiVt_E5?B}?@Yqj7mX@A zHvJ@CEo?BPtf%9%MrW<=G&(tZVT3p`lD16ZkY zHd@Bql(J+ma5fI4tm&qiOJ`v+GOlPj05sF`ocf6j2I#h$VIlSD4ZNWlh35I7!u$v& zm3rNpK9zB@+{KkmJ_mt{nldCN59<;fDh6%>u-u+SLw~~gQyh+Dn5RatDn_7Bpo`|Z z>yxbLVvN>{!XK*UPoQ5LC8Fq}=60*vvVoUUJ(T?7>{n5uS5bXy72jz$l9mW?O(JYG zeWkP~>SNbZtS{AkG#SPN_zXA|2IR;I``?A?ucX7x=sk62e(?$86-vzo5|uwu=DyH; zsxdF#^F^Q6!tiveh4A_N^-KXo`Pp@b8~UDkZs@>XN6A#-do#Qg$fZFo54QAvoaGwd zeFs&liDHiWO?B|HicL5|HejjiAD>qrRn$XUJ*=q*_^;4x^;z|xDsRG{*y{3~v+6@H zHKnTYC=EZDjC}05eJ%3TOV-`Ow3@CUsSN_pKhVnrq_2GgC8DItTDQ(vEo*vyPE0Yo zg;2ZQUOC(n#Py5U=iK$4 zrLdxs2wK@H+2U)G7NF}!lYW12;73UFixmH!)6Ca30R*h^#{1+DtALEf|7QD4z>K;Qn!s-LN� z*0*N@4ISKZl!&Hr|BU+F#2VR9u?-w7_2kK&4}-JH20Z&srC(E)WtBVb{3@{2FEga7 zh2%-|Evl>8u2e*8lj^`bnDN#`B%xE`zU6)LLWNUS6$*UBnmPq8;4x?53D;#SdA6R;$XvA>Aawy#%sbW z*yIq!!hO}ae9I5~gR#EyYdjEFQdiThLs`tbV`%$!I0*Dp98e6rv;##bmx;)|Y(yn+ zy~inRRLa_@PuJ%rY1a?8*x87c>7S_HSqw)nCaOnsJyC;mnlo1N!7F+Rm5+p6_CI-& zKVzwQy3|q|vh>?Xd!}2k&t1h0DZFM7;?Qmnu#LEr&$1i?L;5vyEeaO=e~+q+o^% z3s;#3v14UM#5}>0DnAd7_i6#YRn&)D+(?Or$H%2 z&V)!=$tZF%M9S>R5c==5*OIjxq4o#2g17zqqGK19>X?IF5qmlN$g+&0t)$}cPJvh= zdes<<1kZ2NH9$aw1BP!j@Ut$Bs*3RxiwF8bfT&B%OImSQWW33`(Z()L=Egj-OV(1g z?C;O(yGcT@>SpD<=?;4rkRY z%5q-mT^4z@pkRp52Hd$VM~bNAAcE+8wzUW=`_eemuyNd)KD)pz&A=#9p{P;5-DSLC z5qz0K&hZQrc~n*NY^PK&-_nY&l|7?yUOGk6EetA~*+usG!tYR0_BXBRh2`uUpv(Mc z8vyDPmFpUZc^wr2&QFYFJA^Z8646HZuc{{pI5>I;?FLOYf>;l>WfurpciQ&0zJ!r> z8@b*63qKXMd}4i+u;jkQ7}MNb;tE+R_7D=gH)|4#PtV)}16!_0p> zndfxez@s-Gxv_kq7`qyJjASX|nOW@OJWY3+^77Ay!|+}Nm+z0ww~XAGn8Tm^ONo5^ z2q&@mXfO`pq4~nV!&elZ?dwR!D}7GcbMN{br2IK$(3eBJ3%dA5V5Swv#eBqQYcUo+ zD`jG+>eQsY7> z*vMgC9tCng@GM?~A4o%WmUpB^BstUdEWfC3=X-HZ%^_qjPD{ZHA3v>NY8VRv)I(gU zsPGxKVU3?l(qT5`@_|NmsXvK{0!CYkIMe zF;|21^sC4u%G>lRl1ITWso!;n6F({kGMOlwRIG}==Fgmu4JIu(<2rTtoHMZ@$Cqxx z;LFrbzNNuQeQKPSN#T_GMu_RH3GuTF5F;QOhz-hF>SIu*2jRKqOSsE1Z;G(~F$idL zqqGd=FF?;w?kttq=>1Zd^~)Sp)RYGTnexhF%7j#&naKrh^7>bl9PJHjdirbT&f(_3 zED{!8Lj%V))L;A~7X-LCwt0yC9b7+xf~1E?uh5=347hVNJ+`TA%UO8aE<`Z+(G!D8 zOV$lmO;$v5-W=KU?@= znHWMAWfE%ncq5PCO9f;1FHy>ZZ7m3Pcm!u8=jw}O9L%f}Yl~lax&`^#em18HQOIJlp%`f;-Wjao)&)BKG14k#J}6Ab)r*xZ#-p@kMHDVd>^kiL!d)%9+3_6 I-@%*e7yLR!0{{R3 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5346f6319d4ba457d4a1fc298187ba083bed2c5 GIT binary patch literal 7968 zcmbtZ&6C{5b#DwX-?QB1l3Xq+nucjH}b9 z0K;yKxH}=MQd!%vE2&adDyRGhN#&U2n5tBze9I-i;p(bX@tjkXL-KpCftlG6b#btZ zMx*h%`}OyGdou2;mUD#lgeRfR=k*CPh3QjiA)Dlsfo7zHdh*R)%UPK)ctx==5 zDIyH8&h-l-+7Qusu3r=pK3(AYB@yBE64$qA@e#_)BH9)|!yKqw5z$rtx-FuYM0Abo zXtYGX`-SHu$epg0J6SxIcs8`mvN#!P)X(pvS${g2q$-oqL#0xM#`Yjpq4f7pGD$S{ zGz({&(P5Ab(_XaS+YiDcnM69Ify=9k%A2_LKcSFV7%PNSfl7rLvIWEiaYrbtBC3g@ z!*WBtE+9D)M~x&0kx?CuZITq#A=fpM6xBhn&i_VO5CKGt79%ex0=?$)f}mMg)Da^< zKv#GW2>mJvi`sd#e)n3wc7LjLsvfCeGLb5@u@t)KS;2iDx86eW)DlmH@KLF7h1c5e zT07lJUJH4Qyb|qq?cC9FG*AunQB4$oCsZ4cPw(B$#*@2~c=GE0G#*8-CWrpFqt}nJ zyGF|M$Nt??*mtK{Jkq_%N#5}NIEgdgKaY{LgF;wMYqoWU_g+clH3l*Z57I<>O|FfD z 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 KIk$Pfv-N*JqNpnX literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/__init__.py b/env/lib/python3.5/site-packages/django/db/backends/base/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba2e7eceb7b7e74583c68230269739f48fde8a29 GIT binary patch literal 149 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/features.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/features.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65b220e7364e4b95a0e62f41a3aa2b7267f6a5ec GIT binary patch literal 5179 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 b1KFSaLOu0)ejopWULGuo%{!-@`O5zQMFcpw literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/introspection.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/introspection.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..621bdcd3ddcd0c219c35708aa74d4f1a4589ebc1 GIT binary patch literal 8511 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/schema.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/schema.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86900c055a2701935925849a285dc43fe2af2ecb GIT binary patch literal 33779 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/validation.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/base/__pycache__/validation.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f494d9020ad7c5df17b8a807ffc0e0e10eaff890 GIT binary patch literal 1353 zcmah}OK;Oa5T5ljNmEgv3PJ)=xPT8$P!R{Js;Z#C0Vx-x9xTvmV{cL?j_vL`&{pZG z2)Jsv@(#{e;d zPlldb5F%s2+rW+RGUS|$TBco+!2~TlS)i_VGq~x3`s|`MOdhgGPwl8%fhRU=^pZGVp zHK7{J;2VU2rO0XJjXnxB&_*^RE{WafP(~w?ymvScht%6jJ zCzQ=YBsd1|@4^|ICp1JDmPy6ralnocJi{2)t8QRd{y>(ZER~szs@9jHoG7VrV667z z(4W5t%yi= self.close_at: + self.close() + return + + # ##### Thread safety handling ##### + + def validate_thread_sharing(self): + """ + Validate that the connection isn't accessed by another thread than the + one which originally created it, unless the connection was explicitly + authorized to be shared between threads (via the `allow_thread_sharing` + property). Raise an exception if the validation fails. + """ + if not (self.allow_thread_sharing or self._thread_ident == _thread.get_ident()): + raise DatabaseError( + "DatabaseWrapper objects created in a " + "thread can only be used in that same thread. The object " + "with alias '%s' was created in thread id %s and this is " + "thread id %s." + % (self.alias, self._thread_ident, _thread.get_ident()) + ) + + # ##### Miscellaneous ##### + + def prepare_database(self): + """ + Hook to do any database check or preparation, generally called before + migrating a project or an app. + """ + pass + + @cached_property + def wrap_database_errors(self): + """ + Context manager and decorator that re-throws backend-specific database + exceptions using Django's common wrappers. + """ + return DatabaseErrorWrapper(self) + + def chunked_cursor(self): + """ + Return a cursor that tries to avoid caching in the database (if + supported by the database), otherwise return a regular cursor. + """ + return self.cursor() + + def make_debug_cursor(self, cursor): + """Create a cursor that logs all queries in self.queries_log.""" + return utils.CursorDebugWrapper(cursor, self) + + def make_cursor(self, cursor): + """Create a cursor without debug logging.""" + return utils.CursorWrapper(cursor, self) + + @contextmanager + def temporary_connection(self): + """ + Context manager that ensures that a connection is established, and + if it opened one, closes it to avoid leaving a dangling connection. + This is useful for operations outside of the request-response cycle. + + Provide a cursor: with self.temporary_connection() as cursor: ... + """ + must_close = self.connection is None + try: + with self.cursor() as cursor: + yield cursor + finally: + if must_close: + self.close() + + @property + def _nodb_connection(self): + """ + Return an alternative connection to be used when there is no need to + access the main database, specifically for test db creation/deletion. + This also prevents the production database from being exposed to + potential child threads while (or after) the test database is destroyed. + Refs #10868, #17786, #16969. + """ + return self.__class__( + {**self.settings_dict, 'NAME': None}, + alias=NO_DB_ALIAS, + allow_thread_sharing=False, + ) + + def _start_transaction_under_autocommit(self): + """ + Only required when autocommits_when_autocommit_is_off = True. + """ + raise NotImplementedError( + 'subclasses of BaseDatabaseWrapper may require a ' + '_start_transaction_under_autocommit() method' + ) + + def schema_editor(self, *args, **kwargs): + """ + Return a new instance of this backend's SchemaEditor. + """ + if self.SchemaEditorClass is None: + raise NotImplementedError( + 'The SchemaEditorClass attribute of this database wrapper is still None') + return self.SchemaEditorClass(self, *args, **kwargs) + + def on_commit(self, func): + if self.in_atomic_block: + # Transaction in progress; save for execution on commit. + self.run_on_commit.append((set(self.savepoint_ids), func)) + elif not self.get_autocommit(): + raise TransactionManagementError('on_commit() cannot be used in manual transaction management') + else: + # No transaction in progress and in autocommit mode; execute + # immediately. + func() + + def run_and_clear_commit_hooks(self): + self.validate_no_atomic_block() + current_run_on_commit = self.run_on_commit + self.run_on_commit = [] + while current_run_on_commit: + sids, func = current_run_on_commit.pop(0) + func() + + @contextmanager + def execute_wrapper(self, wrapper): + """ + Return a context manager under which the wrapper is applied to suitable + database query executions. + """ + self.execute_wrappers.append(wrapper) + try: + yield + finally: + self.execute_wrappers.pop() + + def copy(self, alias=None, allow_thread_sharing=None): + """ + Return a copy of this connection. + + For tests that require two connections to the same database. + """ + settings_dict = copy.deepcopy(self.settings_dict) + if alias is None: + alias = self.alias + if allow_thread_sharing is None: + allow_thread_sharing = self.allow_thread_sharing + return type(self)(settings_dict, alias, allow_thread_sharing) diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/client.py b/env/lib/python3.5/site-packages/django/db/backends/base/client.py new file mode 100644 index 0000000..f6a0cda --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/client.py @@ -0,0 +1,12 @@ +class BaseDatabaseClient: + """Encapsulate backend-specific methods for opening a client shell.""" + # This should be a string representing the name of the executable + # (e.g., "psql"). Subclasses must override this. + executable_name = None + + def __init__(self, connection): + # connection is an instance of BaseDatabaseWrapper. + self.connection = connection + + def runshell(self): + raise NotImplementedError('subclasses of BaseDatabaseClient must provide a runshell() method') diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/creation.py b/env/lib/python3.5/site-packages/django/db/backends/base/creation.py new file mode 100644 index 0000000..fe1d1b4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/creation.py @@ -0,0 +1,294 @@ +import sys +from io import StringIO + +from django.apps import apps +from django.conf import settings +from django.core import serializers +from django.db import router + +# The prefix to put on the default database name when creating +# the test database. +TEST_DATABASE_PREFIX = 'test_' + + +class BaseDatabaseCreation: + """ + Encapsulate backend-specific differences pertaining to creation and + destruction of the test database. + """ + def __init__(self, connection): + self.connection = connection + + @property + def _nodb_connection(self): + """ + Used to be defined here, now moved to DatabaseWrapper. + """ + return self.connection._nodb_connection + + def create_test_db(self, verbosity=1, autoclobber=False, serialize=True, keepdb=False): + """ + Create a test database, prompting the user for confirmation if the + database already exists. Return the name of the test database created. + """ + # Don't import django.core.management if it isn't needed. + from django.core.management import call_command + + test_database_name = self._get_test_db_name() + + if verbosity >= 1: + action = 'Creating' + if keepdb: + action = "Using existing" + + print("%s test database for alias %s..." % ( + action, + self._get_database_display_str(verbosity, test_database_name), + )) + + # We could skip this call if keepdb is True, but we instead + # give it the keepdb param. This is to handle the case + # where the test DB doesn't exist, in which case we need to + # create it, then just not destroy it. If we instead skip + # this, we will get an exception. + self._create_test_db(verbosity, autoclobber, keepdb) + + self.connection.close() + settings.DATABASES[self.connection.alias]["NAME"] = test_database_name + self.connection.settings_dict["NAME"] = test_database_name + + # We report migrate messages at one level lower than that requested. + # This ensures we don't get flooded with messages during testing + # (unless you really ask to be flooded). + call_command( + 'migrate', + verbosity=max(verbosity - 1, 0), + interactive=False, + database=self.connection.alias, + run_syncdb=True, + ) + + # We then serialize the current state of the database into a string + # and store it on the connection. This slightly horrific process is so people + # who are testing on databases without transactions or who are using + # a TransactionTestCase still get a clean database on every test run. + if serialize: + self.connection._test_serialized_contents = self.serialize_db_to_string() + + call_command('createcachetable', database=self.connection.alias) + + # Ensure a connection for the side effect of initializing the test database. + self.connection.ensure_connection() + + return test_database_name + + def set_as_test_mirror(self, primary_settings_dict): + """ + Set this database up to be used in testing as a mirror of a primary + database whose settings are given. + """ + self.connection.settings_dict['NAME'] = primary_settings_dict['NAME'] + + def serialize_db_to_string(self): + """ + Serialize all data in the database into a JSON string. + Designed only for test runner usage; will not handle large + amounts of data. + """ + # Build list of all apps to serialize + from django.db.migrations.loader import MigrationLoader + loader = MigrationLoader(self.connection) + app_list = [] + for app_config in apps.get_app_configs(): + if ( + app_config.models_module is not None and + app_config.label in loader.migrated_apps and + app_config.name not in settings.TEST_NON_SERIALIZED_APPS + ): + app_list.append((app_config, None)) + + # Make a function to iteratively return every object + def get_objects(): + for model in serializers.sort_dependencies(app_list): + if (model._meta.can_migrate(self.connection) and + router.allow_migrate_model(self.connection.alias, model)): + queryset = model._default_manager.using(self.connection.alias).order_by(model._meta.pk.name) + yield from queryset.iterator() + # Serialize to a string + out = StringIO() + serializers.serialize("json", get_objects(), indent=None, stream=out) + return out.getvalue() + + def deserialize_db_from_string(self, data): + """ + Reload the database with data from a string generated by + the serialize_db_to_string() method. + """ + data = StringIO(data) + for obj in serializers.deserialize("json", data, using=self.connection.alias): + obj.save() + + def _get_database_display_str(self, verbosity, database_name): + """ + Return display string for a database for use in various actions. + """ + return "'%s'%s" % ( + self.connection.alias, + (" ('%s')" % database_name) if verbosity >= 2 else '', + ) + + def _get_test_db_name(self): + """ + Internal implementation - return the name of the test DB that will be + created. Only useful when called from create_test_db() and + _create_test_db() and when no external munging is done with the 'NAME' + settings. + """ + if self.connection.settings_dict['TEST']['NAME']: + return self.connection.settings_dict['TEST']['NAME'] + return TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME'] + + def _execute_create_test_db(self, cursor, parameters, keepdb=False): + cursor.execute('CREATE DATABASE %(dbname)s %(suffix)s' % parameters) + + def _create_test_db(self, verbosity, autoclobber, keepdb=False): + """ + Internal implementation - create the test db tables. + """ + test_database_name = self._get_test_db_name() + test_db_params = { + 'dbname': self.connection.ops.quote_name(test_database_name), + 'suffix': self.sql_table_creation_suffix(), + } + # Create the test database and connect to it. + with self._nodb_connection.cursor() as cursor: + try: + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + # if we want to keep the db, then no need to do any of the below, + # just return and skip it all. + if keepdb: + return test_database_name + + sys.stderr.write( + "Got an error creating the test database: %s\n" % e) + if not autoclobber: + confirm = input( + "Type 'yes' if you would like to try deleting the test " + "database '%s', or 'no' to cancel: " % test_database_name) + if autoclobber or confirm == 'yes': + try: + if verbosity >= 1: + print("Destroying old test database for alias %s..." % ( + self._get_database_display_str(verbosity, test_database_name), + )) + cursor.execute('DROP DATABASE %(dbname)s' % test_db_params) + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + sys.stderr.write( + "Got an error recreating the test database: %s\n" % e) + sys.exit(2) + else: + print("Tests cancelled.") + sys.exit(1) + + return test_database_name + + def clone_test_db(self, suffix, verbosity=1, autoclobber=False, keepdb=False): + """ + Clone a test database. + """ + source_database_name = self.connection.settings_dict['NAME'] + + if verbosity >= 1: + action = 'Cloning test database' + if keepdb: + action = 'Using existing clone' + print("%s for alias %s..." % ( + action, + self._get_database_display_str(verbosity, source_database_name), + )) + + # We could skip this call if keepdb is True, but we instead + # give it the keepdb param. See create_test_db for details. + self._clone_test_db(suffix, verbosity, keepdb) + + def get_test_db_clone_settings(self, suffix): + """ + Return a modified connection settings dict for the n-th clone of a DB. + """ + # When this function is called, the test database has been created + # already and its name has been copied to settings_dict['NAME'] so + # we don't need to call _get_test_db_name. + orig_settings_dict = self.connection.settings_dict + return {**orig_settings_dict, 'NAME': '{}_{}'.format(orig_settings_dict['NAME'], suffix)} + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + """ + Internal implementation - duplicate the test db tables. + """ + raise NotImplementedError( + "The database backend doesn't support cloning databases. " + "Disable the option to run tests in parallel processes.") + + def destroy_test_db(self, old_database_name=None, verbosity=1, keepdb=False, suffix=None): + """ + Destroy a test database, prompting the user for confirmation if the + database already exists. + """ + self.connection.close() + if suffix is None: + test_database_name = self.connection.settings_dict['NAME'] + else: + test_database_name = self.get_test_db_clone_settings(suffix)['NAME'] + + if verbosity >= 1: + action = 'Destroying' + if keepdb: + action = 'Preserving' + print("%s test database for alias %s..." % ( + action, + self._get_database_display_str(verbosity, test_database_name), + )) + + # if we want to preserve the database + # skip the actual destroying piece. + if not keepdb: + self._destroy_test_db(test_database_name, verbosity) + + # Restore the original database name + if old_database_name is not None: + settings.DATABASES[self.connection.alias]["NAME"] = old_database_name + self.connection.settings_dict["NAME"] = old_database_name + + def _destroy_test_db(self, test_database_name, verbosity): + """ + Internal implementation - remove the test db tables. + """ + # Remove the test database to clean up after + # ourselves. Connect to the previous database (not the test database) + # to do so, because it's not allowed to delete a database while being + # connected to it. + with self.connection._nodb_connection.cursor() as cursor: + cursor.execute("DROP DATABASE %s" + % self.connection.ops.quote_name(test_database_name)) + + def sql_table_creation_suffix(self): + """ + SQL to append to the end of the test table creation statements. + """ + return '' + + def test_db_signature(self): + """ + Return a tuple with elements of self.connection.settings_dict (a + DATABASES setting value) that uniquely identify a database + accordingly to the RDBMS particularities. + """ + settings_dict = self.connection.settings_dict + return ( + settings_dict['HOST'], + settings_dict['PORT'], + settings_dict['ENGINE'], + self._get_test_db_name(), + ) diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/features.py b/env/lib/python3.5/site-packages/django/db/backends/base/features.py new file mode 100644 index 0000000..b9cc2e6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/features.py @@ -0,0 +1,289 @@ +from django.db.models.aggregates import StdDev +from django.db.utils import NotSupportedError, ProgrammingError +from django.utils.functional import cached_property + + +class BaseDatabaseFeatures: + gis_enabled = False + allows_group_by_pk = False + allows_group_by_selected_pks = False + empty_fetchmany_value = [] + update_can_self_select = True + + # Does the backend distinguish between '' and None? + interprets_empty_strings_as_nulls = False + + # Does the backend allow inserting duplicate NULL rows in a nullable + # unique field? All core backends implement this correctly, but other + # databases such as SQL Server do not. + supports_nullable_unique_constraints = True + + # Does the backend allow inserting duplicate rows when a unique_together + # constraint exists and some fields are nullable but not all of them? + supports_partially_nullable_unique_constraints = True + + can_use_chunked_reads = True + can_return_id_from_insert = False + can_return_ids_from_bulk_insert = False + has_bulk_insert = True + uses_savepoints = False + can_release_savepoints = False + + # If True, don't use integer foreign keys referring to, e.g., positive + # integer primary keys. + related_fields_match_type = False + allow_sliced_subqueries_with_in = True + has_select_for_update = False + has_select_for_update_nowait = False + has_select_for_update_skip_locked = False + has_select_for_update_of = False + # Does the database's SELECT FOR UPDATE OF syntax require a column rather + # than a table? + select_for_update_of_column = False + + # Does the default test database allow multiple connections? + # Usually an indication that the test database is in-memory + test_db_allows_multiple_connections = True + + # Can an object be saved without an explicit primary key? + supports_unspecified_pk = False + + # Can a fixture contain forward references? i.e., are + # FK constraints checked at the end of transaction, or + # at the end of each save operation? + supports_forward_references = True + + # Does the backend truncate names properly when they are too long? + truncates_names = False + + # Is there a REAL datatype in addition to floats/doubles? + has_real_datatype = False + supports_subqueries_in_group_by = True + + # Is there a true datatype for uuid? + has_native_uuid_field = False + + # Is there a true datatype for timedeltas? + has_native_duration_field = False + + # Does the database driver supports same type temporal data subtraction + # by returning the type used to store duration field? + supports_temporal_subtraction = False + + # Does the __regex lookup support backreferencing and grouping? + supports_regex_backreferencing = True + + # Can date/datetime lookups be performed using a string? + supports_date_lookup_using_string = True + + # Can datetimes with timezones be used? + supports_timezones = True + + # Does the database have a copy of the zoneinfo database? + has_zoneinfo_database = True + + # When performing a GROUP BY, is an ORDER BY NULL required + # to remove any ordering? + requires_explicit_null_ordering_when_grouping = False + + # Does the backend order NULL values as largest or smallest? + nulls_order_largest = False + + # The database's limit on the number of query parameters. + max_query_params = None + + # Can an object have an autoincrement primary key of 0? MySQL says No. + allows_auto_pk_0 = True + + # Do we need to NULL a ForeignKey out, or can the constraint check be + # deferred + can_defer_constraint_checks = False + + # date_interval_sql can properly handle mixed Date/DateTime fields and timedeltas + supports_mixed_date_datetime_comparisons = True + + # Does the backend support tablespaces? Default to False because it isn't + # in the SQL standard. + supports_tablespaces = False + + # Does the backend reset sequences between tests? + supports_sequence_reset = True + + # Can the backend introspect the default value of a column? + can_introspect_default = True + + # Confirm support for introspected foreign keys + # Every database can do this reliably, except MySQL, + # which can't do it for MyISAM tables + can_introspect_foreign_keys = True + + # Can the backend introspect an AutoField, instead of an IntegerField? + can_introspect_autofield = False + + # Can the backend introspect a BigIntegerField, instead of an IntegerField? + can_introspect_big_integer_field = True + + # Can the backend introspect an BinaryField, instead of an TextField? + can_introspect_binary_field = True + + # Can the backend introspect an DecimalField, instead of an FloatField? + can_introspect_decimal_field = True + + # Can the backend introspect an IPAddressField, instead of an CharField? + can_introspect_ip_address_field = False + + # Can the backend introspect a PositiveIntegerField, instead of an IntegerField? + can_introspect_positive_integer_field = False + + # Can the backend introspect a SmallIntegerField, instead of an IntegerField? + can_introspect_small_integer_field = False + + # Can the backend introspect a TimeField, instead of a DateTimeField? + can_introspect_time_field = True + + # Some backends may not be able to differentiate BooleanField from other + # fields such as IntegerField. + introspected_boolean_field_type = 'BooleanField' + + # Can the backend introspect the column order (ASC/DESC) for indexes? + supports_index_column_ordering = True + + # Support for the DISTINCT ON clause + can_distinct_on_fields = False + + # Does the backend decide to commit before SAVEPOINT statements + # when autocommit is disabled? https://bugs.python.org/issue8145#msg109965 + autocommits_when_autocommit_is_off = False + + # Does the backend prevent running SQL queries in broken transactions? + atomic_transactions = True + + # Can we roll back DDL in a transaction? + can_rollback_ddl = False + + # Does it support operations requiring references rename in a transaction? + supports_atomic_references_rename = True + + # Can we issue more than one ALTER COLUMN clause in an ALTER TABLE? + supports_combined_alters = False + + # Does it support foreign keys? + supports_foreign_keys = True + + # Does it support CHECK constraints? + supports_column_check_constraints = True + + # Does the backend support 'pyformat' style ("... %(name)s ...", {'name': value}) + # parameter passing? Note this can be provided by the backend even if not + # supported by the Python driver + supports_paramstyle_pyformat = True + + # Does the backend require literal defaults, rather than parameterized ones? + requires_literal_defaults = False + + # Does the backend require a connection reset after each material schema change? + connection_persists_old_columns = False + + # What kind of error does the backend throw when accessing closed cursor? + closed_cursor_error_class = ProgrammingError + + # Does 'a' LIKE 'A' match? + has_case_insensitive_like = True + + # Does the backend require the sqlparse library for splitting multi-line + # statements before executing them? + requires_sqlparse_for_splitting = True + + # Suffix for backends that don't support "SELECT xxx;" queries. + bare_select_suffix = '' + + # If NULL is implied on columns without needing to be explicitly specified + implied_column_null = False + + uppercases_column_names = False + + # Does the backend support "select for update" queries with limit (and offset)? + supports_select_for_update_with_limit = True + + # Does the backend ignore null expressions in GREATEST and LEAST queries unless + # every expression is null? + greatest_least_ignores_nulls = False + + # Can the backend clone databases for parallel test execution? + # Defaults to False to allow third-party backends to opt-in. + can_clone_databases = False + + # Does the backend consider table names with different casing to + # be equal? + ignores_table_name_case = False + + # Place FOR UPDATE right after FROM clause. Used on MSSQL. + for_update_after_from = False + + # Combinatorial flags + supports_select_union = True + supports_select_intersection = True + supports_select_difference = True + supports_slicing_ordering_in_compound = False + + # Does the database support SQL 2003 FILTER (WHERE ...) in aggregate + # expressions? + supports_aggregate_filter_clause = False + + # Does the backend support indexing a TextField? + supports_index_on_text_field = True + + # Does the backed support window expressions (expression OVER (...))? + supports_over_clause = False + + # Does the backend support CAST with precision? + supports_cast_with_precision = True + + # SQL to create a procedure for use by the Django test suite. The + # functionality of the procedure isn't important. + create_test_procedure_without_params_sql = None + create_test_procedure_with_int_param_sql = None + + # Does the backend support keyword parameters for cursor.callproc()? + supports_callproc_kwargs = False + + # Convert CharField results from bytes to str in database functions. + db_functions_convert_bytes_to_str = False + + # What formats does the backend EXPLAIN syntax support? + supported_explain_formats = set() + + # Does DatabaseOperations.explain_query_prefix() raise ValueError if + # unknown kwargs are passed to QuerySet.explain()? + validates_explain_options = True + + def __init__(self, connection): + self.connection = connection + + @cached_property + def supports_explaining_query_execution(self): + """Does this backend support explaining query execution?""" + return self.connection.ops.explain_prefix is not None + + @cached_property + def supports_transactions(self): + """Confirm support for transactions.""" + with self.connection.cursor() as cursor: + cursor.execute('CREATE TABLE ROLLBACK_TEST (X INT)') + self.connection.set_autocommit(False) + cursor.execute('INSERT INTO ROLLBACK_TEST (X) VALUES (8)') + self.connection.rollback() + self.connection.set_autocommit(True) + cursor.execute('SELECT COUNT(X) FROM ROLLBACK_TEST') + count, = cursor.fetchone() + cursor.execute('DROP TABLE ROLLBACK_TEST') + return count == 0 + + @cached_property + def supports_stddev(self): + """Confirm support for STDDEV and related stats functions.""" + try: + self.connection.ops.check_expression_support(StdDev(1)) + except NotSupportedError: + return False + return True diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/introspection.py b/env/lib/python3.5/site-packages/django/db/backends/base/introspection.py new file mode 100644 index 0000000..8fe8966 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/introspection.py @@ -0,0 +1,179 @@ +from collections import namedtuple + +# Structure returned by DatabaseIntrospection.get_table_list() +TableInfo = namedtuple('TableInfo', ['name', 'type']) + +# Structure returned by the DB-API cursor.description interface (PEP 249) +FieldInfo = namedtuple('FieldInfo', 'name type_code display_size internal_size precision scale null_ok default') + + +class BaseDatabaseIntrospection: + """Encapsulate backend-specific introspection utilities.""" + data_types_reverse = {} + + def __init__(self, connection): + self.connection = connection + + def get_field_type(self, data_type, description): + """ + Hook for a database backend to use the cursor description to + match a Django field type to a database column. + + For Oracle, the column data_type on its own is insufficient to + distinguish between a FloatField and IntegerField, for example. + """ + return self.data_types_reverse[data_type] + + def table_name_converter(self, name): + """ + Apply a conversion to the name for the purposes of comparison. + + The default table name converter is for case sensitive comparison. + """ + return name + + def column_name_converter(self, name): + """ + Apply a conversion to the column name for the purposes of comparison. + + Use table_name_converter() by default. + """ + return self.table_name_converter(name) + + def table_names(self, cursor=None, include_views=False): + """ + Return a list of names of all tables that exist in the database. + Sort the returned table list by Python's default sorting. Do NOT use + the database's ORDER BY here to avoid subtle differences in sorting + order between databases. + """ + def get_names(cursor): + return sorted(ti.name for ti in self.get_table_list(cursor) + if include_views or ti.type == 't') + if cursor is None: + with self.connection.cursor() as cursor: + return get_names(cursor) + return get_names(cursor) + + def get_table_list(self, cursor): + """ + Return an unsorted list of TableInfo named tuples of all tables and + views that exist in the database. + """ + raise NotImplementedError('subclasses of BaseDatabaseIntrospection may require a get_table_list() method') + + def django_table_names(self, only_existing=False, include_views=True): + """ + Return a list of all table names that have associated Django models and + are in INSTALLED_APPS. + + If only_existing is True, include only the tables in the database. + """ + from django.apps import apps + from django.db import router + tables = set() + for app_config in apps.get_app_configs(): + for model in router.get_migratable_models(app_config, self.connection.alias): + if not model._meta.managed: + continue + tables.add(model._meta.db_table) + tables.update( + f.m2m_db_table() for f in model._meta.local_many_to_many + if f.remote_field.through._meta.managed + ) + tables = list(tables) + if only_existing: + existing_tables = self.table_names(include_views=include_views) + tables = [ + t + for t in tables + if self.table_name_converter(t) in existing_tables + ] + return tables + + def installed_models(self, tables): + """ + Return a set of all models represented by the provided list of table + names. + """ + from django.apps import apps + from django.db import router + all_models = [] + for app_config in apps.get_app_configs(): + all_models.extend(router.get_migratable_models(app_config, self.connection.alias)) + tables = list(map(self.table_name_converter, tables)) + return { + m for m in all_models + if self.table_name_converter(m._meta.db_table) in tables + } + + def sequence_list(self): + """ + Return a list of information about all DB sequences for all models in + all apps. + """ + from django.apps import apps + from django.db import router + + sequence_list = [] + with self.connection.cursor() as cursor: + for app_config in apps.get_app_configs(): + for model in router.get_migratable_models(app_config, self.connection.alias): + if not model._meta.managed: + continue + if model._meta.swapped: + continue + sequence_list.extend(self.get_sequences(cursor, model._meta.db_table, model._meta.local_fields)) + for f in model._meta.local_many_to_many: + # If this is an m2m using an intermediate table, + # we don't need to reset the sequence. + if f.remote_field.through is None: + sequence = self.get_sequences(cursor, f.m2m_db_table()) + sequence_list.extend(sequence or [{'table': f.m2m_db_table(), 'column': None}]) + return sequence_list + + def get_sequences(self, cursor, table_name, table_fields=()): + """ + Return a list of introspected sequences for table_name. Each sequence + is a dict: {'table': , 'column': }. An optional + 'name' key can be added if the backend supports named sequences. + """ + raise NotImplementedError('subclasses of BaseDatabaseIntrospection may require a get_sequences() method') + + def get_key_columns(self, cursor, table_name): + """ + Backends can override this to return a list of: + (column_name, referenced_table_name, referenced_column_name) + for all key columns in given table. + """ + raise NotImplementedError('subclasses of BaseDatabaseIntrospection may require a get_key_columns() method') + + def get_primary_key_column(self, cursor, table_name): + """ + Return the name of the primary key column for the given table. + """ + for constraint in self.get_constraints(cursor, table_name).values(): + if constraint['primary_key']: + return constraint['columns'][0] + return None + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) + across one or more columns. + + Return a dict mapping constraint names to their attributes, + where attributes is a dict with keys: + * columns: List of columns this covers + * primary_key: True if primary key, False otherwise + * unique: True if this is a unique constraint, False otherwise + * foreign_key: (table, column) of target, or None + * check: True if check constraint, False otherwise + * index: True if index, False otherwise. + * orders: The order (ASC/DESC) defined for the columns of indexes + * type: The type of the index (btree, hash, etc.) + + Some backends may return special constraint names that don't exist + if they don't name constraints of a certain type (e.g. SQLite) + """ + raise NotImplementedError('subclasses of BaseDatabaseIntrospection may require a get_constraints() method') diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/operations.py b/env/lib/python3.5/site-packages/django/db/backends/base/operations.py new file mode 100644 index 0000000..1fe7fe8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/operations.py @@ -0,0 +1,672 @@ +import datetime +import decimal +from importlib import import_module + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.db import NotSupportedError, transaction +from django.db.backends import utils +from django.utils import timezone +from django.utils.encoding import force_text + + +class BaseDatabaseOperations: + """ + Encapsulate backend-specific differences, such as the way a backend + performs ordering or calculates the ID of a recently-inserted row. + """ + compiler_module = "django.db.models.sql.compiler" + + # Integer field safe ranges by `internal_type` as documented + # in docs/ref/models/fields.txt. + integer_field_ranges = { + 'SmallIntegerField': (-32768, 32767), + 'IntegerField': (-2147483648, 2147483647), + 'BigIntegerField': (-9223372036854775808, 9223372036854775807), + 'PositiveSmallIntegerField': (0, 32767), + 'PositiveIntegerField': (0, 2147483647), + } + set_operators = { + 'union': 'UNION', + 'intersection': 'INTERSECT', + 'difference': 'EXCEPT', + } + # Mapping of Field.get_internal_type() (typically the model field's class + # name) to the data type to use for the Cast() function, if different from + # DatabaseWrapper.data_types. + cast_data_types = {} + # CharField data type if the max_length argument isn't provided. + cast_char_field_without_max_length = None + + # Start and end points for window expressions. + PRECEDING = 'PRECEDING' + FOLLOWING = 'FOLLOWING' + UNBOUNDED_PRECEDING = 'UNBOUNDED ' + PRECEDING + UNBOUNDED_FOLLOWING = 'UNBOUNDED ' + FOLLOWING + CURRENT_ROW = 'CURRENT ROW' + + # Prefix for EXPLAIN queries, or None EXPLAIN isn't supported. + explain_prefix = None + + def __init__(self, connection): + self.connection = connection + self._cache = None + + def autoinc_sql(self, table, column): + """ + Return any SQL needed to support auto-incrementing primary keys, or + None if no SQL is necessary. + + This SQL is executed when a table is created. + """ + return None + + def bulk_batch_size(self, fields, objs): + """ + Return the maximum allowed batch size for the backend. The fields + are the fields going to be inserted in the batch, the objs contains + all the objects to be inserted. + """ + return len(objs) + + def cache_key_culling_sql(self): + """ + Return an SQL query that retrieves the first cache key greater than the + n smallest. + + This is used by the 'db' cache backend to determine where to start + culling. + """ + return "SELECT cache_key FROM %s ORDER BY cache_key LIMIT 1 OFFSET %%s" + + def unification_cast_sql(self, output_field): + """ + Given a field instance, return the SQL that casts the result of a union + to that type. The resulting string should contain a '%s' placeholder + for the expression being cast. + """ + return '%s' + + def date_extract_sql(self, lookup_type, field_name): + """ + Given a lookup_type of 'year', 'month', or 'day', return the SQL that + extracts a value from the given date field field_name. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a date_extract_sql() method') + + def date_interval_sql(self, timedelta): + """ + Implement the date interval functionality for expressions. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a date_interval_sql() method') + + def date_trunc_sql(self, lookup_type, field_name): + """ + Given a lookup_type of 'year', 'month', or 'day', return the SQL that + truncates the given date field field_name to a date object with only + the given specificity. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a date_trunc_sql() method.') + + def datetime_cast_date_sql(self, field_name, tzname): + """ + Return the SQL to cast a datetime value to date value. + """ + raise NotImplementedError( + 'subclasses of BaseDatabaseOperations may require a ' + 'datetime_cast_date_sql() method.' + ) + + def datetime_cast_time_sql(self, field_name, tzname): + """ + Return the SQL to cast a datetime value to time value. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a datetime_cast_time_sql() method') + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + """ + Given a lookup_type of 'year', 'month', 'day', 'hour', 'minute', or + 'second', return the SQL that extracts a value from the given + datetime field field_name. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a datetime_extract_sql() method') + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + """ + Given a lookup_type of 'year', 'month', 'day', 'hour', 'minute', or + 'second', return the SQL that truncates the given datetime field + field_name to a datetime object with only the given specificity. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a datetime_trunc_sql() method') + + def time_trunc_sql(self, lookup_type, field_name): + """ + Given a lookup_type of 'hour', 'minute' or 'second', return the SQL + that truncates the given time field field_name to a time object with + only the given specificity. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a time_trunc_sql() method') + + def time_extract_sql(self, lookup_type, field_name): + """ + Given a lookup_type of 'hour', 'minute', or 'second', return the SQL + that extracts a value from the given time field field_name. + """ + return self.date_extract_sql(lookup_type, field_name) + + def deferrable_sql(self): + """ + Return the SQL to make a constraint "initially deferred" during a + CREATE TABLE statement. + """ + return '' + + def distinct_sql(self, fields, params): + """ + Return an SQL DISTINCT clause which removes duplicate rows from the + result set. If any fields are given, only check the given fields for + duplicates. + """ + if fields: + raise NotSupportedError('DISTINCT ON fields is not supported by this database backend') + else: + return ['DISTINCT'], [] + + def fetch_returned_insert_id(self, cursor): + """ + Given a cursor object that has just performed an INSERT...RETURNING + statement into a table that has an auto-incrementing ID, return the + newly created ID. + """ + return cursor.fetchone()[0] + + def field_cast_sql(self, db_type, internal_type): + """ + Given a column type (e.g. 'BLOB', 'VARCHAR') and an internal type + (e.g. 'GenericIPAddressField'), return the SQL to cast it before using + it in a WHERE statement. The resulting string should contain a '%s' + placeholder for the column being searched against. + """ + return '%s' + + def force_no_ordering(self): + """ + Return a list used in the "ORDER BY" clause to force no ordering at + all. Return an empty list to include nothing in the ordering. + """ + return [] + + def for_update_sql(self, nowait=False, skip_locked=False, of=()): + """ + Return the FOR UPDATE SQL clause to lock rows for an update operation. + """ + return 'FOR UPDATE%s%s%s' % ( + ' OF %s' % ', '.join(of) if of else '', + ' NOWAIT' if nowait else '', + ' SKIP LOCKED' if skip_locked else '', + ) + + def _get_limit_offset_params(self, low_mark, high_mark): + offset = low_mark or 0 + if high_mark is not None: + return (high_mark - offset), offset + elif offset: + return self.connection.ops.no_limit_value(), offset + return None, offset + + def limit_offset_sql(self, low_mark, high_mark): + """Return LIMIT/OFFSET SQL clause.""" + limit, offset = self._get_limit_offset_params(low_mark, high_mark) + return '%s%s' % ( + (' LIMIT %d' % limit) if limit else '', + (' OFFSET %d' % offset) if offset else '', + ) + + def last_executed_query(self, cursor, sql, params): + """ + Return a string of the query last executed by the given cursor, with + placeholders replaced with actual values. + + `sql` is the raw query containing placeholders and `params` is the + sequence of parameters. These are used by default, but this method + exists for database backends to provide a better implementation + according to their own quoting schemes. + """ + # Convert params to contain string values. + def to_string(s): + return force_text(s, strings_only=True, errors='replace') + if isinstance(params, (list, tuple)): + u_params = tuple(to_string(val) for val in params) + elif params is None: + u_params = () + else: + u_params = {to_string(k): to_string(v) for k, v in params.items()} + + return "QUERY = %r - PARAMS = %r" % (sql, u_params) + + def last_insert_id(self, cursor, table_name, pk_name): + """ + Given a cursor object that has just performed an INSERT statement into + a table that has an auto-incrementing ID, return the newly created ID. + + `pk_name` is the name of the primary-key column. + """ + return cursor.lastrowid + + def lookup_cast(self, lookup_type, internal_type=None): + """ + Return the string to use in a query when performing lookups + ("contains", "like", etc.). It should contain a '%s' placeholder for + the column being searched against. + """ + return "%s" + + def max_in_list_size(self): + """ + Return the maximum number of items that can be passed in a single 'IN' + list condition, or None if the backend does not impose a limit. + """ + return None + + def max_name_length(self): + """ + Return the maximum length of table and column names, or None if there + is no limit. + """ + return None + + def no_limit_value(self): + """ + Return the value to use for the LIMIT when we are wanting "LIMIT + infinity". Return None if the limit clause can be omitted in this case. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a no_limit_value() method') + + def pk_default_value(self): + """ + Return the value to use during an INSERT statement to specify that + the field should use its default value. + """ + return 'DEFAULT' + + def prepare_sql_script(self, sql): + """ + Take an SQL script that may contain multiple lines and return a list + of statements to feed to successive cursor.execute() calls. + + Since few databases are able to process raw SQL scripts in a single + cursor.execute() call and PEP 249 doesn't talk about this use case, + the default implementation is conservative. + """ + try: + import sqlparse + except ImportError: + raise ImproperlyConfigured( + "The sqlparse package is required if you don't split your SQL " + "statements manually." + ) + else: + return [sqlparse.format(statement, strip_comments=True) + for statement in sqlparse.split(sql) if statement] + + def process_clob(self, value): + """ + Return the value of a CLOB column, for backends that return a locator + object that requires additional processing. + """ + return value + + def return_insert_id(self): + """ + For backends that support returning the last insert ID as part of an + insert query, return the SQL and params to append to the INSERT query. + The returned fragment should contain a format string to hold the + appropriate column. + """ + pass + + def compiler(self, compiler_name): + """ + Return the SQLCompiler class corresponding to the given name, + in the namespace corresponding to the `compiler_module` attribute + on this backend. + """ + if self._cache is None: + self._cache = import_module(self.compiler_module) + return getattr(self._cache, compiler_name) + + def quote_name(self, name): + """ + Return a quoted version of the given table, index, or column name. Do + not quote the given name if it's already been quoted. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a quote_name() method') + + def random_function_sql(self): + """Return an SQL expression that returns a random value.""" + return 'RANDOM()' + + def regex_lookup(self, lookup_type): + """ + Return the string to use in a query when performing regular expression + lookups (using "regex" or "iregex"). It should contain a '%s' + placeholder for the column being searched against. + + If the feature is not supported (or part of it is not supported), raise + NotImplementedError. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations may require a regex_lookup() method') + + def savepoint_create_sql(self, sid): + """ + Return the SQL for starting a new savepoint. Only required if the + "uses_savepoints" feature is True. The "sid" parameter is a string + for the savepoint id. + """ + return "SAVEPOINT %s" % self.quote_name(sid) + + def savepoint_commit_sql(self, sid): + """ + Return the SQL for committing the given savepoint. + """ + return "RELEASE SAVEPOINT %s" % self.quote_name(sid) + + def savepoint_rollback_sql(self, sid): + """ + Return the SQL for rolling back the given savepoint. + """ + return "ROLLBACK TO SAVEPOINT %s" % self.quote_name(sid) + + def set_time_zone_sql(self): + """ + Return the SQL that will set the connection's time zone. + + Return '' if the backend doesn't support time zones. + """ + return '' + + def sql_flush(self, style, tables, sequences, allow_cascade=False): + """ + Return a list of SQL statements required to remove all data from + the given database tables (without actually removing the tables + themselves) and the SQL statements required to reset the sequences + passed in `sequences`. + + The `style` argument is a Style object as returned by either + color_style() or no_style() in django.core.management.color. + + The `allow_cascade` argument determines whether truncation may cascade + to tables with foreign keys pointing the tables being truncated. + PostgreSQL requires a cascade even if these tables are empty. + """ + raise NotImplementedError('subclasses of BaseDatabaseOperations must provide an sql_flush() method') + + def execute_sql_flush(self, using, sql_list): + """Execute a list of SQL statements to flush the database.""" + with transaction.atomic(using=using, savepoint=self.connection.features.can_rollback_ddl): + with self.connection.cursor() as cursor: + for sql in sql_list: + cursor.execute(sql) + + def sequence_reset_by_name_sql(self, style, sequences): + """ + Return a list of the SQL statements required to reset sequences + passed in `sequences`. + + The `style` argument is a Style object as returned by either + color_style() or no_style() in django.core.management.color. + """ + return [] + + def sequence_reset_sql(self, style, model_list): + """ + Return a list of the SQL statements required to reset sequences for + the given models. + + The `style` argument is a Style object as returned by either + color_style() or no_style() in django.core.management.color. + """ + return [] # No sequence reset required by default. + + def start_transaction_sql(self): + """Return the SQL statement required to start a transaction.""" + return "BEGIN;" + + def end_transaction_sql(self, success=True): + """Return the SQL statement required to end a transaction.""" + if not success: + return "ROLLBACK;" + return "COMMIT;" + + def tablespace_sql(self, tablespace, inline=False): + """ + Return the SQL that will be used in a query to define the tablespace. + + Return '' if the backend doesn't support tablespaces. + + If `inline` is True, append the SQL to a row; otherwise append it to + the entire CREATE TABLE or CREATE INDEX statement. + """ + return '' + + def prep_for_like_query(self, x): + """Prepare a value for use in a LIKE query.""" + return str(x).replace("\\", "\\\\").replace("%", r"\%").replace("_", r"\_") + + # Same as prep_for_like_query(), but called for "iexact" matches, which + # need not necessarily be implemented using "LIKE" in the backend. + prep_for_iexact_query = prep_for_like_query + + def validate_autopk_value(self, value): + """ + Certain backends do not accept some values for "serial" fields + (for example zero in MySQL). Raise a ValueError if the value is + invalid, otherwise return the validated value. + """ + return value + + def adapt_unknown_value(self, value): + """ + Transform a value to something compatible with the backend driver. + + This method only depends on the type of the value. It's designed for + cases where the target type isn't known, such as .raw() SQL queries. + As a consequence it may not work perfectly in all circumstances. + """ + if isinstance(value, datetime.datetime): # must be before date + return self.adapt_datetimefield_value(value) + elif isinstance(value, datetime.date): + return self.adapt_datefield_value(value) + elif isinstance(value, datetime.time): + return self.adapt_timefield_value(value) + elif isinstance(value, decimal.Decimal): + return self.adapt_decimalfield_value(value) + else: + return value + + def adapt_datefield_value(self, value): + """ + Transform a date value to an object compatible with what is expected + by the backend driver for date columns. + """ + if value is None: + return None + return str(value) + + def adapt_datetimefield_value(self, value): + """ + Transform a datetime value to an object compatible with what is expected + by the backend driver for datetime columns. + """ + if value is None: + return None + return str(value) + + def adapt_timefield_value(self, value): + """ + Transform a time value to an object compatible with what is expected + by the backend driver for time columns. + """ + if value is None: + return None + if timezone.is_aware(value): + raise ValueError("Django does not support timezone-aware times.") + return str(value) + + def adapt_decimalfield_value(self, value, max_digits=None, decimal_places=None): + """ + Transform a decimal.Decimal value to an object compatible with what is + expected by the backend driver for decimal (numeric) columns. + """ + return utils.format_number(value, max_digits, decimal_places) + + def adapt_ipaddressfield_value(self, value): + """ + Transform a string representation of an IP address into the expected + type for the backend driver. + """ + return value or None + + def year_lookup_bounds_for_date_field(self, value): + """ + Return a two-elements list with the lower and upper bound to be used + with a BETWEEN operator to query a DateField value using a year + lookup. + + `value` is an int, containing the looked-up year. + """ + first = datetime.date(value, 1, 1) + second = datetime.date(value, 12, 31) + first = self.adapt_datefield_value(first) + second = self.adapt_datefield_value(second) + return [first, second] + + def year_lookup_bounds_for_datetime_field(self, value): + """ + Return a two-elements list with the lower and upper bound to be used + with a BETWEEN operator to query a DateTimeField value using a year + lookup. + + `value` is an int, containing the looked-up year. + """ + first = datetime.datetime(value, 1, 1) + second = datetime.datetime(value, 12, 31, 23, 59, 59, 999999) + if settings.USE_TZ: + tz = timezone.get_current_timezone() + first = timezone.make_aware(first, tz) + second = timezone.make_aware(second, tz) + first = self.adapt_datetimefield_value(first) + second = self.adapt_datetimefield_value(second) + return [first, second] + + def get_db_converters(self, expression): + """ + Return a list of functions needed to convert field data. + + Some field types on some backends do not provide data in the correct + format, this is the hook for converter functions. + """ + return [] + + def convert_durationfield_value(self, value, expression, connection): + if value is not None: + return datetime.timedelta(0, 0, value) + + def check_expression_support(self, expression): + """ + Check that the backend supports the provided expression. + + This is used on specific backends to rule out known expressions + that have problematic or nonexistent implementations. If the + expression has a known problem, the backend should raise + NotSupportedError. + """ + pass + + def combine_expression(self, connector, sub_expressions): + """ + Combine a list of subexpressions into a single expression, using + the provided connecting operator. This is required because operators + can vary between backends (e.g., Oracle with %% and &) and between + subexpression types (e.g., date expressions). + """ + conn = ' %s ' % connector + return conn.join(sub_expressions) + + def combine_duration_expression(self, connector, sub_expressions): + return self.combine_expression(connector, sub_expressions) + + def binary_placeholder_sql(self, value): + """ + Some backends require special syntax to insert binary content (MySQL + for example uses '_binary %s'). + """ + return '%s' + + def modify_insert_params(self, placeholder, params): + """ + Allow modification of insert parameters. Needed for Oracle Spatial + backend due to #10888. + """ + return params + + def integer_field_range(self, internal_type): + """ + Given an integer field internal type (e.g. 'PositiveIntegerField'), + return a tuple of the (min_value, max_value) form representing the + range of the column type bound to the field. + """ + return self.integer_field_ranges[internal_type] + + def subtract_temporals(self, internal_type, lhs, rhs): + if self.connection.features.supports_temporal_subtraction: + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + return "(%s - %s)" % (lhs_sql, rhs_sql), lhs_params + rhs_params + raise NotSupportedError("This backend does not support %s subtraction." % internal_type) + + def window_frame_start(self, start): + if isinstance(start, int): + if start < 0: + return '%d %s' % (abs(start), self.PRECEDING) + elif start == 0: + return self.CURRENT_ROW + elif start is None: + return self.UNBOUNDED_PRECEDING + raise ValueError("start argument must be a negative integer, zero, or None, but got '%s'." % start) + + def window_frame_end(self, end): + if isinstance(end, int): + if end == 0: + return self.CURRENT_ROW + elif end > 0: + return '%d %s' % (end, self.FOLLOWING) + elif end is None: + return self.UNBOUNDED_FOLLOWING + raise ValueError("end argument must be a positive integer, zero, or None, but got '%s'." % end) + + def window_frame_rows_start_end(self, start=None, end=None): + """ + Return SQL for start and end points in an OVER clause window frame. + """ + if not self.connection.features.supports_over_clause: + raise NotSupportedError('This backend does not support window expressions.') + return self.window_frame_start(start), self.window_frame_end(end) + + def window_frame_range_start_end(self, start=None, end=None): + return self.window_frame_rows_start_end(start, end) + + def explain_query_prefix(self, format=None, **options): + if not self.connection.features.supports_explaining_query_execution: + raise NotSupportedError('This backend does not support explaining query execution.') + if format: + supported_formats = self.connection.features.supported_explain_formats + normalized_format = format.upper() + if normalized_format not in supported_formats: + msg = '%s is not a recognized format.' % normalized_format + if supported_formats: + msg += ' Allowed formats: %s' % ', '.join(sorted(supported_formats)) + raise ValueError(msg) + if options: + raise ValueError('Unknown options: %s' % ', '.join(sorted(options.keys()))) + return self.explain_prefix diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/schema.py b/env/lib/python3.5/site-packages/django/db/backends/base/schema.py new file mode 100644 index 0000000..82d6faf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/schema.py @@ -0,0 +1,1063 @@ +import hashlib +import logging +from datetime import datetime + +from django.db.backends.ddl_references import ( + Columns, ForeignKeyName, IndexName, Statement, Table, +) +from django.db.backends.utils import split_identifier +from django.db.models import Index +from django.db.transaction import TransactionManagementError, atomic +from django.utils import timezone +from django.utils.encoding import force_bytes + +logger = logging.getLogger('django.db.backends.schema') + + +def _is_relevant_relation(relation, altered_field): + """ + When altering the given field, must constraints on its model from the given + relation be temporarily dropped? + """ + field = relation.field + if field.many_to_many: + # M2M reverse field + return False + if altered_field.primary_key and field.to_fields == [None]: + # Foreign key constraint on the primary key, which is being altered. + return True + # Is the constraint targeting the field being altered? + return altered_field.name in field.to_fields + + +def _related_non_m2m_objects(old_field, new_field): + # Filter out m2m objects from reverse relations. + # Return (old_relation, new_relation) tuples. + return zip( + (obj for obj in old_field.model._meta.related_objects if _is_relevant_relation(obj, old_field)), + (obj for obj in new_field.model._meta.related_objects if _is_relevant_relation(obj, new_field)) + ) + + +class BaseDatabaseSchemaEditor: + """ + This class and its subclasses are responsible for emitting schema-changing + statements to the databases - model creation/removal/alteration, field + renaming, index fiddling, and so on. + """ + + # Overrideable SQL templates + sql_create_table = "CREATE TABLE %(table)s (%(definition)s)" + sql_rename_table = "ALTER TABLE %(old_table)s RENAME TO %(new_table)s" + sql_retablespace_table = "ALTER TABLE %(table)s SET TABLESPACE %(new_tablespace)s" + sql_delete_table = "DROP TABLE %(table)s CASCADE" + + sql_create_column = "ALTER TABLE %(table)s ADD COLUMN %(column)s %(definition)s" + sql_alter_column = "ALTER TABLE %(table)s %(changes)s" + sql_alter_column_type = "ALTER COLUMN %(column)s TYPE %(type)s" + sql_alter_column_null = "ALTER COLUMN %(column)s DROP NOT NULL" + sql_alter_column_not_null = "ALTER COLUMN %(column)s SET NOT NULL" + sql_alter_column_default = "ALTER COLUMN %(column)s SET DEFAULT %(default)s" + sql_alter_column_no_default = "ALTER COLUMN %(column)s DROP DEFAULT" + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s CASCADE" + sql_rename_column = "ALTER TABLE %(table)s RENAME COLUMN %(old_column)s TO %(new_column)s" + sql_update_with_default = "UPDATE %(table)s SET %(column)s = %(default)s WHERE %(column)s IS NULL" + + sql_create_check = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s CHECK (%(check)s)" + sql_delete_check = "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + + sql_create_unique = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s UNIQUE (%(columns)s)" + sql_delete_unique = "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + + sql_create_fk = ( + "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s FOREIGN KEY (%(column)s) " + "REFERENCES %(to_table)s (%(to_column)s)%(deferrable)s" + ) + sql_create_inline_fk = None + sql_delete_fk = "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + + sql_create_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s)%(extra)s" + sql_delete_index = "DROP INDEX %(name)s" + + sql_create_pk = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)" + sql_delete_pk = "ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + + sql_delete_procedure = 'DROP PROCEDURE %(procedure)s' + + def __init__(self, connection, collect_sql=False, atomic=True): + self.connection = connection + self.collect_sql = collect_sql + if self.collect_sql: + self.collected_sql = [] + self.atomic_migration = self.connection.features.can_rollback_ddl and atomic + + # State-managing methods + + def __enter__(self): + self.deferred_sql = [] + if self.atomic_migration: + self.atomic = atomic(self.connection.alias) + self.atomic.__enter__() + return self + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type is None: + for sql in self.deferred_sql: + self.execute(sql) + if self.atomic_migration: + self.atomic.__exit__(exc_type, exc_value, traceback) + + # Core utility functions + + def execute(self, sql, params=()): + """Execute the given SQL statement, with optional parameters.""" + # Don't perform the transactional DDL check if SQL is being collected + # as it's not going to be executed anyway. + if not self.collect_sql and self.connection.in_atomic_block and not self.connection.features.can_rollback_ddl: + raise TransactionManagementError( + "Executing DDL statements while in a transaction on databases " + "that can't perform a rollback is prohibited." + ) + # Account for non-string statement objects. + sql = str(sql) + # Log the command we're running, then run it + logger.debug("%s; (params %r)", sql, params, extra={'params': params, 'sql': sql}) + if self.collect_sql: + ending = "" if sql.endswith(";") else ";" + if params is not None: + self.collected_sql.append((sql % tuple(map(self.quote_value, params))) + ending) + else: + self.collected_sql.append(sql + ending) + else: + with self.connection.cursor() as cursor: + cursor.execute(sql, params) + + def quote_name(self, name): + return self.connection.ops.quote_name(name) + + @classmethod + def _digest(cls, *args): + """ + Generate a 32-bit digest of a set of arguments that can be used to + shorten identifying names. + """ + h = hashlib.md5() + for arg in args: + h.update(force_bytes(arg)) + return h.hexdigest()[:8] + + # Field <-> database mapping functions + + def column_sql(self, model, field, include_default=False): + """ + Take a field and return its column definition. + The field must already have had set_attributes_from_name() called. + """ + # Get the column's type and use that as the basis of the SQL + db_params = field.db_parameters(connection=self.connection) + sql = db_params['type'] + params = [] + # Check for fields that aren't actually columns (e.g. M2M) + if sql is None: + return None, None + # Work out nullability + null = field.null + # If we were told to include a default value, do so + include_default = include_default and not self.skip_default(field) + if include_default: + default_value = self.effective_default(field) + if default_value is not None: + if self.connection.features.requires_literal_defaults: + # Some databases can't take defaults as a parameter (oracle) + # If this is the case, the individual schema backend should + # implement prepare_default + sql += " DEFAULT %s" % self.prepare_default(default_value) + else: + sql += " DEFAULT %s" + params += [default_value] + # Oracle treats the empty string ('') as null, so coerce the null + # option whenever '' is a possible value. + if (field.empty_strings_allowed and not field.primary_key and + self.connection.features.interprets_empty_strings_as_nulls): + null = True + if null and not self.connection.features.implied_column_null: + sql += " NULL" + elif not null: + sql += " NOT NULL" + # Primary key/unique outputs + if field.primary_key: + sql += " PRIMARY KEY" + elif field.unique: + sql += " UNIQUE" + # Optionally add the tablespace if it's an implicitly indexed column + tablespace = field.db_tablespace or model._meta.db_tablespace + if tablespace and self.connection.features.supports_tablespaces and field.unique: + sql += " %s" % self.connection.ops.tablespace_sql(tablespace, inline=True) + # Return the sql + return sql, params + + def skip_default(self, field): + """ + Some backends don't accept default values for certain columns types + (i.e. MySQL longtext and longblob). + """ + return False + + def prepare_default(self, value): + """ + Only used for backends which have requires_literal_defaults feature + """ + raise NotImplementedError( + 'subclasses of BaseDatabaseSchemaEditor for backends which have ' + 'requires_literal_defaults must provide a prepare_default() method' + ) + + def effective_default(self, field): + """Return a field's effective database default value.""" + if field.has_default(): + default = field.get_default() + elif not field.null and field.blank and field.empty_strings_allowed: + if field.get_internal_type() == "BinaryField": + default = bytes() + else: + default = str() + elif getattr(field, 'auto_now', False) or getattr(field, 'auto_now_add', False): + default = datetime.now() + internal_type = field.get_internal_type() + if internal_type == 'DateField': + default = default.date + elif internal_type == 'TimeField': + default = default.time + elif internal_type == 'DateTimeField': + default = timezone.now + else: + default = None + # If it's a callable, call it + if callable(default): + default = default() + # Convert the value so it can be sent to the database. + return field.get_db_prep_save(default, self.connection) + + def quote_value(self, value): + """ + Return a quoted version of the value so it's safe to use in an SQL + string. This is not safe against injection from user code; it is + intended only for use in making SQL scripts or preparing default values + for particularly tricky backends (defaults are not user-defined, though, + so this is safe). + """ + raise NotImplementedError() + + # Actions + + def create_model(self, model): + """ + Create a table and any accompanying indexes or unique constraints for + the given `model`. + """ + # Create column SQL, add FK deferreds if needed + column_sqls = [] + params = [] + for field in model._meta.local_fields: + # SQL + definition, extra_params = self.column_sql(model, field) + if definition is None: + continue + # Check constraints can go on the column SQL here + db_params = field.db_parameters(connection=self.connection) + if db_params['check']: + definition += " CHECK (%s)" % db_params['check'] + # Autoincrement SQL (for backends with inline variant) + col_type_suffix = field.db_type_suffix(connection=self.connection) + if col_type_suffix: + definition += " %s" % col_type_suffix + params.extend(extra_params) + # FK + if field.remote_field and field.db_constraint: + to_table = field.remote_field.model._meta.db_table + to_column = field.remote_field.model._meta.get_field(field.remote_field.field_name).column + if self.sql_create_inline_fk: + definition += " " + self.sql_create_inline_fk % { + "to_table": self.quote_name(to_table), + "to_column": self.quote_name(to_column), + } + elif self.connection.features.supports_foreign_keys: + self.deferred_sql.append(self._create_fk_sql(model, field, "_fk_%(to_table)s_%(to_column)s")) + # Add the SQL to our big list + column_sqls.append("%s %s" % ( + self.quote_name(field.column), + definition, + )) + # Autoincrement SQL (for backends with post table definition variant) + if field.get_internal_type() in ("AutoField", "BigAutoField"): + autoinc_sql = self.connection.ops.autoinc_sql(model._meta.db_table, field.column) + if autoinc_sql: + self.deferred_sql.extend(autoinc_sql) + + # Add any unique_togethers (always deferred, as some fields might be + # created afterwards, like geometry fields with some backends) + for fields in model._meta.unique_together: + columns = [model._meta.get_field(field).column for field in fields] + self.deferred_sql.append(self._create_unique_sql(model, columns)) + # Make the table + sql = self.sql_create_table % { + "table": self.quote_name(model._meta.db_table), + "definition": ", ".join(column_sqls) + } + if model._meta.db_tablespace: + tablespace_sql = self.connection.ops.tablespace_sql(model._meta.db_tablespace) + if tablespace_sql: + sql += ' ' + tablespace_sql + # Prevent using [] as params, in the case a literal '%' is used in the definition + self.execute(sql, params or None) + + # Add any field index and index_together's (deferred as SQLite3 _remake_table needs it) + self.deferred_sql.extend(self._model_indexes_sql(model)) + + # Make M2M tables + for field in model._meta.local_many_to_many: + if field.remote_field.through._meta.auto_created: + self.create_model(field.remote_field.through) + + def delete_model(self, model): + """Delete a model from the database.""" + # Handle auto-created intermediary models + for field in model._meta.local_many_to_many: + if field.remote_field.through._meta.auto_created: + self.delete_model(field.remote_field.through) + + # Delete the table + self.execute(self.sql_delete_table % { + "table": self.quote_name(model._meta.db_table), + }) + # Remove all deferred statements referencing the deleted table. + for sql in list(self.deferred_sql): + if isinstance(sql, Statement) and sql.references_table(model._meta.db_table): + self.deferred_sql.remove(sql) + + def add_index(self, model, index): + """Add an index on a model.""" + self.execute(index.create_sql(model, self)) + + def remove_index(self, model, index): + """Remove an index from a model.""" + self.execute(index.remove_sql(model, self)) + + def alter_unique_together(self, model, old_unique_together, new_unique_together): + """ + Deal with a model changing its unique_together. The input + unique_togethers must be doubly-nested, not the single-nested + ["foo", "bar"] format. + """ + olds = {tuple(fields) for fields in old_unique_together} + news = {tuple(fields) for fields in new_unique_together} + # Deleted uniques + for fields in olds.difference(news): + self._delete_composed_index(model, fields, {'unique': True}, self.sql_delete_unique) + # Created uniques + for fields in news.difference(olds): + columns = [model._meta.get_field(field).column for field in fields] + self.execute(self._create_unique_sql(model, columns)) + + def alter_index_together(self, model, old_index_together, new_index_together): + """ + Deal with a model changing its index_together. The input + index_togethers must be doubly-nested, not the single-nested + ["foo", "bar"] format. + """ + olds = {tuple(fields) for fields in old_index_together} + news = {tuple(fields) for fields in new_index_together} + # Deleted indexes + for fields in olds.difference(news): + self._delete_composed_index(model, fields, {'index': True}, self.sql_delete_index) + # Created indexes + for field_names in news.difference(olds): + fields = [model._meta.get_field(field) for field in field_names] + self.execute(self._create_index_sql(model, fields, suffix="_idx")) + + def _delete_composed_index(self, model, fields, constraint_kwargs, sql): + columns = [model._meta.get_field(field).column for field in fields] + constraint_names = self._constraint_names(model, columns, **constraint_kwargs) + if len(constraint_names) != 1: + raise ValueError("Found wrong number (%s) of constraints for %s(%s)" % ( + len(constraint_names), + model._meta.db_table, + ", ".join(columns), + )) + self.execute(self._delete_constraint_sql(sql, model, constraint_names[0])) + + def alter_db_table(self, model, old_db_table, new_db_table): + """Rename the table a model points to.""" + if (old_db_table == new_db_table or + (self.connection.features.ignores_table_name_case and + old_db_table.lower() == new_db_table.lower())): + return + self.execute(self.sql_rename_table % { + "old_table": self.quote_name(old_db_table), + "new_table": self.quote_name(new_db_table), + }) + # Rename all references to the old table name. + for sql in self.deferred_sql: + if isinstance(sql, Statement): + sql.rename_table_references(old_db_table, new_db_table) + + def alter_db_tablespace(self, model, old_db_tablespace, new_db_tablespace): + """Move a model's table between tablespaces.""" + self.execute(self.sql_retablespace_table % { + "table": self.quote_name(model._meta.db_table), + "old_tablespace": self.quote_name(old_db_tablespace), + "new_tablespace": self.quote_name(new_db_tablespace), + }) + + def add_field(self, model, field): + """ + Create a field on a model. Usually involves adding a column, but may + involve adding a table instead (for M2M fields). + """ + # Special-case implicit M2M tables + if field.many_to_many and field.remote_field.through._meta.auto_created: + return self.create_model(field.remote_field.through) + # Get the column's definition + definition, params = self.column_sql(model, field, include_default=True) + # It might not actually have a column behind it + if definition is None: + return + # Check constraints can go on the column SQL here + db_params = field.db_parameters(connection=self.connection) + if db_params['check']: + definition += " CHECK (%s)" % db_params['check'] + # Build the SQL and run it + sql = self.sql_create_column % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + "definition": definition, + } + self.execute(sql, params) + # Drop the default if we need to + # (Django usually does not use in-database defaults) + if not self.skip_default(field) and self.effective_default(field) is not None: + changes_sql, params = self._alter_column_default_sql(model, None, field, drop=True) + sql = self.sql_alter_column % { + "table": self.quote_name(model._meta.db_table), + "changes": changes_sql, + } + self.execute(sql, params) + # Add an index, if required + self.deferred_sql.extend(self._field_indexes_sql(model, field)) + # Add any FK constraints later + if field.remote_field and self.connection.features.supports_foreign_keys and field.db_constraint: + self.deferred_sql.append(self._create_fk_sql(model, field, "_fk_%(to_table)s_%(to_column)s")) + # Reset connection if required + if self.connection.features.connection_persists_old_columns: + self.connection.close() + + def remove_field(self, model, field): + """ + Remove a field from a model. Usually involves deleting a column, + but for M2Ms may involve deleting a table. + """ + # Special-case implicit M2M tables + if field.many_to_many and field.remote_field.through._meta.auto_created: + return self.delete_model(field.remote_field.through) + # It might not actually have a column behind it + if field.db_parameters(connection=self.connection)['type'] is None: + return + # Drop any FK constraints, MySQL requires explicit deletion + if field.remote_field: + fk_names = self._constraint_names(model, [field.column], foreign_key=True) + for fk_name in fk_names: + self.execute(self._delete_constraint_sql(self.sql_delete_fk, model, fk_name)) + # Delete the column + sql = self.sql_delete_column % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(field.column), + } + self.execute(sql) + # Reset connection if required + if self.connection.features.connection_persists_old_columns: + self.connection.close() + # Remove all deferred statements referencing the deleted column. + for sql in list(self.deferred_sql): + if isinstance(sql, Statement) and sql.references_column(model._meta.db_table, field.column): + self.deferred_sql.remove(sql) + + def alter_field(self, model, old_field, new_field, strict=False): + """ + Allow a field's type, uniqueness, nullability, default, column, + constraints, etc. to be modified. + `old_field` is required to compute the necessary changes. + If `strict` is True, raise errors if the old column does not match + `old_field` precisely. + """ + # Ensure this field is even column-based + old_db_params = old_field.db_parameters(connection=self.connection) + old_type = old_db_params['type'] + new_db_params = new_field.db_parameters(connection=self.connection) + new_type = new_db_params['type'] + if ((old_type is None and old_field.remote_field is None) or + (new_type is None and new_field.remote_field is None)): + raise ValueError( + "Cannot alter field %s into %s - they do not properly define " + "db_type (are you using a badly-written custom field?)" % + (old_field, new_field), + ) + elif old_type is None and new_type is None and ( + old_field.remote_field.through and new_field.remote_field.through and + old_field.remote_field.through._meta.auto_created and + new_field.remote_field.through._meta.auto_created): + return self._alter_many_to_many(model, old_field, new_field, strict) + elif old_type is None and new_type is None and ( + old_field.remote_field.through and new_field.remote_field.through and + not old_field.remote_field.through._meta.auto_created and + not new_field.remote_field.through._meta.auto_created): + # Both sides have through models; this is a no-op. + return + elif old_type is None or new_type is None: + raise ValueError( + "Cannot alter field %s into %s - they are not compatible types " + "(you cannot alter to or from M2M fields, or add or remove " + "through= on M2M fields)" % (old_field, new_field) + ) + + self._alter_field(model, old_field, new_field, old_type, new_type, + old_db_params, new_db_params, strict) + + def _alter_field(self, model, old_field, new_field, old_type, new_type, + old_db_params, new_db_params, strict=False): + """Perform a "physical" (non-ManyToMany) field update.""" + # Drop any FK constraints, we'll remake them later + fks_dropped = set() + if old_field.remote_field and old_field.db_constraint: + fk_names = self._constraint_names(model, [old_field.column], foreign_key=True) + if strict and len(fk_names) != 1: + raise ValueError("Found wrong number (%s) of foreign key constraints for %s.%s" % ( + len(fk_names), + model._meta.db_table, + old_field.column, + )) + for fk_name in fk_names: + fks_dropped.add((old_field.column,)) + self.execute(self._delete_constraint_sql(self.sql_delete_fk, model, fk_name)) + # Has unique been removed? + if old_field.unique and (not new_field.unique or self._field_became_primary_key(old_field, new_field)): + # Find the unique constraint for this field + constraint_names = self._constraint_names(model, [old_field.column], unique=True, primary_key=False) + if strict and len(constraint_names) != 1: + raise ValueError("Found wrong number (%s) of unique constraints for %s.%s" % ( + len(constraint_names), + model._meta.db_table, + old_field.column, + )) + for constraint_name in constraint_names: + self.execute(self._delete_constraint_sql(self.sql_delete_unique, model, constraint_name)) + # Drop incoming FK constraints if the field is a primary key or unique, + # which might be a to_field target, and things are going to change. + drop_foreign_keys = ( + ( + (old_field.primary_key and new_field.primary_key) or + (old_field.unique and new_field.unique) + ) and old_type != new_type + ) + if drop_foreign_keys: + # '_meta.related_field' also contains M2M reverse fields, these + # will be filtered out + for _old_rel, new_rel in _related_non_m2m_objects(old_field, new_field): + rel_fk_names = self._constraint_names( + new_rel.related_model, [new_rel.field.column], foreign_key=True + ) + for fk_name in rel_fk_names: + self.execute(self._delete_constraint_sql(self.sql_delete_fk, new_rel.related_model, fk_name)) + # Removed an index? (no strict check, as multiple indexes are possible) + # Remove indexes if db_index switched to False or a unique constraint + # will now be used in lieu of an index. The following lines from the + # truth table show all True cases; the rest are False: + # + # old_field.db_index | old_field.unique | new_field.db_index | new_field.unique + # ------------------------------------------------------------------------------ + # True | False | False | False + # True | False | False | True + # True | False | True | True + if old_field.db_index and not old_field.unique and (not new_field.db_index or new_field.unique): + # Find the index for this field + meta_index_names = {index.name for index in model._meta.indexes} + # Retrieve only BTREE indexes since this is what's created with + # db_index=True. + index_names = self._constraint_names(model, [old_field.column], index=True, type_=Index.suffix) + for index_name in index_names: + if index_name not in meta_index_names: + # The only way to check if an index was created with + # db_index=True or with Index(['field'], name='foo') + # is to look at its name (refs #28053). + self.execute(self._delete_constraint_sql(self.sql_delete_index, model, index_name)) + # Change check constraints? + if old_db_params['check'] != new_db_params['check'] and old_db_params['check']: + constraint_names = self._constraint_names(model, [old_field.column], check=True) + if strict and len(constraint_names) != 1: + raise ValueError("Found wrong number (%s) of check constraints for %s.%s" % ( + len(constraint_names), + model._meta.db_table, + old_field.column, + )) + for constraint_name in constraint_names: + self.execute(self._delete_constraint_sql(self.sql_delete_check, model, constraint_name)) + # Have they renamed the column? + if old_field.column != new_field.column: + self.execute(self._rename_field_sql(model._meta.db_table, old_field, new_field, new_type)) + # Rename all references to the renamed column. + for sql in self.deferred_sql: + if isinstance(sql, Statement): + sql.rename_column_references(model._meta.db_table, old_field.column, new_field.column) + # Next, start accumulating actions to do + actions = [] + null_actions = [] + post_actions = [] + # Type change? + if old_type != new_type: + fragment, other_actions = self._alter_column_type_sql(model, old_field, new_field, new_type) + actions.append(fragment) + post_actions.extend(other_actions) + # When changing a column NULL constraint to NOT NULL with a given + # default value, we need to perform 4 steps: + # 1. Add a default for new incoming writes + # 2. Update existing NULL rows with new default + # 3. Replace NULL constraint with NOT NULL + # 4. Drop the default again. + # Default change? + old_default = self.effective_default(old_field) + new_default = self.effective_default(new_field) + needs_database_default = ( + old_field.null and + not new_field.null and + old_default != new_default and + new_default is not None and + not self.skip_default(new_field) + ) + if needs_database_default: + actions.append(self._alter_column_default_sql(model, old_field, new_field)) + # Nullability change? + if old_field.null != new_field.null: + fragment = self._alter_column_null_sql(model, old_field, new_field) + if fragment: + null_actions.append(fragment) + # Only if we have a default and there is a change from NULL to NOT NULL + four_way_default_alteration = ( + new_field.has_default() and + (old_field.null and not new_field.null) + ) + if actions or null_actions: + if not four_way_default_alteration: + # If we don't have to do a 4-way default alteration we can + # directly run a (NOT) NULL alteration + actions = actions + null_actions + # Combine actions together if we can (e.g. postgres) + if self.connection.features.supports_combined_alters and actions: + sql, params = tuple(zip(*actions)) + actions = [(", ".join(sql), sum(params, []))] + # Apply those actions + for sql, params in actions: + self.execute( + self.sql_alter_column % { + "table": self.quote_name(model._meta.db_table), + "changes": sql, + }, + params, + ) + if four_way_default_alteration: + # Update existing rows with default value + self.execute( + self.sql_update_with_default % { + "table": self.quote_name(model._meta.db_table), + "column": self.quote_name(new_field.column), + "default": "%s", + }, + [new_default], + ) + # Since we didn't run a NOT NULL change before we need to do it + # now + for sql, params in null_actions: + self.execute( + self.sql_alter_column % { + "table": self.quote_name(model._meta.db_table), + "changes": sql, + }, + params, + ) + if post_actions: + for sql, params in post_actions: + self.execute(sql, params) + # If primary_key changed to False, delete the primary key constraint. + if old_field.primary_key and not new_field.primary_key: + self._delete_primary_key(model, strict) + # Added a unique? + if self._unique_should_be_added(old_field, new_field): + self.execute(self._create_unique_sql(model, [new_field.column])) + # Added an index? Add an index if db_index switched to True or a unique + # constraint will no longer be used in lieu of an index. The following + # lines from the truth table show all True cases; the rest are False: + # + # old_field.db_index | old_field.unique | new_field.db_index | new_field.unique + # ------------------------------------------------------------------------------ + # False | False | True | False + # False | True | True | False + # True | True | True | False + if (not old_field.db_index or old_field.unique) and new_field.db_index and not new_field.unique: + self.execute(self._create_index_sql(model, [new_field])) + # Type alteration on primary key? Then we need to alter the column + # referring to us. + rels_to_update = [] + if old_field.primary_key and new_field.primary_key and old_type != new_type: + rels_to_update.extend(_related_non_m2m_objects(old_field, new_field)) + # Changed to become primary key? + if self._field_became_primary_key(old_field, new_field): + # Make the new one + self.execute( + self.sql_create_pk % { + "table": self.quote_name(model._meta.db_table), + "name": self.quote_name( + self._create_index_name(model._meta.db_table, [new_field.column], suffix="_pk") + ), + "columns": self.quote_name(new_field.column), + } + ) + # Update all referencing columns + rels_to_update.extend(_related_non_m2m_objects(old_field, new_field)) + # Handle our type alters on the other end of rels from the PK stuff above + for old_rel, new_rel in rels_to_update: + rel_db_params = new_rel.field.db_parameters(connection=self.connection) + rel_type = rel_db_params['type'] + fragment, other_actions = self._alter_column_type_sql( + new_rel.related_model, old_rel.field, new_rel.field, rel_type + ) + self.execute( + self.sql_alter_column % { + "table": self.quote_name(new_rel.related_model._meta.db_table), + "changes": fragment[0], + }, + fragment[1], + ) + for sql, params in other_actions: + self.execute(sql, params) + # Does it have a foreign key? + if (new_field.remote_field and + (fks_dropped or not old_field.remote_field or not old_field.db_constraint) and + new_field.db_constraint): + self.execute(self._create_fk_sql(model, new_field, "_fk_%(to_table)s_%(to_column)s")) + # Rebuild FKs that pointed to us if we previously had to drop them + if drop_foreign_keys: + for rel in new_field.model._meta.related_objects: + if _is_relevant_relation(rel, new_field) and rel.field.db_constraint: + self.execute(self._create_fk_sql(rel.related_model, rel.field, "_fk")) + # Does it have check constraints we need to add? + if old_db_params['check'] != new_db_params['check'] and new_db_params['check']: + self.execute( + self.sql_create_check % { + "table": self.quote_name(model._meta.db_table), + "name": self.quote_name( + self._create_index_name(model._meta.db_table, [new_field.column], suffix="_check") + ), + "column": self.quote_name(new_field.column), + "check": new_db_params['check'], + } + ) + # Drop the default if we need to + # (Django usually does not use in-database defaults) + if needs_database_default: + changes_sql, params = self._alter_column_default_sql(model, old_field, new_field, drop=True) + sql = self.sql_alter_column % { + "table": self.quote_name(model._meta.db_table), + "changes": changes_sql, + } + self.execute(sql, params) + # Reset connection if required + if self.connection.features.connection_persists_old_columns: + self.connection.close() + + def _alter_column_null_sql(self, model, old_field, new_field): + """ + Hook to specialize column null alteration. + + Return a (sql, params) fragment to set a column to null or non-null + as required by new_field, or None if no changes are required. + """ + if (self.connection.features.interprets_empty_strings_as_nulls and + new_field.get_internal_type() in ("CharField", "TextField")): + # The field is nullable in the database anyway, leave it alone. + return + else: + new_db_params = new_field.db_parameters(connection=self.connection) + sql = self.sql_alter_column_null if new_field.null else self.sql_alter_column_not_null + return ( + sql % { + 'column': self.quote_name(new_field.column), + 'type': new_db_params['type'], + }, + [], + ) + + def _alter_column_default_sql(self, model, old_field, new_field, drop=False): + """ + Hook to specialize column default alteration. + + Return a (sql, params) fragment to add or drop (depending on the drop + argument) a default to new_field's column. + """ + new_default = self.effective_default(new_field) + default = '%s' + params = [new_default] + + if drop: + params = [] + elif self.connection.features.requires_literal_defaults: + # Some databases (Oracle) can't take defaults as a parameter + # If this is the case, the SchemaEditor for that database should + # implement prepare_default(). + default = self.prepare_default(new_default) + params = [] + + new_db_params = new_field.db_parameters(connection=self.connection) + sql = self.sql_alter_column_no_default if drop else self.sql_alter_column_default + return ( + sql % { + 'column': self.quote_name(new_field.column), + 'type': new_db_params['type'], + 'default': default, + }, + params, + ) + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + """ + Hook to specialize column type alteration for different backends, + for cases when a creation type is different to an alteration type + (e.g. SERIAL in PostgreSQL, PostGIS fields). + + Return a two-tuple of: an SQL fragment of (sql, params) to insert into + an ALTER TABLE statement and a list of extra (sql, params) tuples to + run once the field is altered. + """ + return ( + ( + self.sql_alter_column_type % { + "column": self.quote_name(new_field.column), + "type": new_type, + }, + [], + ), + [], + ) + + def _alter_many_to_many(self, model, old_field, new_field, strict): + """Alter M2Ms to repoint their to= endpoints.""" + # Rename the through table + if old_field.remote_field.through._meta.db_table != new_field.remote_field.through._meta.db_table: + self.alter_db_table(old_field.remote_field.through, old_field.remote_field.through._meta.db_table, + new_field.remote_field.through._meta.db_table) + # Repoint the FK to the other side + self.alter_field( + new_field.remote_field.through, + # We need the field that points to the target model, so we can tell alter_field to change it - + # this is m2m_reverse_field_name() (as opposed to m2m_field_name, which points to our model) + old_field.remote_field.through._meta.get_field(old_field.m2m_reverse_field_name()), + new_field.remote_field.through._meta.get_field(new_field.m2m_reverse_field_name()), + ) + self.alter_field( + new_field.remote_field.through, + # for self-referential models we need to alter field from the other end too + old_field.remote_field.through._meta.get_field(old_field.m2m_field_name()), + new_field.remote_field.through._meta.get_field(new_field.m2m_field_name()), + ) + + def _create_index_name(self, table_name, column_names, suffix=""): + """ + Generate a unique name for an index/unique constraint. + + The name is divided into 3 parts: the table name, the column names, + and a unique digest and suffix. + """ + _, table_name = split_identifier(table_name) + hash_suffix_part = '%s%s' % (self._digest(table_name, *column_names), suffix) + max_length = self.connection.ops.max_name_length() or 200 + # If everything fits into max_length, use that name. + index_name = '%s_%s_%s' % (table_name, '_'.join(column_names), hash_suffix_part) + if len(index_name) <= max_length: + return index_name + # Shorten a long suffix. + if len(hash_suffix_part) > max_length / 3: + hash_suffix_part = hash_suffix_part[:max_length // 3] + other_length = (max_length - len(hash_suffix_part)) // 2 - 1 + index_name = '%s_%s_%s' % ( + table_name[:other_length], + '_'.join(column_names)[:other_length], + hash_suffix_part, + ) + # Prepend D if needed to prevent the name from starting with an + # underscore or a number (not permitted on Oracle). + if index_name[0] == "_" or index_name[0].isdigit(): + index_name = "D%s" % index_name[:-1] + return index_name + + def _get_index_tablespace_sql(self, model, fields, db_tablespace=None): + if db_tablespace is None: + if len(fields) == 1 and fields[0].db_tablespace: + db_tablespace = fields[0].db_tablespace + elif model._meta.db_tablespace: + db_tablespace = model._meta.db_tablespace + if db_tablespace is not None: + return ' ' + self.connection.ops.tablespace_sql(db_tablespace) + return '' + + def _create_index_sql(self, model, fields, *, name=None, suffix='', using='', + db_tablespace=None, col_suffixes=(), sql=None): + """ + Return the SQL statement to create the index for one or several fields. + `sql` can be specified if the syntax differs from the standard (GIS + indexes, ...). + """ + tablespace_sql = self._get_index_tablespace_sql(model, fields, db_tablespace=db_tablespace) + columns = [field.column for field in fields] + sql_create_index = sql or self.sql_create_index + table = model._meta.db_table + + def create_index_name(*args, **kwargs): + nonlocal name + if name is None: + name = self._create_index_name(*args, **kwargs) + return self.quote_name(name) + + return Statement( + sql_create_index, + table=Table(table, self.quote_name), + name=IndexName(table, columns, suffix, create_index_name), + using=using, + columns=Columns(table, columns, self.quote_name, col_suffixes=col_suffixes), + extra=tablespace_sql, + ) + + def _model_indexes_sql(self, model): + """ + Return a list of all index SQL statements (field indexes, + index_together, Meta.indexes) for the specified model. + """ + if not model._meta.managed or model._meta.proxy or model._meta.swapped: + return [] + output = [] + for field in model._meta.local_fields: + output.extend(self._field_indexes_sql(model, field)) + + for field_names in model._meta.index_together: + fields = [model._meta.get_field(field) for field in field_names] + output.append(self._create_index_sql(model, fields, suffix="_idx")) + + for index in model._meta.indexes: + output.append(index.create_sql(model, self)) + return output + + def _field_indexes_sql(self, model, field): + """ + Return a list of all index SQL statements for the specified field. + """ + output = [] + if self._field_should_be_indexed(model, field): + output.append(self._create_index_sql(model, [field])) + return output + + def _field_should_be_indexed(self, model, field): + return field.db_index and not field.unique + + def _field_became_primary_key(self, old_field, new_field): + return not old_field.primary_key and new_field.primary_key + + def _unique_should_be_added(self, old_field, new_field): + return (not old_field.unique and new_field.unique) or ( + old_field.primary_key and not new_field.primary_key and new_field.unique + ) + + def _rename_field_sql(self, table, old_field, new_field, new_type): + return self.sql_rename_column % { + "table": self.quote_name(table), + "old_column": self.quote_name(old_field.column), + "new_column": self.quote_name(new_field.column), + "type": new_type, + } + + def _create_fk_sql(self, model, field, suffix): + from_table = model._meta.db_table + from_column = field.column + _, to_table = split_identifier(field.target_field.model._meta.db_table) + to_column = field.target_field.column + + def create_fk_name(*args, **kwargs): + return self.quote_name(self._create_index_name(*args, **kwargs)) + + return Statement( + self.sql_create_fk, + table=Table(from_table, self.quote_name), + name=ForeignKeyName(from_table, [from_column], to_table, [to_column], suffix, create_fk_name), + column=Columns(from_table, [from_column], self.quote_name), + to_table=Table(field.target_field.model._meta.db_table, self.quote_name), + to_column=Columns(field.target_field.model._meta.db_table, [to_column], self.quote_name), + deferrable=self.connection.ops.deferrable_sql(), + ) + + def _create_unique_sql(self, model, columns): + def create_unique_name(*args, **kwargs): + return self.quote_name(self._create_index_name(*args, **kwargs)) + table = model._meta.db_table + return Statement( + self.sql_create_unique, + table=Table(table, self.quote_name), + name=IndexName(table, columns, '_uniq', create_unique_name), + columns=Columns(table, columns, self.quote_name), + ) + + def _delete_constraint_sql(self, template, model, name): + return template % { + "table": self.quote_name(model._meta.db_table), + "name": self.quote_name(name), + } + + def _constraint_names(self, model, column_names=None, unique=None, + primary_key=None, index=None, foreign_key=None, + check=None, type_=None): + """Return all constraint names matching the columns and conditions.""" + if column_names is not None: + column_names = [ + self.connection.introspection.column_name_converter(name) + for name in column_names + ] + with self.connection.cursor() as cursor: + constraints = self.connection.introspection.get_constraints(cursor, model._meta.db_table) + result = [] + for name, infodict in constraints.items(): + if column_names is None or column_names == infodict['columns']: + if unique is not None and infodict['unique'] != unique: + continue + if primary_key is not None and infodict['primary_key'] != primary_key: + continue + if index is not None and infodict['index'] != index: + continue + if check is not None and infodict['check'] != check: + continue + if foreign_key is not None and not infodict['foreign_key']: + continue + if type_ is not None and infodict['type'] != type_: + continue + result.append(name) + return result + + def _delete_primary_key(self, model, strict=False): + constraint_names = self._constraint_names(model, primary_key=True) + if strict and len(constraint_names) != 1: + raise ValueError('Found wrong number (%s) of PK constraints for %s' % ( + len(constraint_names), + model._meta.db_table, + )) + for constraint_name in constraint_names: + self.execute(self._delete_constraint_sql(self.sql_delete_pk, model, constraint_name)) + + def remove_procedure(self, procedure_name, param_types=()): + sql = self.sql_delete_procedure % { + 'procedure': self.quote_name(procedure_name), + 'param_types': ','.join(param_types), + } + self.execute(sql) diff --git a/env/lib/python3.5/site-packages/django/db/backends/base/validation.py b/env/lib/python3.5/site-packages/django/db/backends/base/validation.py new file mode 100644 index 0000000..a02780a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/base/validation.py @@ -0,0 +1,25 @@ +class BaseDatabaseValidation: + """Encapsulate backend-specific validation.""" + def __init__(self, connection): + self.connection = connection + + def check(self, **kwargs): + return [] + + def check_field(self, field, **kwargs): + errors = [] + # Backends may implement a check_field_type() method. + if (hasattr(self, 'check_field_type') and + # Ignore any related fields. + not getattr(field, 'remote_field', None)): + # Ignore fields with unsupported features. + db_supports_all_required_features = all( + getattr(self.connection.features, feature, False) + for feature in field.model._meta.required_db_features + ) + if db_supports_all_required_features: + field_type = field.db_type(self.connection) + # Ignore non-concrete fields. + if field_type is not None: + errors.extend(self.check_field_type(field, field_type)) + return errors diff --git a/env/lib/python3.5/site-packages/django/db/backends/ddl_references.py b/env/lib/python3.5/site-packages/django/db/backends/ddl_references.py new file mode 100644 index 0000000..b894d58 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/ddl_references.py @@ -0,0 +1,175 @@ +""" +Helpers to manipulate deferred DDL statements that might need to be adjusted or +discarded within when executing a migration. +""" + + +class Reference: + """Base class that defines the reference interface.""" + + def references_table(self, table): + """ + Return whether or not this instance references the specified table. + """ + return False + + def references_column(self, table, column): + """ + Return whether or not this instance references the specified column. + """ + return False + + def rename_table_references(self, old_table, new_table): + """ + Rename all references to the old_name to the new_table. + """ + pass + + def rename_column_references(self, table, old_column, new_column): + """ + Rename all references to the old_column to the new_column. + """ + pass + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, str(self)) + + def __str__(self): + raise NotImplementedError('Subclasses must define how they should be converted to string.') + + +class Table(Reference): + """Hold a reference to a table.""" + + def __init__(self, table, quote_name): + self.table = table + self.quote_name = quote_name + + def references_table(self, table): + return self.table == table + + def rename_table_references(self, old_table, new_table): + if self.table == old_table: + self.table = new_table + + def __str__(self): + return self.quote_name(self.table) + + +class TableColumns(Table): + """Base class for references to multiple columns of a table.""" + + def __init__(self, table, columns): + self.table = table + self.columns = columns + + def references_column(self, table, column): + return self.table == table and column in self.columns + + def rename_column_references(self, table, old_column, new_column): + if self.table == table: + for index, column in enumerate(self.columns): + if column == old_column: + self.columns[index] = new_column + + +class Columns(TableColumns): + """Hold a reference to one or many columns.""" + + def __init__(self, table, columns, quote_name, col_suffixes=()): + self.quote_name = quote_name + self.col_suffixes = col_suffixes + super().__init__(table, columns) + + def __str__(self): + def col_str(column, idx): + try: + return self.quote_name(column) + self.col_suffixes[idx] + except IndexError: + return self.quote_name(column) + + return ', '.join(col_str(column, idx) for idx, column in enumerate(self.columns)) + + +class IndexName(TableColumns): + """Hold a reference to an index name.""" + + def __init__(self, table, columns, suffix, create_index_name): + self.suffix = suffix + self.create_index_name = create_index_name + super().__init__(table, columns) + + def __str__(self): + return self.create_index_name(self.table, self.columns, self.suffix) + + +class ForeignKeyName(TableColumns): + """Hold a reference to a foreign key name.""" + + def __init__(self, from_table, from_columns, to_table, to_columns, suffix_template, create_fk_name): + self.to_reference = TableColumns(to_table, to_columns) + self.suffix_template = suffix_template + self.create_fk_name = create_fk_name + super().__init__(from_table, from_columns,) + + def references_table(self, table): + return super().references_table(table) or self.to_reference.references_table(table) + + def references_column(self, table, column): + return ( + super().references_column(table, column) or + self.to_reference.references_column(table, column) + ) + + def rename_table_references(self, old_table, new_table): + super().rename_table_references(old_table, new_table) + self.to_reference.rename_table_references(old_table, new_table) + + def rename_column_references(self, table, old_column, new_column): + super().rename_column_references(table, old_column, new_column) + self.to_reference.rename_column_references(table, old_column, new_column) + + def __str__(self): + suffix = self.suffix_template % { + 'to_table': self.to_reference.table, + 'to_column': self.to_reference.columns[0], + } + return self.create_fk_name(self.table, self.columns, suffix) + + +class Statement(Reference): + """ + Statement template and formatting parameters container. + + Allows keeping a reference to a statement without interpolating identifiers + that might have to be adjusted if they're referencing a table or column + that is removed + """ + def __init__(self, template, **parts): + self.template = template + self.parts = parts + + def references_table(self, table): + return any( + hasattr(part, 'references_table') and part.references_table(table) + for part in self.parts.values() + ) + + def references_column(self, table, column): + return any( + hasattr(part, 'references_column') and part.references_column(table, column) + for part in self.parts.values() + ) + + def rename_table_references(self, old_table, new_table): + for part in self.parts.values(): + if hasattr(part, 'rename_table_references'): + part.rename_table_references(old_table, new_table) + + def rename_column_references(self, table, old_column, new_column): + for part in self.parts.values(): + if hasattr(part, 'rename_column_references'): + part.rename_column_references(table, old_column, new_column) + + def __str__(self): + return self.template % self.parts diff --git a/env/lib/python3.5/site-packages/django/db/backends/dummy/__init__.py b/env/lib/python3.5/site-packages/django/db/backends/dummy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/db/backends/dummy/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/dummy/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0da054e33990f443c5d3baf46f4ee88b5b5e8d60 GIT binary patch literal 150 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/client.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/client.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..665f5a45275eda1485672bd3ec79623ac602d43b GIT binary patch literal 1717 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/introspection.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/introspection.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dffedbcd2dfd0e9f7b6582c65953ffa3bcca95c6 GIT binary patch literal 7785 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/validation.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/mysql/__pycache__/validation.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a4f8f3893a8e5b31a5e8922ff6c591882344f82 GIT binary patch literal 2567 zcmaJ@O>Y}T7@qZh*l`lb2MXnYG_*v)Qevl(TB#ALl9Yf-(@4}2K`W%ydUtHEvmfrv zY!X}TsR&MpBL{u~M-Kd%y>jYb=mnk`uWd*xHlEqpnRniKKc45EY%DL=_k#WJ?K&ZU zk$*iF#s_HPYjh!g28jtt4B{HZP~R02S4d(K*PMKtB(_Lm6W1ojSD{5hoBRMVn=q5S zf|x@>hqN2j*U(2AM&Sf~7F-C7HjaG3zVM~r!TVc3jzV8XS&EgF9+O^}1;V>zTwpFx zo2QRi4#YkNj3~=sm|Gz~5z@sNzY6&gGbRb~vy?rqHVl@iv8^OwQnB{->48ydSEs19 zh$gntNkU!`GBC&sgZxa$%L;i>Ap`W7G|S0X2oh%74db+76}HHSj2E`{xNz9DWNBEu z@9A$(JdeF33t7V~EWzS#;apt#yeC{I5+Y|RLJOW3#J&)o_d9uW+>*(#HH?Nkoji)e zopj(m2=^{zD;)S~FPptOt&SgD;3UyXMmVH(ISXxbIO0{fqMC5f5o68RFvhpujzd!$ zIg5r3*=4jRXyP|?%4;1B#N-z`j|QS&1_43A+Dnt1BRk(b`%YTqg-Q6S>XD$22DVBM zgj17r5nF@2gaq=WQ`N7K1Mw@74jEJxg39x1WFy3PjmQP19qHZ(7f4vg_Datn?Vd{P z;^}y`eSC8K=!_m5OvB7oV&53s?t1&|+2coN-r2Lm)3$eZcyw~yc2~>E!;_P8YW(2o zsQt|eZA%^nl0HSIXe4NwNh+A6-HcPsyftPM=imk%xN2&A)PSiTK#DBDO zqiZH;;-@36fkKw`cqB)3$g@t&5`ihIcWzUW2Yu>`iKOIt8fcQxe2BxMR4}fN-KL!p zWg_rntfoB*Afx_#UsjDkR=I#!a_RAa_Yl_OJBlG*`#g8 z_Gw?rq1bP=6cw8jn8CyWTy0`&i>0ki(c-Mznnpsj?r6;IAnH2`+(jh{$8|l|Jm1~j zYt)PSJX$CQITsl(s_dEtxnypw%Vf~cQdXFVG8iV zMA~G4+NsHa?VtdF50pdFQ0l6L|DlhmDIzF(ERaE+TsV4ureaZ%1=f@_L0vADEkc>8 zm6@Q-l5YX6by_|X==Xs;*=N9d9A{SwSKWxkA&ptulYQU^Py#oAzx~i zwWK-QH?cd+m`Jz4(|kD0xWr*oe9rfYEMX<7Mnfj%D%@&m^y%xrkm26Qh=fr_Idd8nlWpCbpIEJsC<&GDknt7x9z zy}#F3D(XV|T#Bnm_6uj?X;GhhRhXzMh2sy0s2vk-+Q+KIxV5n3X`>1oK|dsV`tiEZNj5T{{m8-eaM%7)MR8y2u&U6Uf+vQByX-@BN3@&GH{4T@AJNxiRyqSJXbAIPy?kg4&)Hl)Dx4A1PX}J^%m! literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/base.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/base.py new file mode 100644 index 0000000..fcc6a91 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/base.py @@ -0,0 +1,344 @@ +""" +MySQL database backend for Django. + +Requires mysqlclient: https://pypi.org/project/mysqlclient/ +""" +import re + +from django.core.exceptions import ImproperlyConfigured +from django.db import utils +from django.db.backends import utils as backend_utils +from django.db.backends.base.base import BaseDatabaseWrapper +from django.utils.functional import cached_property + +try: + import MySQLdb as Database +except ImportError as err: + raise ImproperlyConfigured( + 'Error loading MySQLdb module.\n' + 'Did you install mysqlclient?' + ) from err + +from MySQLdb.constants import CLIENT, FIELD_TYPE # isort:skip +from MySQLdb.converters import conversions # isort:skip + +# Some of these import MySQLdb, so import them after checking if it's installed. +from .client import DatabaseClient # isort:skip +from .creation import DatabaseCreation # isort:skip +from .features import DatabaseFeatures # isort:skip +from .introspection import DatabaseIntrospection # isort:skip +from .operations import DatabaseOperations # isort:skip +from .schema import DatabaseSchemaEditor # isort:skip +from .validation import DatabaseValidation # isort:skip + +version = Database.version_info +if version < (1, 3, 7): + raise ImproperlyConfigured('mysqlclient 1.3.7 or newer is required; you have %s.' % Database.__version__) + + +# MySQLdb returns TIME columns as timedelta -- they are more like timedelta in +# terms of actual behavior as they are signed and include days -- and Django +# expects time. +django_conversions = { + **conversions, + **{FIELD_TYPE.TIME: backend_utils.typecast_time}, +} + +# This should match the numerical portion of the version numbers (we can treat +# versions like 5.0.24 and 5.0.24a as the same). +server_version_re = re.compile(r'(\d{1,2})\.(\d{1,2})\.(\d{1,2})') + + +class CursorWrapper: + """ + A thin wrapper around MySQLdb's normal cursor class that catches particular + exception instances and reraises them with the correct types. + + Implemented as a wrapper, rather than a subclass, so that it isn't stuck + to the particular underlying representation returned by Connection.cursor(). + """ + codes_for_integrityerror = ( + 1048, # Column cannot be null + 1690, # BIGINT UNSIGNED value is out of range + ) + + def __init__(self, cursor): + self.cursor = cursor + + def execute(self, query, args=None): + try: + # args is None means no string interpolation + return self.cursor.execute(query, args) + except Database.OperationalError as e: + # Map some error codes to IntegrityError, since they seem to be + # misclassified and Django would prefer the more logical place. + if e.args[0] in self.codes_for_integrityerror: + raise utils.IntegrityError(*tuple(e.args)) + raise + + def executemany(self, query, args): + try: + return self.cursor.executemany(query, args) + except Database.OperationalError as e: + # Map some error codes to IntegrityError, since they seem to be + # misclassified and Django would prefer the more logical place. + if e.args[0] in self.codes_for_integrityerror: + raise utils.IntegrityError(*tuple(e.args)) + raise + + def __getattr__(self, attr): + return getattr(self.cursor, attr) + + def __iter__(self): + return iter(self.cursor) + + +class DatabaseWrapper(BaseDatabaseWrapper): + vendor = 'mysql' + display_name = 'MySQL' + # This dictionary maps Field objects to their associated MySQL column + # types, as strings. Column-type strings can contain format strings; they'll + # be interpolated against the values of Field.__dict__ before being output. + # If a column type is set to None, it won't be included in the output. + data_types = { + 'AutoField': 'integer AUTO_INCREMENT', + 'BigAutoField': 'bigint AUTO_INCREMENT', + 'BinaryField': 'longblob', + 'BooleanField': 'bool', + 'CharField': 'varchar(%(max_length)s)', + 'DateField': 'date', + 'DateTimeField': 'datetime(6)', + 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', + 'DurationField': 'bigint', + 'FileField': 'varchar(%(max_length)s)', + 'FilePathField': 'varchar(%(max_length)s)', + 'FloatField': 'double precision', + 'IntegerField': 'integer', + 'BigIntegerField': 'bigint', + 'IPAddressField': 'char(15)', + 'GenericIPAddressField': 'char(39)', + 'NullBooleanField': 'bool', + 'OneToOneField': 'integer', + 'PositiveIntegerField': 'integer UNSIGNED', + 'PositiveSmallIntegerField': 'smallint UNSIGNED', + 'SlugField': 'varchar(%(max_length)s)', + 'SmallIntegerField': 'smallint', + 'TextField': 'longtext', + 'TimeField': 'time(6)', + 'UUIDField': 'char(32)', + } + + # For these columns, MySQL doesn't: + # - accept default values and implicitly treats these columns as nullable + # - support a database index + _limited_data_types = ( + 'tinyblob', 'blob', 'mediumblob', 'longblob', 'tinytext', 'text', + 'mediumtext', 'longtext', 'json', + ) + + operators = { + 'exact': '= %s', + 'iexact': 'LIKE %s', + 'contains': 'LIKE BINARY %s', + 'icontains': 'LIKE %s', + 'gt': '> %s', + 'gte': '>= %s', + 'lt': '< %s', + 'lte': '<= %s', + 'startswith': 'LIKE BINARY %s', + 'endswith': 'LIKE BINARY %s', + 'istartswith': 'LIKE %s', + 'iendswith': 'LIKE %s', + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\\', '\\\\'), '%%', '\%%'), '_', '\_')" + pattern_ops = { + 'contains': "LIKE BINARY CONCAT('%%', {}, '%%')", + 'icontains': "LIKE CONCAT('%%', {}, '%%')", + 'startswith': "LIKE BINARY CONCAT({}, '%%')", + 'istartswith': "LIKE CONCAT({}, '%%')", + 'endswith': "LIKE BINARY CONCAT('%%', {})", + 'iendswith': "LIKE CONCAT('%%', {})", + } + + isolation_levels = { + 'read uncommitted', + 'read committed', + 'repeatable read', + 'serializable', + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + validation_class = DatabaseValidation + + def get_connection_params(self): + kwargs = { + 'conv': django_conversions, + 'charset': 'utf8', + } + settings_dict = self.settings_dict + if settings_dict['USER']: + kwargs['user'] = settings_dict['USER'] + if settings_dict['NAME']: + kwargs['db'] = settings_dict['NAME'] + if settings_dict['PASSWORD']: + kwargs['passwd'] = settings_dict['PASSWORD'] + if settings_dict['HOST'].startswith('/'): + kwargs['unix_socket'] = settings_dict['HOST'] + elif settings_dict['HOST']: + kwargs['host'] = settings_dict['HOST'] + if settings_dict['PORT']: + kwargs['port'] = int(settings_dict['PORT']) + # We need the number of potentially affected rows after an + # "UPDATE", not the number of changed rows. + kwargs['client_flag'] = CLIENT.FOUND_ROWS + # Validate the transaction isolation level, if specified. + options = settings_dict['OPTIONS'].copy() + isolation_level = options.pop('isolation_level', 'read committed') + if isolation_level: + isolation_level = isolation_level.lower() + if isolation_level not in self.isolation_levels: + raise ImproperlyConfigured( + "Invalid transaction isolation level '%s' specified.\n" + "Use one of %s, or None." % ( + isolation_level, + ', '.join("'%s'" % s for s in sorted(self.isolation_levels)) + )) + self.isolation_level = isolation_level + kwargs.update(options) + return kwargs + + def get_new_connection(self, conn_params): + return Database.connect(**conn_params) + + def init_connection_state(self): + assignments = [] + if self.features.is_sql_auto_is_null_enabled: + # SQL_AUTO_IS_NULL controls whether an AUTO_INCREMENT column on + # a recently inserted row will return when the field is tested + # for NULL. Disabling this brings this aspect of MySQL in line + # with SQL standards. + assignments.append('SET SQL_AUTO_IS_NULL = 0') + + if self.isolation_level: + assignments.append('SET SESSION TRANSACTION ISOLATION LEVEL %s' % self.isolation_level.upper()) + + if assignments: + with self.cursor() as cursor: + cursor.execute('; '.join(assignments)) + + def create_cursor(self, name=None): + cursor = self.connection.cursor() + return CursorWrapper(cursor) + + def _rollback(self): + try: + BaseDatabaseWrapper._rollback(self) + except Database.NotSupportedError: + pass + + def _set_autocommit(self, autocommit): + with self.wrap_database_errors: + self.connection.autocommit(autocommit) + + def disable_constraint_checking(self): + """ + Disable foreign key checks, primarily for use in adding rows with + forward references. Always return True to indicate constraint checks + need to be re-enabled. + """ + self.cursor().execute('SET foreign_key_checks=0') + return True + + def enable_constraint_checking(self): + """ + Re-enable foreign key checks after they have been disabled. + """ + # Override needs_rollback in case constraint_checks_disabled is + # nested inside transaction.atomic. + self.needs_rollback, needs_rollback = False, self.needs_rollback + try: + self.cursor().execute('SET foreign_key_checks=1') + finally: + self.needs_rollback = needs_rollback + + def check_constraints(self, table_names=None): + """ + Check each table name in `table_names` for rows with invalid foreign + key references. This method is intended to be used in conjunction with + `disable_constraint_checking()` and `enable_constraint_checking()`, to + determine if rows with invalid references were entered while constraint + checks were off. + """ + with self.cursor() as cursor: + if table_names is None: + table_names = self.introspection.table_names(cursor) + for table_name in table_names: + primary_key_column_name = self.introspection.get_primary_key_column(cursor, table_name) + if not primary_key_column_name: + continue + key_columns = self.introspection.get_key_columns(cursor, table_name) + for column_name, referenced_table_name, referenced_column_name in key_columns: + cursor.execute( + """ + SELECT REFERRING.`%s`, REFERRING.`%s` FROM `%s` as REFERRING + LEFT JOIN `%s` as REFERRED + ON (REFERRING.`%s` = REFERRED.`%s`) + WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL + """ % ( + primary_key_column_name, column_name, table_name, + referenced_table_name, column_name, referenced_column_name, + column_name, referenced_column_name, + ) + ) + for bad_row in cursor.fetchall(): + raise utils.IntegrityError( + "The row in table '%s' with primary key '%s' has an invalid " + "foreign key: %s.%s contains a value '%s' that does not " + "have a corresponding value in %s.%s." + % ( + table_name, bad_row[0], table_name, column_name, + bad_row[1], referenced_table_name, referenced_column_name, + ) + ) + + def is_usable(self): + try: + self.connection.ping() + except Database.Error: + return False + else: + return True + + @cached_property + def mysql_server_info(self): + with self.temporary_connection() as cursor: + cursor.execute('SELECT VERSION()') + return cursor.fetchone()[0] + + @cached_property + def mysql_version(self): + match = server_version_re.match(self.mysql_server_info) + if not match: + raise Exception('Unable to determine MySQL version from version string %r' % self.mysql_server_info) + return tuple(int(x) for x in match.groups()) + + @cached_property + def mysql_is_mariadb(self): + # MariaDB isn't officially supported. + return 'mariadb' in self.mysql_server_info.lower() diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/client.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/client.py new file mode 100644 index 0000000..224bfc3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/client.py @@ -0,0 +1,48 @@ +import subprocess + +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = 'mysql' + + @classmethod + def settings_to_cmd_args(cls, settings_dict): + args = [cls.executable_name] + db = settings_dict['OPTIONS'].get('db', settings_dict['NAME']) + user = settings_dict['OPTIONS'].get('user', settings_dict['USER']) + passwd = settings_dict['OPTIONS'].get('passwd', settings_dict['PASSWORD']) + host = settings_dict['OPTIONS'].get('host', settings_dict['HOST']) + port = settings_dict['OPTIONS'].get('port', settings_dict['PORT']) + server_ca = settings_dict['OPTIONS'].get('ssl', {}).get('ca') + client_cert = settings_dict['OPTIONS'].get('ssl', {}).get('cert') + client_key = settings_dict['OPTIONS'].get('ssl', {}).get('key') + defaults_file = settings_dict['OPTIONS'].get('read_default_file') + # Seems to be no good way to set sql_mode with CLI. + + if defaults_file: + args += ["--defaults-file=%s" % defaults_file] + if user: + args += ["--user=%s" % user] + if passwd: + args += ["--password=%s" % passwd] + if host: + if '/' in host: + args += ["--socket=%s" % host] + else: + args += ["--host=%s" % host] + if port: + args += ["--port=%s" % port] + if server_ca: + args += ["--ssl-ca=%s" % server_ca] + if client_cert: + args += ["--ssl-cert=%s" % client_cert] + if client_key: + args += ["--ssl-key=%s" % client_key] + if db: + args += [db] + return args + + def runshell(self): + args = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict) + subprocess.check_call(args) diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/compiler.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/compiler.py new file mode 100644 index 0000000..fc74ac1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/compiler.py @@ -0,0 +1,25 @@ +from django.db.models.sql import compiler + + +class SQLCompiler(compiler.SQLCompiler): + def as_subquery_condition(self, alias, columns, compiler): + qn = compiler.quote_name_unless_alias + qn2 = self.connection.ops.quote_name + sql, params = self.as_sql() + return '(%s) IN (%s)' % (', '.join('%s.%s' % (qn(alias), qn2(column)) for column in columns), sql), params + + +class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler): + pass + + +class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler): + pass + + +class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler): + pass + + +class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler): + pass diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/creation.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/creation.py new file mode 100644 index 0000000..d0f02fe --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/creation.py @@ -0,0 +1,67 @@ +import subprocess +import sys + +from django.db.backends.base.creation import BaseDatabaseCreation + +from .client import DatabaseClient + + +class DatabaseCreation(BaseDatabaseCreation): + + def sql_table_creation_suffix(self): + suffix = [] + test_settings = self.connection.settings_dict['TEST'] + if test_settings['CHARSET']: + suffix.append('CHARACTER SET %s' % test_settings['CHARSET']) + if test_settings['COLLATION']: + suffix.append('COLLATE %s' % test_settings['COLLATION']) + return ' '.join(suffix) + + def _execute_create_test_db(self, cursor, parameters, keepdb=False): + try: + super()._execute_create_test_db(cursor, parameters, keepdb) + except Exception as e: + if len(e.args) < 1 or e.args[0] != 1007: + # All errors except "database exists" (1007) cancel tests. + sys.stderr.write('Got an error creating the test database: %s\n' % e) + sys.exit(2) + else: + raise e + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + source_database_name = self.connection.settings_dict['NAME'] + target_database_name = self.get_test_db_clone_settings(suffix)['NAME'] + test_db_params = { + 'dbname': self.connection.ops.quote_name(target_database_name), + 'suffix': self.sql_table_creation_suffix(), + } + with self._nodb_connection.cursor() as cursor: + try: + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception: + if keepdb: + # If the database should be kept, skip everything else. + return + try: + if verbosity >= 1: + print("Destroying old test database for alias %s..." % ( + self._get_database_display_str(verbosity, target_database_name), + )) + cursor.execute('DROP DATABASE %(dbname)s' % test_db_params) + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + sys.stderr.write("Got an error recreating the test database: %s\n" % e) + sys.exit(2) + self._clone_db(source_database_name, target_database_name) + + def _clone_db(self, source_database_name, target_database_name): + dump_cmd = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict) + dump_cmd[0] = 'mysqldump' + dump_cmd[-1] = source_database_name + load_cmd = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict) + load_cmd[-1] = target_database_name + + dump_proc = subprocess.Popen(dump_cmd, stdout=subprocess.PIPE) + load_proc = subprocess.Popen(load_cmd, stdin=dump_proc.stdout, stdout=subprocess.PIPE) + dump_proc.stdout.close() # allow dump_proc to receive a SIGPIPE if load_proc exits. + load_proc.communicate() diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/features.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/features.py new file mode 100644 index 0000000..56370bf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/features.py @@ -0,0 +1,108 @@ +from django.db.backends.base.features import BaseDatabaseFeatures +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + empty_fetchmany_value = () + update_can_self_select = False + allows_group_by_pk = True + related_fields_match_type = True + # MySQL doesn't support sliced subqueries with IN/ALL/ANY/SOME. + allow_sliced_subqueries_with_in = False + has_select_for_update = True + supports_forward_references = False + supports_regex_backreferencing = False + supports_date_lookup_using_string = False + can_introspect_autofield = True + can_introspect_binary_field = False + can_introspect_small_integer_field = True + can_introspect_positive_integer_field = True + introspected_boolean_field_type = 'IntegerField' + supports_index_column_ordering = False + supports_timezones = False + requires_explicit_null_ordering_when_grouping = True + allows_auto_pk_0 = False + uses_savepoints = True + can_release_savepoints = True + atomic_transactions = False + supports_column_check_constraints = False + can_clone_databases = True + supports_temporal_subtraction = True + supports_select_intersection = False + supports_select_difference = False + supports_slicing_ordering_in_compound = True + supports_index_on_text_field = False + has_case_insensitive_like = False + create_test_procedure_without_params_sql = """ + CREATE PROCEDURE test_procedure () + BEGIN + DECLARE V_I INTEGER; + SET V_I = 1; + END; + """ + create_test_procedure_with_int_param_sql = """ + CREATE PROCEDURE test_procedure (P_I INTEGER) + BEGIN + DECLARE V_I INTEGER; + SET V_I = P_I; + END; + """ + db_functions_convert_bytes_to_str = True + # Alias MySQL's TRADITIONAL to TEXT for consistency with other backends. + supported_explain_formats = {'JSON', 'TEXT', 'TRADITIONAL'} + + @cached_property + def _mysql_storage_engine(self): + "Internal method used in Django tests. Don't rely on this from your code" + with self.connection.cursor() as cursor: + cursor.execute("SELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT = 'DEFAULT'") + result = cursor.fetchone() + return result[0] + + @cached_property + def can_introspect_foreign_keys(self): + "Confirm support for introspected foreign keys" + return self._mysql_storage_engine != 'MyISAM' + + @cached_property + def has_zoneinfo_database(self): + # Test if the time zone definitions are installed. + with self.connection.cursor() as cursor: + cursor.execute("SELECT 1 FROM mysql.time_zone LIMIT 1") + return cursor.fetchone() is not None + + @cached_property + def is_sql_auto_is_null_enabled(self): + with self.connection.cursor() as cursor: + cursor.execute('SELECT @@SQL_AUTO_IS_NULL') + result = cursor.fetchone() + return result and result[0] == 1 + + @cached_property + def supports_over_clause(self): + return self.connection.mysql_version >= (8, 0, 2) + + @cached_property + def has_select_for_update_skip_locked(self): + return self.connection.mysql_version >= (8, 0, 1) + + has_select_for_update_nowait = has_select_for_update_skip_locked + + @cached_property + def needs_explain_extended(self): + # EXTENDED is deprecated (and not required) in 5.7 and removed in 8.0. + return self.connection.mysql_version < (5, 7) + + @cached_property + def supports_transactions(self): + """ + All storage engines except MyISAM support transactions. + """ + return self._mysql_storage_engine != 'MyISAM' + + @cached_property + def ignores_table_name_case(self): + with self.connection.cursor() as cursor: + cursor.execute('SELECT @@LOWER_CASE_TABLE_NAMES') + result = cursor.fetchone() + return result and result[0] != 0 diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/introspection.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/introspection.py new file mode 100644 index 0000000..9520e89 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/introspection.py @@ -0,0 +1,208 @@ +from collections import namedtuple + +from MySQLdb.constants import FIELD_TYPE + +from django.db.backends.base.introspection import ( + BaseDatabaseIntrospection, FieldInfo, TableInfo, +) +from django.db.models.indexes import Index +from django.utils.datastructures import OrderedSet + +FieldInfo = namedtuple('FieldInfo', FieldInfo._fields + ('extra', 'is_unsigned')) +InfoLine = namedtuple('InfoLine', 'col_name data_type max_len num_prec num_scale extra column_default is_unsigned') + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + data_types_reverse = { + FIELD_TYPE.BLOB: 'TextField', + FIELD_TYPE.CHAR: 'CharField', + FIELD_TYPE.DECIMAL: 'DecimalField', + FIELD_TYPE.NEWDECIMAL: 'DecimalField', + FIELD_TYPE.DATE: 'DateField', + FIELD_TYPE.DATETIME: 'DateTimeField', + FIELD_TYPE.DOUBLE: 'FloatField', + FIELD_TYPE.FLOAT: 'FloatField', + FIELD_TYPE.INT24: 'IntegerField', + FIELD_TYPE.LONG: 'IntegerField', + FIELD_TYPE.LONGLONG: 'BigIntegerField', + FIELD_TYPE.SHORT: 'SmallIntegerField', + FIELD_TYPE.STRING: 'CharField', + FIELD_TYPE.TIME: 'TimeField', + FIELD_TYPE.TIMESTAMP: 'DateTimeField', + FIELD_TYPE.TINY: 'IntegerField', + FIELD_TYPE.TINY_BLOB: 'TextField', + FIELD_TYPE.MEDIUM_BLOB: 'TextField', + FIELD_TYPE.LONG_BLOB: 'TextField', + FIELD_TYPE.VAR_STRING: 'CharField', + } + + def get_field_type(self, data_type, description): + field_type = super().get_field_type(data_type, description) + if 'auto_increment' in description.extra: + if field_type == 'IntegerField': + return 'AutoField' + elif field_type == 'BigIntegerField': + return 'BigAutoField' + if description.is_unsigned: + if field_type == 'IntegerField': + return 'PositiveIntegerField' + elif field_type == 'SmallIntegerField': + return 'PositiveSmallIntegerField' + return field_type + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + cursor.execute("SHOW FULL TABLES") + return [TableInfo(row[0], {'BASE TABLE': 't', 'VIEW': 'v'}.get(row[1])) + for row in cursor.fetchall()] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface." + """ + # information_schema database gives more accurate results for some figures: + # - varchar length returned by cursor.description is an internal length, + # not visible length (#5725) + # - precision and scale (for decimal fields) (#5014) + # - auto_increment is not available in cursor.description + cursor.execute(""" + SELECT + column_name, data_type, character_maximum_length, + numeric_precision, numeric_scale, extra, column_default, + CASE + WHEN column_type LIKE '%% unsigned' THEN 1 + ELSE 0 + END AS is_unsigned + FROM information_schema.columns + WHERE table_name = %s AND table_schema = DATABASE()""", [table_name]) + field_info = {line[0]: InfoLine(*line) for line in cursor.fetchall()} + + cursor.execute("SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name)) + + def to_int(i): + return int(i) if i is not None else i + + fields = [] + for line in cursor.description: + info = field_info[line[0]] + fields.append(FieldInfo( + *line[:3], + to_int(info.max_len) or line[3], + to_int(info.num_prec) or line[4], + to_int(info.num_scale) or line[5], + line[6], + info.column_default, + info.extra, + info.is_unsigned, + )) + return fields + + def get_sequences(self, cursor, table_name, table_fields=()): + for field_info in self.get_table_description(cursor, table_name): + if 'auto_increment' in field_info.extra: + # MySQL allows only one auto-increment column per table. + return [{'table': table_name, 'column': field_info.name}] + return [] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + constraints = self.get_key_columns(cursor, table_name) + relations = {} + for my_fieldname, other_table, other_field in constraints: + relations[my_fieldname] = (other_field, other_table) + return relations + + def get_key_columns(self, cursor, table_name): + """ + Return a list of (column_name, referenced_table_name, referenced_column_name) + for all key columns in the given table. + """ + key_columns = [] + cursor.execute(""" + SELECT column_name, referenced_table_name, referenced_column_name + FROM information_schema.key_column_usage + WHERE table_name = %s + AND table_schema = DATABASE() + AND referenced_table_name IS NOT NULL + AND referenced_column_name IS NOT NULL""", [table_name]) + key_columns.extend(cursor.fetchall()) + return key_columns + + def get_storage_engine(self, cursor, table_name): + """ + Retrieve the storage engine for a given table. Return the default + storage engine if the table doesn't exist. + """ + cursor.execute( + "SELECT engine " + "FROM information_schema.tables " + "WHERE table_name = %s", [table_name]) + result = cursor.fetchone() + if not result: + return self.connection.features._mysql_storage_engine + return result[0] + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. + """ + constraints = {} + # Get the actual constraint names and columns + name_query = """ + SELECT kc.`constraint_name`, kc.`column_name`, + kc.`referenced_table_name`, kc.`referenced_column_name` + FROM information_schema.key_column_usage AS kc + WHERE + kc.table_schema = DATABASE() AND + kc.table_name = %s + """ + cursor.execute(name_query, [table_name]) + for constraint, column, ref_table, ref_column in cursor.fetchall(): + if constraint not in constraints: + constraints[constraint] = { + 'columns': OrderedSet(), + 'primary_key': False, + 'unique': False, + 'index': False, + 'check': False, + 'foreign_key': (ref_table, ref_column) if ref_column else None, + } + constraints[constraint]['columns'].add(column) + # Now get the constraint types + type_query = """ + SELECT c.constraint_name, c.constraint_type + FROM information_schema.table_constraints AS c + WHERE + c.table_schema = DATABASE() AND + c.table_name = %s + """ + cursor.execute(type_query, [table_name]) + for constraint, kind in cursor.fetchall(): + if kind.lower() == "primary key": + constraints[constraint]['primary_key'] = True + constraints[constraint]['unique'] = True + elif kind.lower() == "unique": + constraints[constraint]['unique'] = True + # Now add in the indexes + cursor.execute("SHOW INDEX FROM %s" % self.connection.ops.quote_name(table_name)) + for table, non_unique, index, colseq, column, type_ in [x[:5] + (x[10],) for x in cursor.fetchall()]: + if index not in constraints: + constraints[index] = { + 'columns': OrderedSet(), + 'primary_key': False, + 'unique': False, + 'check': False, + 'foreign_key': None, + } + constraints[index]['index'] = True + constraints[index]['type'] = Index.suffix if type_ == 'BTREE' else type_.lower() + constraints[index]['columns'].add(column) + # Convert the sorted sets to lists + for constraint in constraints.values(): + constraint['columns'] = list(constraint['columns']) + return constraints diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/operations.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/operations.py new file mode 100644 index 0000000..970e642 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/operations.py @@ -0,0 +1,295 @@ +import uuid + +from django.conf import settings +from django.db.backends.base.operations import BaseDatabaseOperations +from django.utils import timezone +from django.utils.duration import duration_microseconds +from django.utils.encoding import force_text + + +class DatabaseOperations(BaseDatabaseOperations): + compiler_module = "django.db.backends.mysql.compiler" + + # MySQL stores positive fields as UNSIGNED ints. + integer_field_ranges = { + **BaseDatabaseOperations.integer_field_ranges, + 'PositiveSmallIntegerField': (0, 65535), + 'PositiveIntegerField': (0, 4294967295), + } + cast_data_types = { + 'CharField': 'char(%(max_length)s)', + 'TextField': 'char', + 'IntegerField': 'signed integer', + 'BigIntegerField': 'signed integer', + 'SmallIntegerField': 'signed integer', + 'PositiveIntegerField': 'unsigned integer', + 'PositiveSmallIntegerField': 'unsigned integer', + } + cast_char_field_without_max_length = 'char' + explain_prefix = 'EXPLAIN' + + def date_extract_sql(self, lookup_type, field_name): + # https://dev.mysql.com/doc/mysql/en/date-and-time-functions.html + if lookup_type == 'week_day': + # DAYOFWEEK() returns an integer, 1-7, Sunday=1. + # Note: WEEKDAY() returns 0-6, Monday=0. + return "DAYOFWEEK(%s)" % field_name + elif lookup_type == 'week': + # Override the value of default_week_format for consistency with + # other database backends. + # Mode 3: Monday, 1-53, with 4 or more days this year. + return "WEEK(%s, 3)" % field_name + else: + # EXTRACT returns 1-53 based on ISO-8601 for the week number. + return "EXTRACT(%s FROM %s)" % (lookup_type.upper(), field_name) + + def date_trunc_sql(self, lookup_type, field_name): + fields = { + 'year': '%%Y-01-01', + 'month': '%%Y-%%m-01', + } # Use double percents to escape. + if lookup_type in fields: + format_str = fields[lookup_type] + return "CAST(DATE_FORMAT(%s, '%s') AS DATE)" % (field_name, format_str) + elif lookup_type == 'quarter': + return "MAKEDATE(YEAR(%s), 1) + INTERVAL QUARTER(%s) QUARTER - INTERVAL 1 QUARTER" % ( + field_name, field_name + ) + elif lookup_type == 'week': + return "DATE_SUB(%s, INTERVAL WEEKDAY(%s) DAY)" % ( + field_name, field_name + ) + else: + return "DATE(%s)" % (field_name) + + def _convert_field_to_tz(self, field_name, tzname): + if settings.USE_TZ: + field_name = "CONVERT_TZ(%s, 'UTC', '%s')" % (field_name, tzname) + return field_name + + def datetime_cast_date_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "DATE(%s)" % field_name + + def datetime_cast_time_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return "TIME(%s)" % field_name + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return self.date_extract_sql(lookup_type, field_name) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + fields = ['year', 'month', 'day', 'hour', 'minute', 'second'] + format = ('%%Y-', '%%m', '-%%d', ' %%H:', '%%i', ':%%s') # Use double percents to escape. + format_def = ('0000-', '01', '-01', ' 00:', '00', ':00') + if lookup_type == 'quarter': + return ( + "CAST(DATE_FORMAT(MAKEDATE(YEAR({field_name}), 1) + " + "INTERVAL QUARTER({field_name}) QUARTER - " + + "INTERVAL 1 QUARTER, '%%Y-%%m-01 00:00:00') AS DATETIME)" + ).format(field_name=field_name) + if lookup_type == 'week': + return ( + "CAST(DATE_FORMAT(DATE_SUB({field_name}, " + "INTERVAL WEEKDAY({field_name}) DAY), " + "'%%Y-%%m-%%d 00:00:00') AS DATETIME)" + ).format(field_name=field_name) + try: + i = fields.index(lookup_type) + 1 + except ValueError: + sql = field_name + else: + format_str = ''.join([f for f in format[:i]] + [f for f in format_def[i:]]) + sql = "CAST(DATE_FORMAT(%s, '%s') AS DATETIME)" % (field_name, format_str) + return sql + + def time_trunc_sql(self, lookup_type, field_name): + fields = { + 'hour': '%%H:00:00', + 'minute': '%%H:%%i:00', + 'second': '%%H:%%i:%%s', + } # Use double percents to escape. + if lookup_type in fields: + format_str = fields[lookup_type] + return "CAST(DATE_FORMAT(%s, '%s') AS TIME)" % (field_name, format_str) + else: + return "TIME(%s)" % (field_name) + + def date_interval_sql(self, timedelta): + return 'INTERVAL %s MICROSECOND' % duration_microseconds(timedelta) + + def format_for_duration_arithmetic(self, sql): + return 'INTERVAL %s MICROSECOND' % sql + + def force_no_ordering(self): + """ + "ORDER BY NULL" prevents MySQL from implicitly ordering by grouped + columns. If no ordering would otherwise be applied, we don't want any + implicit sorting going on. + """ + return [(None, ("NULL", [], False))] + + def last_executed_query(self, cursor, sql, params): + # With MySQLdb, cursor objects have an (undocumented) "_executed" + # attribute where the exact query sent to the database is saved. + # See MySQLdb/cursors.py in the source distribution. + return force_text(getattr(cursor, '_executed', None), errors='replace') + + def no_limit_value(self): + # 2**64 - 1, as recommended by the MySQL documentation + return 18446744073709551615 + + def quote_name(self, name): + if name.startswith("`") and name.endswith("`"): + return name # Quoting once is enough. + return "`%s`" % name + + def random_function_sql(self): + return 'RAND()' + + def sql_flush(self, style, tables, sequences, allow_cascade=False): + # NB: The generated SQL below is specific to MySQL + # 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements + # to clear all tables of all data + if tables: + sql = ['SET FOREIGN_KEY_CHECKS = 0;'] + for table in tables: + sql.append('%s %s;' % ( + style.SQL_KEYWORD('TRUNCATE'), + style.SQL_FIELD(self.quote_name(table)), + )) + sql.append('SET FOREIGN_KEY_CHECKS = 1;') + sql.extend(self.sequence_reset_by_name_sql(style, sequences)) + return sql + else: + return [] + + def validate_autopk_value(self, value): + # MySQLism: zero in AUTO_INCREMENT field does not work. Refs #17653. + if value == 0: + raise ValueError('The database backend does not accept 0 as a ' + 'value for AutoField.') + return value + + def adapt_datetimefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, 'resolve_expression'): + return value + + # MySQL doesn't support tz-aware datetimes + if timezone.is_aware(value): + if settings.USE_TZ: + value = timezone.make_naive(value, self.connection.timezone) + else: + raise ValueError("MySQL backend does not support timezone-aware datetimes when USE_TZ is False.") + return str(value) + + def adapt_timefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, 'resolve_expression'): + return value + + # MySQL doesn't support tz-aware times + if timezone.is_aware(value): + raise ValueError("MySQL backend does not support timezone-aware times.") + + return str(value) + + def max_name_length(self): + return 64 + + def bulk_insert_sql(self, fields, placeholder_rows): + placeholder_rows_sql = (", ".join(row) for row in placeholder_rows) + values_sql = ", ".join("(%s)" % sql for sql in placeholder_rows_sql) + return "VALUES " + values_sql + + def combine_expression(self, connector, sub_expressions): + if connector == '^': + return 'POW(%s)' % ','.join(sub_expressions) + # Convert the result to a signed integer since MySQL's binary operators + # return an unsigned integer. + elif connector in ('&', '|', '<<'): + return 'CONVERT(%s, SIGNED)' % connector.join(sub_expressions) + elif connector == '>>': + lhs, rhs = sub_expressions + return 'FLOOR(%(lhs)s / POW(2, %(rhs)s))' % {'lhs': lhs, 'rhs': rhs} + return super().combine_expression(connector, sub_expressions) + + def get_db_converters(self, expression): + converters = super().get_db_converters(expression) + internal_type = expression.output_field.get_internal_type() + if internal_type == 'TextField': + converters.append(self.convert_textfield_value) + elif internal_type in ['BooleanField', 'NullBooleanField']: + converters.append(self.convert_booleanfield_value) + elif internal_type == 'DateTimeField': + if settings.USE_TZ: + converters.append(self.convert_datetimefield_value) + elif internal_type == 'UUIDField': + converters.append(self.convert_uuidfield_value) + return converters + + def convert_textfield_value(self, value, expression, connection): + if value is not None: + value = force_text(value) + return value + + def convert_booleanfield_value(self, value, expression, connection): + if value in (0, 1): + value = bool(value) + return value + + def convert_datetimefield_value(self, value, expression, connection): + if value is not None: + value = timezone.make_aware(value, self.connection.timezone) + return value + + def convert_uuidfield_value(self, value, expression, connection): + if value is not None: + value = uuid.UUID(value) + return value + + def binary_placeholder_sql(self, value): + return '_binary %s' if value is not None and not hasattr(value, 'as_sql') else '%s' + + def subtract_temporals(self, internal_type, lhs, rhs): + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + if internal_type == 'TimeField': + return ( + "((TIME_TO_SEC(%(lhs)s) * 1000000 + MICROSECOND(%(lhs)s)) -" + " (TIME_TO_SEC(%(rhs)s) * 1000000 + MICROSECOND(%(rhs)s)))" + ) % {'lhs': lhs_sql, 'rhs': rhs_sql}, lhs_params * 2 + rhs_params * 2 + else: + return "TIMESTAMPDIFF(MICROSECOND, %s, %s)" % (rhs_sql, lhs_sql), rhs_params + lhs_params + + def explain_query_prefix(self, format=None, **options): + # Alias MySQL's TRADITIONAL to TEXT for consistency with other backends. + if format and format.upper() == 'TEXT': + format = 'TRADITIONAL' + prefix = super().explain_query_prefix(format, **options) + if format: + prefix += ' FORMAT=%s' % format + if self.connection.features.needs_explain_extended and format is None: + # EXTENDED and FORMAT are mutually exclusive options. + prefix += ' EXTENDED' + return prefix + + def regex_lookup(self, lookup_type): + # REGEXP BINARY doesn't work correctly in MySQL 8+ and REGEXP_LIKE + # doesn't exist in MySQL 5.6 or in MariaDB. + if self.connection.mysql_version < (8, 0, 0) or self.connection.mysql_is_mariadb: + if lookup_type == 'regex': + return '%s REGEXP BINARY %s' + return '%s REGEXP %s' + + match_option = 'c' if lookup_type == 'regex' else 'i' + return "REGEXP_LIKE(%%s, %%s, '%s')" % match_option diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/schema.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/schema.py new file mode 100644 index 0000000..f969e6e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/schema.py @@ -0,0 +1,101 @@ +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.models import NOT_PROVIDED + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_rename_table = "RENAME TABLE %(old_table)s TO %(new_table)s" + + sql_alter_column_null = "MODIFY %(column)s %(type)s NULL" + sql_alter_column_not_null = "MODIFY %(column)s %(type)s NOT NULL" + sql_alter_column_type = "MODIFY %(column)s %(type)s" + + # No 'CASCADE' which works as a no-op in MySQL but is undocumented + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s" + + sql_rename_column = "ALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)s" + + sql_delete_unique = "ALTER TABLE %(table)s DROP INDEX %(name)s" + + sql_delete_fk = "ALTER TABLE %(table)s DROP FOREIGN KEY %(name)s" + + sql_delete_index = "DROP INDEX %(name)s ON %(table)s" + + sql_create_pk = "ALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)" + sql_delete_pk = "ALTER TABLE %(table)s DROP PRIMARY KEY" + + def quote_value(self, value): + self.connection.ensure_connection() + quoted = self.connection.connection.escape(value, self.connection.connection.encoders) + if isinstance(value, str): + quoted = quoted.decode() + return quoted + + def _is_limited_data_type(self, field): + db_type = field.db_type(self.connection) + return db_type is not None and db_type.lower() in self.connection._limited_data_types + + def skip_default(self, field): + return self._is_limited_data_type(field) + + def add_field(self, model, field): + super().add_field(model, field) + + # Simulate the effect of a one-off default. + # field.default may be unhashable, so a set isn't used for "in" check. + if self.skip_default(field) and field.default not in (None, NOT_PROVIDED): + effective_default = self.effective_default(field) + self.execute('UPDATE %(table)s SET %(column)s = %%s' % { + 'table': self.quote_name(model._meta.db_table), + 'column': self.quote_name(field.column), + }, [effective_default]) + + def _field_should_be_indexed(self, model, field): + create_index = super()._field_should_be_indexed(model, field) + storage = self.connection.introspection.get_storage_engine( + self.connection.cursor(), model._meta.db_table + ) + # No need to create an index for ForeignKey fields except if + # db_constraint=False because the index from that constraint won't be + # created. + if (storage == "InnoDB" and + create_index and + field.get_internal_type() == 'ForeignKey' and + field.db_constraint): + return False + return not self._is_limited_data_type(field) and create_index + + def _delete_composed_index(self, model, fields, *args): + """ + MySQL can remove an implicit FK index on a field when that field is + covered by another index like a unique_together. "covered" here means + that the more complex index starts like the simpler one. + http://bugs.mysql.com/bug.php?id=37910 / Django ticket #24757 + We check here before removing the [unique|index]_together if we have to + recreate a FK index. + """ + first_field = model._meta.get_field(fields[0]) + if first_field.get_internal_type() == 'ForeignKey': + constraint_names = self._constraint_names(model, [first_field.column], index=True) + if not constraint_names: + self.execute(self._create_index_sql(model, [first_field], suffix="")) + return super()._delete_composed_index(model, fields, *args) + + def _set_field_new_type_null_status(self, field, new_type): + """ + Keep the null property of the old field. If it has changed, it will be + handled separately. + """ + if field.null: + new_type += " NULL" + else: + new_type += " NOT NULL" + return new_type + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + new_type = self._set_field_new_type_null_status(old_field, new_type) + return super()._alter_column_type_sql(model, old_field, new_field, new_type) + + def _rename_field_sql(self, table, old_field, new_field, new_type): + new_type = self._set_field_new_type_null_status(old_field, new_type) + return super()._rename_field_sql(table, old_field, new_field, new_type) diff --git a/env/lib/python3.5/site-packages/django/db/backends/mysql/validation.py b/env/lib/python3.5/site-packages/django/db/backends/mysql/validation.py new file mode 100644 index 0000000..5cd9a42 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/mysql/validation.py @@ -0,0 +1,60 @@ +from django.core import checks +from django.db.backends.base.validation import BaseDatabaseValidation +from django.utils.version import get_docs_version + + +class DatabaseValidation(BaseDatabaseValidation): + def check(self, **kwargs): + issues = super().check(**kwargs) + issues.extend(self._check_sql_mode(**kwargs)) + return issues + + def _check_sql_mode(self, **kwargs): + with self.connection.cursor() as cursor: + cursor.execute("SELECT @@sql_mode") + sql_mode = cursor.fetchone() + modes = set(sql_mode[0].split(',') if sql_mode else ()) + if not (modes & {'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES'}): + return [checks.Warning( + "MySQL Strict Mode is not set for database connection '%s'" % self.connection.alias, + hint="MySQL's Strict Mode fixes many data integrity problems in MySQL, " + "such as data truncation upon insertion, by escalating warnings into " + "errors. It is strongly recommended you activate it. See: " + "https://docs.djangoproject.com/en/%s/ref/databases/#mysql-sql-mode" + % (get_docs_version(),), + id='mysql.W002', + )] + return [] + + def check_field_type(self, field, field_type): + """ + MySQL has the following field length restriction: + No character (varchar) fields can have a length exceeding 255 + characters if they have a unique index on them. + MySQL doesn't support a database index on some data types. + """ + errors = [] + if (field_type.startswith('varchar') and field.unique and + (field.max_length is None or int(field.max_length) > 255)): + errors.append( + checks.Error( + 'MySQL does not allow unique CharFields to have a max_length > 255.', + obj=field, + id='mysql.E001', + ) + ) + + if field.db_index and field_type.lower() in self.connection._limited_data_types: + errors.append( + checks.Warning( + 'MySQL does not support a database index on %s columns.' + % field_type, + hint=( + "An index won't be created. Silence this warning if " + "you don't care about it." + ), + obj=field, + id='fields.W162', + ) + ) + return errors diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__init__.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ab6e41fca2107a266ef34a72feb8edae36a2440 GIT binary patch literal 151 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 CeNTD- literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/client.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/client.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ae6feb3e631b29a250fa5b6dc98332cfbe84c0c GIT binary patch literal 700 zcmY*X!EV$r5FI;iS<)?wdVm`TZaHis?Ewjds;Wie0NP7$5t8NDW}98FliG;{)%H|= zhF|iP6TiTTal)dlm3bc9nfK;7d2xE0F66r}p9sJ&I2a7`3k?4TLE%Hd0F+}+!4TL| zC@GMSDgnjd2c9s{6dn>NafiTlcJv!-VVRL|b}796AUaXud}V5FI~mXRgJN=l;a?+Y z)FDw5>5(V0VUk3Nl0_9{4$mI5l~4SwX-)4X8W~1{7~=}VFA#PBYkUYi0Nj&dIq>fY ztP;4V&?T^DutN(32+Ch)ba_YTpHVH9jkQ{Kbz{pJ|F_`2bG2QCnf|6_kKT;tR%~@h zeP6Y%k=lE#ywP&Qr7$K-0`uB@El(oBzM2WQ@;||)*y5kdqT9AbTetJ7uZ^19HGiuX zo32o6VOP!nsVXWVH`*#+G)_pP3preB-hK}g*IR$1jd>cKA0q&nku!4l^6{1B`}dY; zaKeYyIS(o4+eY>1g@-BUx4kgY6zA>;ncOr&?DYUn;xgWK6!Q#WN{;EUlQ9=J%U7d; lTvhqLb4$G%Hri}mq literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/compiler.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/compiler.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0419e441c2a80c9775ff065e007f2be5292b9980 GIT binary patch literal 2295 zcmb7F%Wm676uo@uWx16d*KL5Hm>4k<8i|BBi=u5BGuK}rHi6p(VyV9t1kKjUG>gTV${?qAc`8zeej(7;%IYqwX*Af^|oCG_yZO$ z3-{mRSNw_##an|AV5EVgfhJ`gLLEj1I0k4hsR7i4cc?aj889^A8Z9Qgq!!SEG8B}- z0){pd91Cqlpe1E1DI0oZwgTG9Kr6~tQMTgTRz%wh(5kXkl?|WHo+|-eg|_|CpBOUO zTDsPXllEjhj(Ngplk=FPvgF63aS$@@ORxDQ)0LNafC~eeB_`?UGH*=vXMi4VRF*&K zGH2AZZ7W@AzdqcX0e1F%LxBJk@mE4hSrj#ZsRr>~m;wy(MkEbR%P`J0I$RkrH9)i= zG2j|~Oi7y&PIc7iZ_&quD+{9E6pjVM0t|~#d-UL$%LpTJD1sdx>8BO0u$m8AmV-*1#O+p#_;lZnej?x_M@3)&Bavmgu9LOVL(#^7|xQBF+WohT2Bl>j{=1GZtm!Wl;zc#Zu*m6Uu0ghtbJ^XEgKLw$haalKr%% zBtH&aFAO}v#AQpx-k8OWK}d8le_>Q2M6i(giHkwFlQESEV>wihQ1H5lL%N=S$|73t zq;R?Z=KJPxlN=wtX`Q?xPro7C^zx+LJZ$cD$PU>*K6*tS%)~9Xee&H_edpoa`+1ve zxyP-oncKFoQIiVfHuyX{m>kI>DK6wr3SWpAT!}zAw15_8%+P@iefDsfm^zm&XGy;Np~N z>}K6|3`tv1!z`SN3h{ivIKy+R?7C`NUH2FG`$Z!ejT_@&{HQw#Li#8gx?j@W)1*O% zUeu5CpKfE;9MOo?{5IyNUwwSRE66S*5TD}$EBCa5c2B#b8Cuo6YZkP1?Ur8E4ehp7 z(=XQ-4!U|)AKOezt{dTd=elXdbw@FsgmPbX-Lr`oW){W5Ye=9LTjL+g{hC}%Tx1=D ztV~r?^1qH{JS(z)A^H3V$8y`&(>09hAQFrx^Fz308+;v|`7OC@$R+2_c8d8EG&Jx# zXO{BP%rCJ230snR6PcbYFiUx9<`eZQF3J2UGJUbYEajz`H?Z2z`+d&(cn&N{{uz>e zy+AJImR-i-R})*OUG;i68@XJ^d19fc<14`p^j6csWuv&P8JFR633F3})6&yy9G}S% R5>;GkTFtnaHT$WG~dM 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 AGXMYp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/functions.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/functions.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d91f75126fff87d67d99d67ef60c1c51aaa56da9 GIT binary patch literal 1337 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/schema.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/schema.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aeb268bc3ed1b9184a85bd4678a6d3bb4d89d31f GIT binary patch literal 6768 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 EKj2|kW&i*H literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd442864967c2e699f5fc1ee09be21b12ff6ec30 GIT binary patch literal 2036 zcmZuyOK%%D5avF#dfRfG6iE625uk+^h%F?C04a*XlI;WrVmXME09_PVP)pjTyxLVs z%87*ZUSPV*uDSa!gzh0&D?Ji?|>R z@B<EM(owmak*<=Ht-rb6ZdUlGB{FlAU>5QP(x;UU8l zA|<0(<@mr_?Xiz6nJQ-YArcd?5M<006HhSDa4skl#$2$3@hh_#!<^#$%t|8vfD^&M zJH^8pCYjxb+X%5#pdYhL?OAPNay5?!!^j6PY~G(7Q_Ycsl#50lx^~d7F8Tyt2gSY- z`k~W<)Po{3?Llh7?4pC-yOZwG+h`*$e8!x{uo!yUmn=OKKmepmHl;t1sKM-?PFsy9 z?Fpak4yQb&yV)pyL7!c!HXV`dJYW6{+e4CEvW&`hE=ZEH_Ehmy?oDQT!&Ew67OH9T z2mp}tz^OX(M=K|^w{B{(sKjvw6^>(Fi{o)lr>T(}as11aq&F+&IHq|L$D#qd+PGJs zZgf6?@hOeaCy0<(8i!;3y{aiz!|`j#lT`2U6%_MRm2v&s{I)w zLYKyQrY^Kc$xQnf`Bdm&%rl5q2SpsZz7kaEYA;EpcB#5`8oGHV^6|1xkHAAg2-kD& zIrFb?)p2jlx))Z3p^(@xuxX%Wz!JPVI6gV*4>~7rq8iU8Qx!`-XS!~y3)l1_r{YUv zZMeMxmLn$9Z5TF|h95Xp*Ji)QlCQvE-x&Q4aF->}flTj#P6utxH*|rH7y)B|H?|=% z=u#CcR}oN()-0duR?|QX-fCKT!{VmJmc=cL_bhIkxA=x7-+ef#2fEdrrkBM{Iw6w@ z6Z87uH157W?e2UlLpwR_436w%=b+OcfP|rg9rp%DZ{K%b%kYf(&VFVmc;8^bkUt==?E*Ie9xlS{Z!S8UDh;X>O7AL-iC z)?HO~8P{E^MZT$Ml;{q3`2eg&~Spq$6HDZ x&GJ{6cfvqd79B+U<}cB5-8L}GPiysmE_LOHqGA4M{#2#u1`W66Z8slo{tMTa>t_G} literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/validation.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/oracle/__pycache__/validation.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5cfab2ac1699cdf619c8387325fe88734ff73b2 GIT binary patch literal 1020 zcmaJ<&2H2%5FRJlY}vN30@M=+143vI&59mC6okr;;DA&PD^V$`6gjcmI-A(RPAFY1 zr{!gMrCd4j3Y-{c`?CUscV|4F%*;2RJzJZbgPm;m@X!bN0V^v&dk@9#qT=``Pymz! zVgkgSJt#aVeTaP^@3;>_iZ6WNECMF{_9>Rk73%rfFYokAV z_Q9~M5R_|S)x(+QHMt8pc(?X-~v z-&T3@lCXG3UcA2K7G>Iq?&9Km=N_I$7c|kZBDx}J+`M-sR$$x}8i&=cJzsYBg5b$I J= 0', + 'PositiveSmallIntegerField': '%(qn_column)s >= 0', + } + + # Oracle doesn't support a database index on these columns. + _limited_data_types = ('clob', 'nclob', 'blob') + + operators = _UninitializedOperatorsDescriptor() + + _standard_operators = { + 'exact': '= %s', + 'iexact': '= UPPER(%s)', + 'contains': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)", + 'icontains': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)", + 'gt': '> %s', + 'gte': '>= %s', + 'lt': '< %s', + 'lte': '<= %s', + 'startswith': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)", + 'endswith': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)", + 'istartswith': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)", + 'iendswith': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)", + } + + _likec_operators = { + **_standard_operators, + 'contains': "LIKEC %s ESCAPE '\\'", + 'icontains': "LIKEC UPPER(%s) ESCAPE '\\'", + 'startswith': "LIKEC %s ESCAPE '\\'", + 'endswith': "LIKEC %s ESCAPE '\\'", + 'istartswith': "LIKEC UPPER(%s) ESCAPE '\\'", + 'iendswith': "LIKEC UPPER(%s) ESCAPE '\\'", + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')" + _pattern_ops = { + 'contains': "'%%' || {} || '%%'", + 'icontains': "'%%' || UPPER({}) || '%%'", + 'startswith': "{} || '%%'", + 'istartswith': "UPPER({}) || '%%'", + 'endswith': "'%%' || {}", + 'iendswith': "'%%' || UPPER({})", + } + + _standard_pattern_ops = {k: "LIKE TRANSLATE( " + v + " USING NCHAR_CS)" + " ESCAPE TRANSLATE('\\' USING NCHAR_CS)" + for k, v in _pattern_ops.items()} + _likec_pattern_ops = {k: "LIKEC " + v + " ESCAPE '\\'" + for k, v in _pattern_ops.items()} + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + validation_class = DatabaseValidation + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + use_returning_into = self.settings_dict["OPTIONS"].get('use_returning_into', True) + self.features.can_return_id_from_insert = use_returning_into + + def _dsn(self): + settings_dict = self.settings_dict + if not settings_dict['HOST'].strip(): + settings_dict['HOST'] = 'localhost' + if settings_dict['PORT']: + return Database.makedsn(settings_dict['HOST'], int(settings_dict['PORT']), settings_dict['NAME']) + return settings_dict['NAME'] + + def _connect_string(self): + return '%s/\\"%s\\"@%s' % (self.settings_dict['USER'], self.settings_dict['PASSWORD'], self._dsn()) + + def get_connection_params(self): + conn_params = self.settings_dict['OPTIONS'].copy() + if 'use_returning_into' in conn_params: + del conn_params['use_returning_into'] + return conn_params + + def get_new_connection(self, conn_params): + return Database.connect( + user=self.settings_dict['USER'], + password=self.settings_dict['PASSWORD'], + dsn=self._dsn(), + **conn_params, + ) + + def init_connection_state(self): + cursor = self.create_cursor() + # Set the territory first. The territory overrides NLS_DATE_FORMAT + # and NLS_TIMESTAMP_FORMAT to the territory default. When all of + # these are set in single statement it isn't clear what is supposed + # to happen. + cursor.execute("ALTER SESSION SET NLS_TERRITORY = 'AMERICA'") + # Set Oracle date to ANSI date format. This only needs to execute + # once when we create a new connection. We also set the Territory + # to 'AMERICA' which forces Sunday to evaluate to a '1' in + # TO_CHAR(). + cursor.execute( + "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'" + " NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'" + + (" TIME_ZONE = 'UTC'" if settings.USE_TZ else '') + ) + cursor.close() + if 'operators' not in self.__dict__: + # Ticket #14149: Check whether our LIKE implementation will + # work for this connection or we need to fall back on LIKEC. + # This check is performed only once per DatabaseWrapper + # instance per thread, since subsequent connections will use + # the same settings. + cursor = self.create_cursor() + try: + cursor.execute("SELECT 1 FROM DUAL WHERE DUMMY %s" + % self._standard_operators['contains'], + ['X']) + except Database.DatabaseError: + self.operators = self._likec_operators + self.pattern_ops = self._likec_pattern_ops + else: + self.operators = self._standard_operators + self.pattern_ops = self._standard_pattern_ops + cursor.close() + self.connection.stmtcachesize = 20 + # Ensure all changes are preserved even when AUTOCOMMIT is False. + if not self.get_autocommit(): + self.commit() + + def create_cursor(self, name=None): + return FormatStylePlaceholderCursor(self.connection) + + def _commit(self): + if self.connection is not None: + try: + return self.connection.commit() + except Database.DatabaseError as e: + # cx_Oracle raises a cx_Oracle.DatabaseError exception + # with the following attributes and values: + # code = 2091 + # message = 'ORA-02091: transaction rolled back + # 'ORA-02291: integrity constraint (TEST_DJANGOTEST.SYS + # _C00102056) violated - parent key not found' + # We convert that particular case to our IntegrityError exception + x = e.args[0] + if hasattr(x, 'code') and hasattr(x, 'message') \ + and x.code == 2091 and 'ORA-02291' in x.message: + raise utils.IntegrityError(*tuple(e.args)) + raise + + # Oracle doesn't support releasing savepoints. But we fake them when query + # logging is enabled to keep query counts consistent with other backends. + def _savepoint_commit(self, sid): + if self.queries_logged: + self.queries_log.append({ + 'sql': '-- RELEASE SAVEPOINT %s (faked)' % self.ops.quote_name(sid), + 'time': '0.000', + }) + + def _set_autocommit(self, autocommit): + with self.wrap_database_errors: + self.connection.autocommit = autocommit + + def check_constraints(self, table_names=None): + """ + Check constraints by setting them to immediate. Return them to deferred + afterward. + """ + self.cursor().execute('SET CONSTRAINTS ALL IMMEDIATE') + self.cursor().execute('SET CONSTRAINTS ALL DEFERRED') + + def is_usable(self): + try: + self.connection.ping() + except Database.Error: + return False + else: + return True + + @cached_property + def oracle_version(self): + with self.temporary_connection(): + return tuple(int(x) for x in self.connection.version.split('.')) + + +class OracleParam: + """ + Wrapper object for formatting parameters for Oracle. If the string + representation of the value is large enough (greater than 4000 characters) + the input size needs to be set as CLOB. Alternatively, if the parameter + has an `input_size` attribute, then the value of the `input_size` attribute + will be used instead. Otherwise, no input size will be set for the + parameter when executing the query. + """ + + def __init__(self, param, cursor, strings_only=False): + # With raw SQL queries, datetimes can reach this function + # without being converted by DateTimeField.get_db_prep_value. + if settings.USE_TZ and (isinstance(param, datetime.datetime) and + not isinstance(param, Oracle_datetime)): + param = Oracle_datetime.from_datetime(param) + + string_size = 0 + # Oracle doesn't recognize True and False correctly. + if param is True: + param = 1 + elif param is False: + param = 0 + if hasattr(param, 'bind_parameter'): + self.force_bytes = param.bind_parameter(cursor) + elif isinstance(param, (Database.Binary, datetime.timedelta)): + self.force_bytes = param + else: + # To transmit to the database, we need Unicode if supported + # To get size right, we must consider bytes. + self.force_bytes = force_text(param, cursor.charset, strings_only) + if isinstance(self.force_bytes, str): + # We could optimize by only converting up to 4000 bytes here + string_size = len(force_bytes(param, cursor.charset, strings_only)) + if hasattr(param, 'input_size'): + # If parameter has `input_size` attribute, use that. + self.input_size = param.input_size + elif string_size > 4000: + # Mark any string param greater than 4000 characters as a CLOB. + self.input_size = Database.CLOB + elif isinstance(param, datetime.datetime): + self.input_size = Database.TIMESTAMP + else: + self.input_size = None + + +class VariableWrapper: + """ + An adapter class for cursor variables that prevents the wrapped object + from being converted into a string when used to instantiate an OracleParam. + This can be used generally for any other object that should be passed into + Cursor.execute as-is. + """ + + def __init__(self, var): + self.var = var + + def bind_parameter(self, cursor): + return self.var + + def __getattr__(self, key): + return getattr(self.var, key) + + def __setattr__(self, key, value): + if key == 'var': + self.__dict__[key] = value + else: + setattr(self.var, key, value) + + +class FormatStylePlaceholderCursor: + """ + Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var" + style. This fixes it -- but note that if you want to use a literal "%s" in + a query, you'll need to use "%%s". + + We also do automatic conversion between Unicode on the Python side and + UTF-8 -- for talking to Oracle -- in here. + """ + charset = 'utf-8' + + def __init__(self, connection): + self.cursor = connection.cursor() + self.cursor.outputtypehandler = self._output_type_handler + # The default for cx_Oracle < 5.3 is 50. + self.cursor.arraysize = 100 + + @staticmethod + def _output_number_converter(value): + return decimal.Decimal(value) if '.' in value else int(value) + + @staticmethod + def _get_decimal_converter(precision, scale): + if scale == 0: + return int + context = decimal.Context(prec=precision) + quantize_value = decimal.Decimal(1).scaleb(-scale) + return lambda v: decimal.Decimal(v).quantize(quantize_value, context=context) + + @staticmethod + def _output_type_handler(cursor, name, defaultType, length, precision, scale): + """ + Called for each db column fetched from cursors. Return numbers as the + appropriate Python type. + """ + if defaultType == Database.NUMBER: + if scale == -127: + if precision == 0: + # NUMBER column: decimal-precision floating point. + # This will normally be an integer from a sequence, + # but it could be a decimal value. + outconverter = FormatStylePlaceholderCursor._output_number_converter + else: + # FLOAT column: binary-precision floating point. + # This comes from FloatField columns. + outconverter = float + elif precision > 0: + # NUMBER(p,s) column: decimal-precision fixed point. + # This comes from IntegerField and DecimalField columns. + outconverter = FormatStylePlaceholderCursor._get_decimal_converter(precision, scale) + else: + # No type information. This normally comes from a + # mathematical expression in the SELECT list. Guess int + # or Decimal based on whether it has a decimal point. + outconverter = FormatStylePlaceholderCursor._output_number_converter + return cursor.var( + Database.STRING, + size=255, + arraysize=cursor.arraysize, + outconverter=outconverter, + ) + + def _format_params(self, params): + try: + return {k: OracleParam(v, self, True) for k, v in params.items()} + except AttributeError: + return tuple(OracleParam(p, self, True) for p in params) + + def _guess_input_sizes(self, params_list): + # Try dict handling; if that fails, treat as sequence + if hasattr(params_list[0], 'keys'): + sizes = {} + for params in params_list: + for k, value in params.items(): + if value.input_size: + sizes[k] = value.input_size + self.setinputsizes(**sizes) + else: + # It's not a list of dicts; it's a list of sequences + sizes = [None] * len(params_list[0]) + for params in params_list: + for i, value in enumerate(params): + if value.input_size: + sizes[i] = value.input_size + self.setinputsizes(*sizes) + + def _param_generator(self, params): + # Try dict handling; if that fails, treat as sequence + if hasattr(params, 'items'): + return {k: v.force_bytes for k, v in params.items()} + else: + return [p.force_bytes for p in params] + + def _fix_for_params(self, query, params, unify_by_values=False): + # cx_Oracle wants no trailing ';' for SQL statements. For PL/SQL, it + # it does want a trailing ';' but not a trailing '/'. However, these + # characters must be included in the original query in case the query + # is being passed to SQL*Plus. + if query.endswith(';') or query.endswith('/'): + query = query[:-1] + if params is None: + params = [] + elif hasattr(params, 'keys'): + # Handle params as dict + args = {k: ":%s" % k for k in params} + query = query % args + elif unify_by_values and params: + # Handle params as a dict with unified query parameters by their + # values. It can be used only in single query execute() because + # executemany() shares the formatted query with each of the params + # list. e.g. for input params = [0.75, 2, 0.75, 'sth', 0.75] + # params_dict = {0.75: ':arg0', 2: ':arg1', 'sth': ':arg2'} + # args = [':arg0', ':arg1', ':arg0', ':arg2', ':arg0'] + # params = {':arg0': 0.75, ':arg1': 2, ':arg2': 'sth'} + params_dict = {param: ':arg%d' % i for i, param in enumerate(set(params))} + args = [params_dict[param] for param in params] + params = {value: key for key, value in params_dict.items()} + query = query % tuple(args) + else: + # Handle params as sequence + args = [(':arg%d' % i) for i in range(len(params))] + query = query % tuple(args) + return query, self._format_params(params) + + def execute(self, query, params=None): + query, params = self._fix_for_params(query, params, unify_by_values=True) + self._guess_input_sizes([params]) + return self.cursor.execute(query, self._param_generator(params)) + + def executemany(self, query, params=None): + if not params: + # No params given, nothing to do + return None + # uniform treatment for sequences and iterables + params_iter = iter(params) + query, firstparams = self._fix_for_params(query, next(params_iter)) + # we build a list of formatted params; as we're going to traverse it + # more than once, we can't make it lazy by using a generator + formatted = [firstparams] + [self._format_params(p) for p in params_iter] + self._guess_input_sizes(formatted) + return self.cursor.executemany(query, [self._param_generator(p) for p in formatted]) + + def fetchmany(self, size=None): + if size is None: + size = self.arraysize + return tuple(self.cursor.fetchmany(size)) + + def fetchall(self): + return tuple(self.cursor.fetchall()) + + def close(self): + try: + self.cursor.close() + except Database.InterfaceError: + # already closed + pass + + def var(self, *args): + return VariableWrapper(self.cursor.var(*args)) + + def arrayvar(self, *args): + return VariableWrapper(self.cursor.arrayvar(*args)) + + def __getattr__(self, attr): + return getattr(self.cursor, attr) + + def __iter__(self): + return iter(self.cursor) diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/client.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/client.py new file mode 100644 index 0000000..102e77f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/client.py @@ -0,0 +1,12 @@ +import subprocess + +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = 'sqlplus' + + def runshell(self): + conn_string = self.connection._connect_string() + args = [self.executable_name, "-L", conn_string] + subprocess.check_call(args) diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/compiler.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/compiler.py new file mode 100644 index 0000000..819f241 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/compiler.py @@ -0,0 +1,60 @@ +from django.db import NotSupportedError +from django.db.models.sql import compiler + + +class SQLCompiler(compiler.SQLCompiler): + def as_sql(self, with_limits=True, with_col_aliases=False): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. This is overridden from the original Query class to handle + the restriction in Oracle 12.1 and emulate LIMIT and OFFSET with + a subquery. + + If 'with_limits' is False, any limit/offset information is not included + in the query. + """ + # Whether the query must be constructed using limit/offset. + do_offset = with_limits and (self.query.high_mark is not None or self.query.low_mark) + if not do_offset: + sql, params = super().as_sql(with_limits=False, with_col_aliases=with_col_aliases) + elif not self.connection.features.supports_select_for_update_with_limit and self.query.select_for_update: + raise NotSupportedError( + 'LIMIT/OFFSET is not supported with select_for_update on this ' + 'database backend.' + ) + else: + sql, params = super().as_sql(with_limits=False, with_col_aliases=True) + # Wrap the base query in an outer SELECT * with boundaries on + # the "_RN" column. This is the canonical way to emulate LIMIT + # and OFFSET on Oracle. + high_where = '' + if self.query.high_mark is not None: + high_where = 'WHERE ROWNUM <= %d' % (self.query.high_mark,) + + if self.query.low_mark: + sql = ( + 'SELECT * FROM (SELECT "_SUB".*, ROWNUM AS "_RN" FROM (%s) ' + '"_SUB" %s) WHERE "_RN" > %d' % (sql, high_where, self.query.low_mark) + ) + else: + # Simplify the query to support subqueries if there's no offset. + sql = ( + 'SELECT * FROM (SELECT "_SUB".* FROM (%s) "_SUB" %s)' % (sql, high_where) + ) + return sql, params + + +class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler): + pass + + +class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler): + pass + + +class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler): + pass + + +class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler): + pass diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/creation.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/creation.py new file mode 100644 index 0000000..8f3d847 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/creation.py @@ -0,0 +1,376 @@ +import sys + +from django.conf import settings +from django.db.backends.base.creation import BaseDatabaseCreation +from django.db.utils import DatabaseError +from django.utils.crypto import get_random_string +from django.utils.functional import cached_property + +TEST_DATABASE_PREFIX = 'test_' + + +class DatabaseCreation(BaseDatabaseCreation): + + @cached_property + def _maindb_connection(self): + """ + This is analogous to other backends' `_nodb_connection` property, + which allows access to an "administrative" connection which can + be used to manage the test databases. + For Oracle, the only connection that can be used for that purpose + is the main (non-test) connection. + """ + settings_dict = settings.DATABASES[self.connection.alias] + user = settings_dict.get('SAVED_USER') or settings_dict['USER'] + password = settings_dict.get('SAVED_PASSWORD') or settings_dict['PASSWORD'] + settings_dict = {**settings_dict, 'USER': user, 'PASSWORD': password} + DatabaseWrapper = type(self.connection) + return DatabaseWrapper(settings_dict, alias=self.connection.alias) + + def _create_test_db(self, verbosity=1, autoclobber=False, keepdb=False): + parameters = self._get_test_db_params() + with self._maindb_connection.cursor() as cursor: + if self._test_database_create(): + try: + self._execute_test_db_creation(cursor, parameters, verbosity, keepdb) + except Exception as e: + if 'ORA-01543' not in str(e): + # All errors except "tablespace already exists" cancel tests + sys.stderr.write("Got an error creating the test database: %s\n" % e) + sys.exit(2) + if not autoclobber: + confirm = input( + "It appears the test database, %s, already exists. " + "Type 'yes' to delete it, or 'no' to cancel: " % parameters['user']) + if autoclobber or confirm == 'yes': + if verbosity >= 1: + print("Destroying old test database for alias '%s'..." % self.connection.alias) + try: + self._execute_test_db_destruction(cursor, parameters, verbosity) + except DatabaseError as e: + if 'ORA-29857' in str(e): + self._handle_objects_preventing_db_destruction(cursor, parameters, + verbosity, autoclobber) + else: + # Ran into a database error that isn't about leftover objects in the tablespace + sys.stderr.write("Got an error destroying the old test database: %s\n" % e) + sys.exit(2) + except Exception as e: + sys.stderr.write("Got an error destroying the old test database: %s\n" % e) + sys.exit(2) + try: + self._execute_test_db_creation(cursor, parameters, verbosity, keepdb) + except Exception as e: + sys.stderr.write("Got an error recreating the test database: %s\n" % e) + sys.exit(2) + else: + print("Tests cancelled.") + sys.exit(1) + + if self._test_user_create(): + if verbosity >= 1: + print("Creating test user...") + try: + self._create_test_user(cursor, parameters, verbosity, keepdb) + except Exception as e: + if 'ORA-01920' not in str(e): + # All errors except "user already exists" cancel tests + sys.stderr.write("Got an error creating the test user: %s\n" % e) + sys.exit(2) + if not autoclobber: + confirm = input( + "It appears the test user, %s, already exists. Type " + "'yes' to delete it, or 'no' to cancel: " % parameters['user']) + if autoclobber or confirm == 'yes': + try: + if verbosity >= 1: + print("Destroying old test user...") + self._destroy_test_user(cursor, parameters, verbosity) + if verbosity >= 1: + print("Creating test user...") + self._create_test_user(cursor, parameters, verbosity, keepdb) + except Exception as e: + sys.stderr.write("Got an error recreating the test user: %s\n" % e) + sys.exit(2) + else: + print("Tests cancelled.") + sys.exit(1) + self._maindb_connection.close() # done with main user -- test user and tablespaces created + self._switch_to_test_user(parameters) + return self.connection.settings_dict['NAME'] + + def _switch_to_test_user(self, parameters): + """ + Switch to the user that's used for creating the test database. + + Oracle doesn't have the concept of separate databases under the same + user, so a separate user is used; see _create_test_db(). The main user + is also needed for cleanup when testing is completed, so save its + credentials in the SAVED_USER/SAVED_PASSWORD key in the settings dict. + """ + real_settings = settings.DATABASES[self.connection.alias] + real_settings['SAVED_USER'] = self.connection.settings_dict['SAVED_USER'] = \ + self.connection.settings_dict['USER'] + real_settings['SAVED_PASSWORD'] = self.connection.settings_dict['SAVED_PASSWORD'] = \ + self.connection.settings_dict['PASSWORD'] + real_test_settings = real_settings['TEST'] + test_settings = self.connection.settings_dict['TEST'] + real_test_settings['USER'] = real_settings['USER'] = test_settings['USER'] = \ + self.connection.settings_dict['USER'] = parameters['user'] + real_settings['PASSWORD'] = self.connection.settings_dict['PASSWORD'] = parameters['password'] + + def set_as_test_mirror(self, primary_settings_dict): + """ + Set this database up to be used in testing as a mirror of a primary + database whose settings are given. + """ + self.connection.settings_dict['USER'] = primary_settings_dict['USER'] + self.connection.settings_dict['PASSWORD'] = primary_settings_dict['PASSWORD'] + + def _handle_objects_preventing_db_destruction(self, cursor, parameters, verbosity, autoclobber): + # There are objects in the test tablespace which prevent dropping it + # The easy fix is to drop the test user -- but are we allowed to do so? + print("There are objects in the old test database which prevent its destruction.") + print("If they belong to the test user, deleting the user will allow the test " + "database to be recreated.") + print("Otherwise, you will need to find and remove each of these objects, " + "or use a different tablespace.\n") + if self._test_user_create(): + if not autoclobber: + confirm = input("Type 'yes' to delete user %s: " % parameters['user']) + if autoclobber or confirm == 'yes': + try: + if verbosity >= 1: + print("Destroying old test user...") + self._destroy_test_user(cursor, parameters, verbosity) + except Exception as e: + sys.stderr.write("Got an error destroying the test user: %s\n" % e) + sys.exit(2) + try: + if verbosity >= 1: + print("Destroying old test database for alias '%s'..." % self.connection.alias) + self._execute_test_db_destruction(cursor, parameters, verbosity) + except Exception as e: + sys.stderr.write("Got an error destroying the test database: %s\n" % e) + sys.exit(2) + else: + print("Tests cancelled -- test database cannot be recreated.") + sys.exit(1) + else: + print("Django is configured to use pre-existing test user '%s'," + " and will not attempt to delete it.\n" % parameters['user']) + print("Tests cancelled -- test database cannot be recreated.") + sys.exit(1) + + def _destroy_test_db(self, test_database_name, verbosity=1): + """ + Destroy a test database, prompting the user for confirmation if the + database already exists. Return the name of the test database created. + """ + self.connection.settings_dict['USER'] = self.connection.settings_dict['SAVED_USER'] + self.connection.settings_dict['PASSWORD'] = self.connection.settings_dict['SAVED_PASSWORD'] + self.connection.close() + parameters = self._get_test_db_params() + with self._maindb_connection.cursor() as cursor: + if self._test_user_create(): + if verbosity >= 1: + print('Destroying test user...') + self._destroy_test_user(cursor, parameters, verbosity) + if self._test_database_create(): + if verbosity >= 1: + print('Destroying test database tables...') + self._execute_test_db_destruction(cursor, parameters, verbosity) + self._maindb_connection.close() + + def _execute_test_db_creation(self, cursor, parameters, verbosity, keepdb=False): + if verbosity >= 2: + print("_create_test_db(): dbname = %s" % parameters['user']) + statements = [ + """CREATE TABLESPACE %(tblspace)s + DATAFILE '%(datafile)s' SIZE %(size)s + REUSE AUTOEXTEND ON NEXT %(extsize)s MAXSIZE %(maxsize)s + """, + """CREATE TEMPORARY TABLESPACE %(tblspace_temp)s + TEMPFILE '%(datafile_tmp)s' SIZE %(size_tmp)s + REUSE AUTOEXTEND ON NEXT %(extsize_tmp)s MAXSIZE %(maxsize_tmp)s + """, + ] + # Ignore "tablespace already exists" error when keepdb is on. + acceptable_ora_err = 'ORA-01543' if keepdb else None + self._execute_allow_fail_statements(cursor, statements, parameters, verbosity, acceptable_ora_err) + + def _create_test_user(self, cursor, parameters, verbosity, keepdb=False): + if verbosity >= 2: + print("_create_test_user(): username = %s" % parameters['user']) + statements = [ + """CREATE USER %(user)s + IDENTIFIED BY "%(password)s" + DEFAULT TABLESPACE %(tblspace)s + TEMPORARY TABLESPACE %(tblspace_temp)s + QUOTA UNLIMITED ON %(tblspace)s + """, + """GRANT CREATE SESSION, + CREATE TABLE, + CREATE SEQUENCE, + CREATE PROCEDURE, + CREATE TRIGGER + TO %(user)s""", + ] + # Ignore "user already exists" error when keepdb is on + acceptable_ora_err = 'ORA-01920' if keepdb else None + success = self._execute_allow_fail_statements(cursor, statements, parameters, verbosity, acceptable_ora_err) + # If the password was randomly generated, change the user accordingly. + if not success and self._test_settings_get('PASSWORD') is None: + set_password = 'ALTER USER %(user)s IDENTIFIED BY "%(password)s"' + self._execute_statements(cursor, [set_password], parameters, verbosity) + # Most test-suites can be run without the create-view privilege. But some need it. + extra = "GRANT CREATE VIEW TO %(user)s" + success = self._execute_allow_fail_statements(cursor, [extra], parameters, verbosity, 'ORA-01031') + if not success and verbosity >= 2: + print("Failed to grant CREATE VIEW permission to test user. This may be ok.") + + def _execute_test_db_destruction(self, cursor, parameters, verbosity): + if verbosity >= 2: + print("_execute_test_db_destruction(): dbname=%s" % parameters['user']) + statements = [ + 'DROP TABLESPACE %(tblspace)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS', + 'DROP TABLESPACE %(tblspace_temp)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS', + ] + self._execute_statements(cursor, statements, parameters, verbosity) + + def _destroy_test_user(self, cursor, parameters, verbosity): + if verbosity >= 2: + print("_destroy_test_user(): user=%s" % parameters['user']) + print("Be patient. This can take some time...") + statements = [ + 'DROP USER %(user)s CASCADE', + ] + self._execute_statements(cursor, statements, parameters, verbosity) + + def _execute_statements(self, cursor, statements, parameters, verbosity, allow_quiet_fail=False): + for template in statements: + stmt = template % parameters + if verbosity >= 2: + print(stmt) + try: + cursor.execute(stmt) + except Exception as err: + if (not allow_quiet_fail) or verbosity >= 2: + sys.stderr.write("Failed (%s)\n" % (err)) + raise + + def _execute_allow_fail_statements(self, cursor, statements, parameters, verbosity, acceptable_ora_err): + """ + Execute statements which are allowed to fail silently if the Oracle + error code given by `acceptable_ora_err` is raised. Return True if the + statements execute without an exception, or False otherwise. + """ + try: + # Statement can fail when acceptable_ora_err is not None + allow_quiet_fail = acceptable_ora_err is not None and len(acceptable_ora_err) > 0 + self._execute_statements(cursor, statements, parameters, verbosity, allow_quiet_fail=allow_quiet_fail) + return True + except DatabaseError as err: + description = str(err) + if acceptable_ora_err is None or acceptable_ora_err not in description: + raise + return False + + def _get_test_db_params(self): + return { + 'dbname': self._test_database_name(), + 'user': self._test_database_user(), + 'password': self._test_database_passwd(), + 'tblspace': self._test_database_tblspace(), + 'tblspace_temp': self._test_database_tblspace_tmp(), + 'datafile': self._test_database_tblspace_datafile(), + 'datafile_tmp': self._test_database_tblspace_tmp_datafile(), + 'maxsize': self._test_database_tblspace_maxsize(), + 'maxsize_tmp': self._test_database_tblspace_tmp_maxsize(), + 'size': self._test_database_tblspace_size(), + 'size_tmp': self._test_database_tblspace_tmp_size(), + 'extsize': self._test_database_tblspace_extsize(), + 'extsize_tmp': self._test_database_tblspace_tmp_extsize(), + } + + def _test_settings_get(self, key, default=None, prefixed=None): + """ + Return a value from the test settings dict, or a given default, or a + prefixed entry from the main settings dict. + """ + settings_dict = self.connection.settings_dict + val = settings_dict['TEST'].get(key, default) + if val is None and prefixed: + val = TEST_DATABASE_PREFIX + settings_dict[prefixed] + return val + + def _test_database_name(self): + return self._test_settings_get('NAME', prefixed='NAME') + + def _test_database_create(self): + return self._test_settings_get('CREATE_DB', default=True) + + def _test_user_create(self): + return self._test_settings_get('CREATE_USER', default=True) + + def _test_database_user(self): + return self._test_settings_get('USER', prefixed='USER') + + def _test_database_passwd(self): + password = self._test_settings_get('PASSWORD') + if password is None and self._test_user_create(): + # Oracle passwords are limited to 30 chars and can't contain symbols. + password = get_random_string(length=30) + return password + + def _test_database_tblspace(self): + return self._test_settings_get('TBLSPACE', prefixed='USER') + + def _test_database_tblspace_tmp(self): + settings_dict = self.connection.settings_dict + return settings_dict['TEST'].get('TBLSPACE_TMP', + TEST_DATABASE_PREFIX + settings_dict['USER'] + '_temp') + + def _test_database_tblspace_datafile(self): + tblspace = '%s.dbf' % self._test_database_tblspace() + return self._test_settings_get('DATAFILE', default=tblspace) + + def _test_database_tblspace_tmp_datafile(self): + tblspace = '%s.dbf' % self._test_database_tblspace_tmp() + return self._test_settings_get('DATAFILE_TMP', default=tblspace) + + def _test_database_tblspace_maxsize(self): + return self._test_settings_get('DATAFILE_MAXSIZE', default='500M') + + def _test_database_tblspace_tmp_maxsize(self): + return self._test_settings_get('DATAFILE_TMP_MAXSIZE', default='500M') + + def _test_database_tblspace_size(self): + return self._test_settings_get('DATAFILE_SIZE', default='50M') + + def _test_database_tblspace_tmp_size(self): + return self._test_settings_get('DATAFILE_TMP_SIZE', default='50M') + + def _test_database_tblspace_extsize(self): + return self._test_settings_get('DATAFILE_EXTSIZE', default='25M') + + def _test_database_tblspace_tmp_extsize(self): + return self._test_settings_get('DATAFILE_TMP_EXTSIZE', default='25M') + + def _get_test_db_name(self): + """ + Return the 'production' DB name to get the test DB creation machinery + to work. This isn't a great deal in this case because DB names as + handled by Django don't have real counterparts in Oracle. + """ + return self.connection.settings_dict['NAME'] + + def test_db_signature(self): + settings_dict = self.connection.settings_dict + return ( + settings_dict['HOST'], + settings_dict['PORT'], + settings_dict['ENGINE'], + settings_dict['NAME'], + self._test_database_user(), + ) diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/features.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/features.py new file mode 100644 index 0000000..6b6a5cd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/features.py @@ -0,0 +1,66 @@ +from django.db.backends.base.features import BaseDatabaseFeatures +from django.db.utils import InterfaceError +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + empty_fetchmany_value = () + interprets_empty_strings_as_nulls = True + uses_savepoints = True + has_select_for_update = True + has_select_for_update_nowait = True + has_select_for_update_skip_locked = True + has_select_for_update_of = True + select_for_update_of_column = True + can_return_id_from_insert = True + can_introspect_autofield = True + supports_subqueries_in_group_by = False + supports_transactions = True + supports_timezones = False + has_native_duration_field = True + can_defer_constraint_checks = True + supports_partially_nullable_unique_constraints = False + truncates_names = True + supports_tablespaces = True + supports_sequence_reset = False + can_introspect_time_field = False + atomic_transactions = False + supports_combined_alters = False + nulls_order_largest = True + requires_literal_defaults = True + closed_cursor_error_class = InterfaceError + bare_select_suffix = " FROM DUAL" + uppercases_column_names = True + # select for update with limit can be achieved on Oracle, but not with the current backend. + supports_select_for_update_with_limit = False + supports_temporal_subtraction = True + # Oracle doesn't ignore quoted identifiers case but the current backend + # does by uppercasing all identifiers. + ignores_table_name_case = True + supports_index_on_text_field = False + has_case_insensitive_like = False + create_test_procedure_without_params_sql = """ + CREATE PROCEDURE "TEST_PROCEDURE" AS + V_I INTEGER; + BEGIN + V_I := 1; + END; + """ + create_test_procedure_with_int_param_sql = """ + CREATE PROCEDURE "TEST_PROCEDURE" (P_I INTEGER) AS + V_I INTEGER; + BEGIN + V_I := P_I; + END; + """ + supports_callproc_kwargs = True + supports_over_clause = True + max_query_params = 2**16 - 1 + + @cached_property + def has_fetch_offset_support(self): + return self.connection.oracle_version >= (12, 2) + + @cached_property + def allow_sliced_subqueries_with_in(self): + return self.has_fetch_offset_support diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/functions.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/functions.py new file mode 100644 index 0000000..1aeb459 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/functions.py @@ -0,0 +1,22 @@ +from django.db.models import DecimalField, DurationField, Func + + +class IntervalToSeconds(Func): + function = '' + template = """ + EXTRACT(day from %(expressions)s) * 86400 + + EXTRACT(hour from %(expressions)s) * 3600 + + EXTRACT(minute from %(expressions)s) * 60 + + EXTRACT(second from %(expressions)s) + """ + + def __init__(self, expression, *, output_field=None, **extra): + super().__init__(expression, output_field=output_field or DecimalField(), **extra) + + +class SecondsToInterval(Func): + function = 'NUMTODSINTERVAL' + template = "%(function)s(%(expressions)s, 'SECOND')" + + def __init__(self, expression, *, output_field=None, **extra): + super().__init__(expression, output_field=output_field or DurationField(), **extra) diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/introspection.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/introspection.py new file mode 100644 index 0000000..f7ede7d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/introspection.py @@ -0,0 +1,252 @@ +from collections import namedtuple + +import cx_Oracle + +from django.db import models +from django.db.backends.base.introspection import ( + BaseDatabaseIntrospection, FieldInfo as BaseFieldInfo, TableInfo, +) + +FieldInfo = namedtuple('FieldInfo', BaseFieldInfo._fields + ('is_autofield',)) + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + # Maps type objects to Django Field types. + data_types_reverse = { + cx_Oracle.BLOB: 'BinaryField', + cx_Oracle.CLOB: 'TextField', + cx_Oracle.DATETIME: 'DateField', + cx_Oracle.FIXED_CHAR: 'CharField', + cx_Oracle.FIXED_NCHAR: 'CharField', + cx_Oracle.NATIVE_FLOAT: 'FloatField', + cx_Oracle.NCHAR: 'CharField', + cx_Oracle.NCLOB: 'TextField', + cx_Oracle.NUMBER: 'DecimalField', + cx_Oracle.STRING: 'CharField', + cx_Oracle.TIMESTAMP: 'DateTimeField', + } + + cache_bust_counter = 1 + + def get_field_type(self, data_type, description): + if data_type == cx_Oracle.NUMBER: + precision, scale = description[4:6] + if scale == 0: + if precision > 11: + return 'BigAutoField' if description.is_autofield else 'BigIntegerField' + elif precision == 1: + return 'BooleanField' + elif description.is_autofield: + return 'AutoField' + else: + return 'IntegerField' + elif scale == -127: + return 'FloatField' + + return super().get_field_type(data_type, description) + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + cursor.execute("SELECT TABLE_NAME, 't' FROM USER_TABLES UNION ALL " + "SELECT VIEW_NAME, 'v' FROM USER_VIEWS") + return [TableInfo(row[0].lower(), row[1]) for row in cursor.fetchall()] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + # user_tab_columns gives data default for columns + cursor.execute(""" + SELECT + column_name, + data_default, + CASE + WHEN char_used IS NULL THEN data_length + ELSE char_length + END as internal_size, + CASE + WHEN identity_column = 'YES' THEN 1 + ELSE 0 + END as is_autofield + FROM user_tab_cols + WHERE table_name = UPPER(%s)""", [table_name]) + field_map = { + column: (internal_size, default if default != 'NULL' else None, is_autofield) + for column, default, internal_size, is_autofield in cursor.fetchall() + } + self.cache_bust_counter += 1 + cursor.execute("SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0".format( + self.connection.ops.quote_name(table_name), + self.cache_bust_counter)) + description = [] + for desc in cursor.description: + name = desc[0] + internal_size, default, is_autofield = field_map[name] + name = name % {} # cx_Oracle, for some reason, doubles percent signs. + description.append(FieldInfo( + name.lower(), *desc[1:3], internal_size, desc[4] or 0, + desc[5] or 0, *desc[6:], default, is_autofield, + )) + return description + + def table_name_converter(self, name): + """Table name comparison is case insensitive under Oracle.""" + return name.lower() + + def get_sequences(self, cursor, table_name, table_fields=()): + cursor.execute(""" + SELECT + user_tab_identity_cols.sequence_name, + user_tab_identity_cols.column_name + FROM + user_tab_identity_cols, + user_constraints, + user_cons_columns cols + WHERE + user_constraints.constraint_name = cols.constraint_name + AND user_constraints.table_name = user_tab_identity_cols.table_name + AND cols.column_name = user_tab_identity_cols.column_name + AND user_constraints.constraint_type = 'P' + AND user_tab_identity_cols.table_name = UPPER(%s) + """, [table_name]) + # Oracle allows only one identity column per table. + row = cursor.fetchone() + if row: + return [{'name': row[0].lower(), 'table': table_name, 'column': row[1].lower()}] + # To keep backward compatibility for AutoFields that aren't Oracle + # identity columns. + for f in table_fields: + if isinstance(f, models.AutoField): + return [{'table': table_name, 'column': f.column}] + return [] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + table_name = table_name.upper() + cursor.execute(""" + SELECT ca.column_name, cb.table_name, cb.column_name + FROM user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb + WHERE user_constraints.table_name = %s AND + user_constraints.constraint_name = ca.constraint_name AND + user_constraints.r_constraint_name = cb.constraint_name AND + ca.position = cb.position""", [table_name]) + + relations = {} + for row in cursor.fetchall(): + relations[row[0].lower()] = (row[2].lower(), row[1].lower()) + return relations + + def get_key_columns(self, cursor, table_name): + cursor.execute(""" + SELECT ccol.column_name, rcol.table_name AS referenced_table, rcol.column_name AS referenced_column + FROM user_constraints c + JOIN user_cons_columns ccol + ON ccol.constraint_name = c.constraint_name + JOIN user_cons_columns rcol + ON rcol.constraint_name = c.r_constraint_name + WHERE c.table_name = %s AND c.constraint_type = 'R'""", [table_name.upper()]) + return [tuple(cell.lower() for cell in row) + for row in cursor.fetchall()] + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. + """ + constraints = {} + # Loop over the constraints, getting PKs, uniques, and checks + cursor.execute(""" + SELECT + user_constraints.constraint_name, + LISTAGG(LOWER(cols.column_name), ',') WITHIN GROUP (ORDER BY cols.position), + CASE user_constraints.constraint_type + WHEN 'P' THEN 1 + ELSE 0 + END AS is_primary_key, + CASE + WHEN user_constraints.constraint_type IN ('P', 'U') THEN 1 + ELSE 0 + END AS is_unique, + CASE user_constraints.constraint_type + WHEN 'C' THEN 1 + ELSE 0 + END AS is_check_constraint + FROM + user_constraints + LEFT OUTER JOIN + user_cons_columns cols ON user_constraints.constraint_name = cols.constraint_name + WHERE + user_constraints.constraint_type = ANY('P', 'U', 'C') + AND user_constraints.table_name = UPPER(%s) + GROUP BY user_constraints.constraint_name, user_constraints.constraint_type + """, [table_name]) + for constraint, columns, pk, unique, check in cursor.fetchall(): + constraints[constraint] = { + 'columns': columns.split(','), + 'primary_key': pk, + 'unique': unique, + 'foreign_key': None, + 'check': check, + 'index': unique, # All uniques come with an index + } + # Foreign key constraints + cursor.execute(""" + SELECT + cons.constraint_name, + LISTAGG(LOWER(cols.column_name), ',') WITHIN GROUP (ORDER BY cols.position), + LOWER(rcols.table_name), + LOWER(rcols.column_name) + FROM + user_constraints cons + INNER JOIN + user_cons_columns rcols ON rcols.constraint_name = cons.r_constraint_name AND rcols.position = 1 + LEFT OUTER JOIN + user_cons_columns cols ON cons.constraint_name = cols.constraint_name + WHERE + cons.constraint_type = 'R' AND + cons.table_name = UPPER(%s) + GROUP BY cons.constraint_name, rcols.table_name, rcols.column_name + """, [table_name]) + for constraint, columns, other_table, other_column in cursor.fetchall(): + constraints[constraint] = { + 'primary_key': False, + 'unique': False, + 'foreign_key': (other_table, other_column), + 'check': False, + 'index': False, + 'columns': columns.split(','), + } + # Now get indexes + cursor.execute(""" + SELECT + ind.index_name, + LOWER(ind.index_type), + LISTAGG(LOWER(cols.column_name), ',') WITHIN GROUP (ORDER BY cols.column_position), + LISTAGG(cols.descend, ',') WITHIN GROUP (ORDER BY cols.column_position) + FROM + user_ind_columns cols, user_indexes ind + WHERE + cols.table_name = UPPER(%s) AND + NOT EXISTS ( + SELECT 1 + FROM user_constraints cons + WHERE ind.index_name = cons.index_name + ) AND cols.index_name = ind.index_name + GROUP BY ind.index_name, ind.index_type + """, [table_name]) + for constraint, type_, columns, orders in cursor.fetchall(): + constraints[constraint] = { + 'primary_key': False, + 'unique': False, + 'foreign_key': None, + 'check': False, + 'index': True, + 'type': 'idx' if type_ == 'normal' else type_, + 'columns': columns.split(','), + 'orders': orders.split(','), + } + return constraints diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/operations.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/operations.py new file mode 100644 index 0000000..b2bb949 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/operations.py @@ -0,0 +1,584 @@ +import datetime +import re +import uuid + +from django.conf import settings +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.backends.utils import strip_quotes, truncate_name +from django.db.utils import DatabaseError +from django.utils import timezone +from django.utils.encoding import force_bytes +from django.utils.functional import cached_property + +from .base import Database +from .utils import BulkInsertMapper, InsertIdVar, Oracle_datetime + + +class DatabaseOperations(BaseDatabaseOperations): + # Oracle uses NUMBER(11) and NUMBER(19) for integer fields. + integer_field_ranges = { + 'SmallIntegerField': (-99999999999, 99999999999), + 'IntegerField': (-99999999999, 99999999999), + 'BigIntegerField': (-9999999999999999999, 9999999999999999999), + 'PositiveSmallIntegerField': (0, 99999999999), + 'PositiveIntegerField': (0, 99999999999), + } + set_operators = {**BaseDatabaseOperations.set_operators, 'difference': 'MINUS'} + + # TODO: colorize this SQL code with style.SQL_KEYWORD(), etc. + _sequence_reset_sql = """ +DECLARE + table_value integer; + seq_value integer; + seq_name user_tab_identity_cols.sequence_name%%TYPE; +BEGIN + BEGIN + SELECT sequence_name INTO seq_name FROM user_tab_identity_cols + WHERE table_name = '%(table_name)s' AND + column_name = '%(column_name)s'; + EXCEPTION WHEN NO_DATA_FOUND THEN + seq_name := '%(no_autofield_sequence_name)s'; + END; + + SELECT NVL(MAX(%(column)s), 0) INTO table_value FROM %(table)s; + SELECT NVL(last_number - cache_size, 0) INTO seq_value FROM user_sequences + WHERE sequence_name = seq_name; + WHILE table_value > seq_value LOOP + EXECUTE IMMEDIATE 'SELECT "'||seq_name||'".nextval FROM DUAL' + INTO seq_value; + END LOOP; +END; +/""" + + # Oracle doesn't support string without precision; use the max string size. + cast_char_field_without_max_length = 'NVARCHAR2(2000)' + cast_data_types = { + 'TextField': cast_char_field_without_max_length, + } + + def cache_key_culling_sql(self): + return 'SELECT cache_key FROM %s ORDER BY cache_key OFFSET %%s ROWS FETCH FIRST 1 ROWS ONLY' + + def date_extract_sql(self, lookup_type, field_name): + if lookup_type == 'week_day': + # TO_CHAR(field, 'D') returns an integer from 1-7, where 1=Sunday. + return "TO_CHAR(%s, 'D')" % field_name + elif lookup_type == 'week': + # IW = ISO week number + return "TO_CHAR(%s, 'IW')" % field_name + elif lookup_type == 'quarter': + return "TO_CHAR(%s, 'Q')" % field_name + else: + # https://docs.oracle.com/database/121/SQLRF/functions067.htm#SQLRF00639 + return "EXTRACT(%s FROM %s)" % (lookup_type.upper(), field_name) + + def date_trunc_sql(self, lookup_type, field_name): + # https://docs.oracle.com/database/121/SQLRF/functions271.htm#SQLRF52058 + if lookup_type in ('year', 'month'): + return "TRUNC(%s, '%s')" % (field_name, lookup_type.upper()) + elif lookup_type == 'quarter': + return "TRUNC(%s, 'Q')" % field_name + elif lookup_type == 'week': + return "TRUNC(%s, 'IW')" % field_name + else: + return "TRUNC(%s)" % field_name + + # Oracle crashes with "ORA-03113: end-of-file on communication channel" + # if the time zone name is passed in parameter. Use interpolation instead. + # https://groups.google.com/forum/#!msg/django-developers/zwQju7hbG78/9l934yelwfsJ + # This regexp matches all time zone names from the zoneinfo database. + _tzname_re = re.compile(r'^[\w/:+-]+$') + + def _convert_field_to_tz(self, field_name, tzname): + if not settings.USE_TZ: + return field_name + if not self._tzname_re.match(tzname): + raise ValueError("Invalid time zone name: %s" % tzname) + # Convert from UTC to local time, returning TIMESTAMP WITH TIME ZONE + # and cast it back to TIMESTAMP to strip the TIME ZONE details. + return "CAST((FROM_TZ(%s, '0:00') AT TIME ZONE '%s') AS TIMESTAMP)" % (field_name, tzname) + + def datetime_cast_date_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return 'TRUNC(%s)' % field_name + + def datetime_cast_time_sql(self, field_name, tzname): + # Since `TimeField` values are stored as TIMESTAMP where only the date + # part is ignored, convert the field to the specified timezone. + return self._convert_field_to_tz(field_name, tzname) + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return self.date_extract_sql(lookup_type, field_name) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + # https://docs.oracle.com/database/121/SQLRF/functions271.htm#SQLRF52058 + if lookup_type in ('year', 'month'): + sql = "TRUNC(%s, '%s')" % (field_name, lookup_type.upper()) + elif lookup_type == 'quarter': + sql = "TRUNC(%s, 'Q')" % field_name + elif lookup_type == 'week': + sql = "TRUNC(%s, 'IW')" % field_name + elif lookup_type == 'day': + sql = "TRUNC(%s)" % field_name + elif lookup_type == 'hour': + sql = "TRUNC(%s, 'HH24')" % field_name + elif lookup_type == 'minute': + sql = "TRUNC(%s, 'MI')" % field_name + else: + sql = "CAST(%s AS DATE)" % field_name # Cast to DATE removes sub-second precision. + return sql + + def time_trunc_sql(self, lookup_type, field_name): + # The implementation is similar to `datetime_trunc_sql` as both + # `DateTimeField` and `TimeField` are stored as TIMESTAMP where + # the date part of the later is ignored. + if lookup_type == 'hour': + sql = "TRUNC(%s, 'HH24')" % field_name + elif lookup_type == 'minute': + sql = "TRUNC(%s, 'MI')" % field_name + elif lookup_type == 'second': + sql = "CAST(%s AS DATE)" % field_name # Cast to DATE removes sub-second precision. + return sql + + def get_db_converters(self, expression): + converters = super().get_db_converters(expression) + internal_type = expression.output_field.get_internal_type() + if internal_type == 'TextField': + converters.append(self.convert_textfield_value) + elif internal_type == 'BinaryField': + converters.append(self.convert_binaryfield_value) + elif internal_type in ['BooleanField', 'NullBooleanField']: + converters.append(self.convert_booleanfield_value) + elif internal_type == 'DateTimeField': + if settings.USE_TZ: + converters.append(self.convert_datetimefield_value) + elif internal_type == 'DateField': + converters.append(self.convert_datefield_value) + elif internal_type == 'TimeField': + converters.append(self.convert_timefield_value) + elif internal_type == 'UUIDField': + converters.append(self.convert_uuidfield_value) + # Oracle stores empty strings as null. If the field accepts the empty + # string, undo this to adhere to the Django convention of using + # the empty string instead of null. + if expression.field.empty_strings_allowed: + converters.append( + self.convert_empty_bytes + if internal_type == 'BinaryField' else + self.convert_empty_string + ) + return converters + + def convert_textfield_value(self, value, expression, connection): + if isinstance(value, Database.LOB): + value = value.read() + return value + + def convert_binaryfield_value(self, value, expression, connection): + if isinstance(value, Database.LOB): + value = force_bytes(value.read()) + return value + + def convert_booleanfield_value(self, value, expression, connection): + if value in (0, 1): + value = bool(value) + return value + + # cx_Oracle always returns datetime.datetime objects for + # DATE and TIMESTAMP columns, but Django wants to see a + # python datetime.date, .time, or .datetime. + + def convert_datetimefield_value(self, value, expression, connection): + if value is not None: + value = timezone.make_aware(value, self.connection.timezone) + return value + + def convert_datefield_value(self, value, expression, connection): + if isinstance(value, Database.Timestamp): + value = value.date() + return value + + def convert_timefield_value(self, value, expression, connection): + if isinstance(value, Database.Timestamp): + value = value.time() + return value + + def convert_uuidfield_value(self, value, expression, connection): + if value is not None: + value = uuid.UUID(value) + return value + + @staticmethod + def convert_empty_string(value, expression, connection): + return '' if value is None else value + + @staticmethod + def convert_empty_bytes(value, expression, connection): + return b'' if value is None else value + + def deferrable_sql(self): + return " DEFERRABLE INITIALLY DEFERRED" + + def fetch_returned_insert_id(self, cursor): + try: + value = cursor._insert_id_var.getvalue() + # cx_Oracle < 7 returns value, >= 7 returns list with single value. + return int(value[0] if isinstance(value, list) else value) + except (IndexError, TypeError): + # cx_Oracle < 6.3 returns None, >= 6.3 raises IndexError. + raise DatabaseError( + 'The database did not return a new row id. Probably "ORA-1403: ' + 'no data found" was raised internally but was hidden by the ' + 'Oracle OCI library (see https://code.djangoproject.com/ticket/28859).' + ) + + def field_cast_sql(self, db_type, internal_type): + if db_type and db_type.endswith('LOB'): + return "DBMS_LOB.SUBSTR(%s)" + else: + return "%s" + + def no_limit_value(self): + return None + + def limit_offset_sql(self, low_mark, high_mark): + fetch, offset = self._get_limit_offset_params(low_mark, high_mark) + return '%s%s' % ( + (' OFFSET %d ROWS' % offset) if offset else '', + (' FETCH FIRST %d ROWS ONLY' % fetch) if fetch else '', + ) + + def last_executed_query(self, cursor, sql, params): + # https://cx-oracle.readthedocs.io/en/latest/cursor.html#Cursor.statement + # The DB API definition does not define this attribute. + statement = cursor.statement + # Unlike Psycopg's `query` and MySQLdb`'s `_executed`, CxOracle's + # `statement` doesn't contain the query parameters. refs #20010. + return super().last_executed_query(cursor, statement, params) + + def last_insert_id(self, cursor, table_name, pk_name): + sq_name = self._get_sequence_name(cursor, strip_quotes(table_name), pk_name) + cursor.execute('"%s".currval' % sq_name) + return cursor.fetchone()[0] + + def lookup_cast(self, lookup_type, internal_type=None): + if lookup_type in ('iexact', 'icontains', 'istartswith', 'iendswith'): + return "UPPER(%s)" + return "%s" + + def max_in_list_size(self): + return 1000 + + def max_name_length(self): + return 30 + + def pk_default_value(self): + return "NULL" + + def prep_for_iexact_query(self, x): + return x + + def process_clob(self, value): + if value is None: + return '' + return value.read() + + def quote_name(self, name): + # SQL92 requires delimited (quoted) names to be case-sensitive. When + # not quoted, Oracle has case-insensitive behavior for identifiers, but + # always defaults to uppercase. + # We simplify things by making Oracle identifiers always uppercase. + if not name.startswith('"') and not name.endswith('"'): + name = '"%s"' % truncate_name(name.upper(), self.max_name_length()) + # Oracle puts the query text into a (query % args) construct, so % signs + # in names need to be escaped. The '%%' will be collapsed back to '%' at + # that stage so we aren't really making the name longer here. + name = name.replace('%', '%%') + return name.upper() + + def random_function_sql(self): + return "DBMS_RANDOM.RANDOM" + + def regex_lookup(self, lookup_type): + if lookup_type == 'regex': + match_option = "'c'" + else: + match_option = "'i'" + return 'REGEXP_LIKE(%%s, %%s, %s)' % match_option + + def return_insert_id(self): + return "RETURNING %s INTO %%s", (InsertIdVar(),) + + def savepoint_create_sql(self, sid): + return "SAVEPOINT " + self.quote_name(sid) + + def savepoint_rollback_sql(self, sid): + return "ROLLBACK TO SAVEPOINT " + self.quote_name(sid) + + def _foreign_key_constraints(self, table_name, recursive=False): + with self.connection.cursor() as cursor: + if recursive: + cursor.execute(""" + SELECT + user_tables.table_name, rcons.constraint_name + FROM + user_tables + JOIN + user_constraints cons + ON (user_tables.table_name = cons.table_name AND cons.constraint_type = ANY('P', 'U')) + LEFT JOIN + user_constraints rcons + ON (user_tables.table_name = rcons.table_name AND rcons.constraint_type = 'R') + START WITH user_tables.table_name = UPPER(%s) + CONNECT BY NOCYCLE PRIOR cons.constraint_name = rcons.r_constraint_name + GROUP BY + user_tables.table_name, rcons.constraint_name + HAVING user_tables.table_name != UPPER(%s) + ORDER BY MAX(level) DESC + """, (table_name, table_name)) + else: + cursor.execute(""" + SELECT + cons.table_name, cons.constraint_name + FROM + user_constraints cons + WHERE + cons.constraint_type = 'R' + AND cons.table_name = UPPER(%s) + """, (table_name,)) + return cursor.fetchall() + + def sql_flush(self, style, tables, sequences, allow_cascade=False): + if tables: + truncated_tables = {table.upper() for table in tables} + constraints = set() + # Oracle's TRUNCATE CASCADE only works with ON DELETE CASCADE + # foreign keys which Django doesn't define. Emulate the + # PostgreSQL behavior which truncates all dependent tables by + # manually retrieving all foreign key constraints and resolving + # dependencies. + for table in tables: + for foreign_table, constraint in self._foreign_key_constraints(table, recursive=allow_cascade): + if allow_cascade: + truncated_tables.add(foreign_table) + constraints.add((foreign_table, constraint)) + sql = [ + "%s %s %s %s %s %s %s %s;" % ( + style.SQL_KEYWORD('ALTER'), + style.SQL_KEYWORD('TABLE'), + style.SQL_FIELD(self.quote_name(table)), + style.SQL_KEYWORD('DISABLE'), + style.SQL_KEYWORD('CONSTRAINT'), + style.SQL_FIELD(self.quote_name(constraint)), + style.SQL_KEYWORD('KEEP'), + style.SQL_KEYWORD('INDEX'), + ) for table, constraint in constraints + ] + [ + "%s %s %s;" % ( + style.SQL_KEYWORD('TRUNCATE'), + style.SQL_KEYWORD('TABLE'), + style.SQL_FIELD(self.quote_name(table)), + ) for table in truncated_tables + ] + [ + "%s %s %s %s %s %s;" % ( + style.SQL_KEYWORD('ALTER'), + style.SQL_KEYWORD('TABLE'), + style.SQL_FIELD(self.quote_name(table)), + style.SQL_KEYWORD('ENABLE'), + style.SQL_KEYWORD('CONSTRAINT'), + style.SQL_FIELD(self.quote_name(constraint)), + ) for table, constraint in constraints + ] + # Since we've just deleted all the rows, running our sequence + # ALTER code will reset the sequence to 0. + sql.extend(self.sequence_reset_by_name_sql(style, sequences)) + return sql + else: + return [] + + def sequence_reset_by_name_sql(self, style, sequences): + sql = [] + for sequence_info in sequences: + no_autofield_sequence_name = self._get_no_autofield_sequence_name(sequence_info['table']) + table = self.quote_name(sequence_info['table']) + column = self.quote_name(sequence_info['column'] or 'id') + query = self._sequence_reset_sql % { + 'no_autofield_sequence_name': no_autofield_sequence_name, + 'table': table, + 'column': column, + 'table_name': strip_quotes(table), + 'column_name': strip_quotes(column), + } + sql.append(query) + return sql + + def sequence_reset_sql(self, style, model_list): + from django.db import models + output = [] + query = self._sequence_reset_sql + for model in model_list: + for f in model._meta.local_fields: + if isinstance(f, models.AutoField): + no_autofield_sequence_name = self._get_no_autofield_sequence_name(model._meta.db_table) + table = self.quote_name(model._meta.db_table) + column = self.quote_name(f.column) + output.append(query % { + 'no_autofield_sequence_name': no_autofield_sequence_name, + 'table': table, + 'column': column, + 'table_name': strip_quotes(table), + 'column_name': strip_quotes(column), + }) + # Only one AutoField is allowed per model, so don't + # continue to loop + break + for f in model._meta.many_to_many: + if not f.remote_field.through: + no_autofield_sequence_name = self._get_no_autofield_sequence_name(f.m2m_db_table()) + table = self.quote_name(f.m2m_db_table()) + column = self.quote_name('id') + output.append(query % { + 'no_autofield_sequence_name': no_autofield_sequence_name, + 'table': table, + 'column': column, + 'table_name': strip_quotes(table), + 'column_name': 'ID', + }) + return output + + def start_transaction_sql(self): + return '' + + def tablespace_sql(self, tablespace, inline=False): + if inline: + return "USING INDEX TABLESPACE %s" % self.quote_name(tablespace) + else: + return "TABLESPACE %s" % self.quote_name(tablespace) + + def adapt_datefield_value(self, value): + """ + Transform a date value to an object compatible with what is expected + by the backend driver for date columns. + The default implementation transforms the date to text, but that is not + necessary for Oracle. + """ + return value + + def adapt_datetimefield_value(self, value): + """ + Transform a datetime value to an object compatible with what is expected + by the backend driver for datetime columns. + + If naive datetime is passed assumes that is in UTC. Normally Django + models.DateTimeField makes sure that if USE_TZ is True passed datetime + is timezone aware. + """ + + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, 'resolve_expression'): + return value + + # cx_Oracle doesn't support tz-aware datetimes + if timezone.is_aware(value): + if settings.USE_TZ: + value = timezone.make_naive(value, self.connection.timezone) + else: + raise ValueError("Oracle backend does not support timezone-aware datetimes when USE_TZ is False.") + + return Oracle_datetime.from_datetime(value) + + def adapt_timefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, 'resolve_expression'): + return value + + if isinstance(value, str): + return datetime.datetime.strptime(value, '%H:%M:%S') + + # Oracle doesn't support tz-aware times + if timezone.is_aware(value): + raise ValueError("Oracle backend does not support timezone-aware times.") + + return Oracle_datetime(1900, 1, 1, value.hour, value.minute, + value.second, value.microsecond) + + def combine_expression(self, connector, sub_expressions): + lhs, rhs = sub_expressions + if connector == '%%': + return 'MOD(%s)' % ','.join(sub_expressions) + elif connector == '&': + return 'BITAND(%s)' % ','.join(sub_expressions) + elif connector == '|': + return 'BITAND(-%(lhs)s-1,%(rhs)s)+%(lhs)s' % {'lhs': lhs, 'rhs': rhs} + elif connector == '<<': + return '(%(lhs)s * POWER(2, %(rhs)s))' % {'lhs': lhs, 'rhs': rhs} + elif connector == '>>': + return 'FLOOR(%(lhs)s / POWER(2, %(rhs)s))' % {'lhs': lhs, 'rhs': rhs} + elif connector == '^': + return 'POWER(%s)' % ','.join(sub_expressions) + return super().combine_expression(connector, sub_expressions) + + def _get_no_autofield_sequence_name(self, table): + """ + Manually created sequence name to keep backward compatibility for + AutoFields that aren't Oracle identity columns. + """ + name_length = self.max_name_length() - 3 + return '%s_SQ' % truncate_name(strip_quotes(table), name_length).upper() + + def _get_sequence_name(self, cursor, table, pk_name): + cursor.execute(""" + SELECT sequence_name + FROM user_tab_identity_cols + WHERE table_name = UPPER(%s) + AND column_name = UPPER(%s)""", [table, pk_name]) + row = cursor.fetchone() + return self._get_no_autofield_sequence_name(table) if row is None else row[0] + + def bulk_insert_sql(self, fields, placeholder_rows): + query = [] + for row in placeholder_rows: + select = [] + for i, placeholder in enumerate(row): + # A model without any fields has fields=[None]. + if fields[i]: + internal_type = getattr(fields[i], 'target_field', fields[i]).get_internal_type() + placeholder = BulkInsertMapper.types.get(internal_type, '%s') % placeholder + # Add columns aliases to the first select to avoid "ORA-00918: + # column ambiguously defined" when two or more columns in the + # first select have the same value. + if not query: + placeholder = '%s col_%s' % (placeholder, i) + select.append(placeholder) + query.append('SELECT %s FROM DUAL' % ', '.join(select)) + # Bulk insert to tables with Oracle identity columns causes Oracle to + # add sequence.nextval to it. Sequence.nextval cannot be used with the + # UNION operator. To prevent incorrect SQL, move UNION to a subquery. + return 'SELECT * FROM (%s)' % ' UNION ALL '.join(query) + + def subtract_temporals(self, internal_type, lhs, rhs): + if internal_type == 'DateField': + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + return "NUMTODSINTERVAL(%s - %s, 'DAY')" % (lhs_sql, rhs_sql), lhs_params + rhs_params + return super().subtract_temporals(internal_type, lhs, rhs) + + def bulk_batch_size(self, fields, objs): + """Oracle restricts the number of parameters in a query.""" + if fields: + return self.connection.features.max_query_params // len(fields) + return len(objs) + + @cached_property + def compiler_module(self): + if self.connection.features.has_fetch_offset_support: + return super().compiler_module + return 'django.db.backends.oracle.compiler' diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/schema.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/schema.py new file mode 100644 index 0000000..105d6a4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/schema.py @@ -0,0 +1,169 @@ +import copy +import datetime +import re + +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.utils import DatabaseError + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_create_column = "ALTER TABLE %(table)s ADD %(column)s %(definition)s" + sql_alter_column_type = "MODIFY %(column)s %(type)s" + sql_alter_column_null = "MODIFY %(column)s NULL" + sql_alter_column_not_null = "MODIFY %(column)s NOT NULL" + sql_alter_column_default = "MODIFY %(column)s DEFAULT %(default)s" + sql_alter_column_no_default = "MODIFY %(column)s DEFAULT NULL" + sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s" + sql_delete_table = "DROP TABLE %(table)s CASCADE CONSTRAINTS" + + def quote_value(self, value): + if isinstance(value, (datetime.date, datetime.time, datetime.datetime)): + return "'%s'" % value + elif isinstance(value, str): + return "'%s'" % value.replace("\'", "\'\'") + elif isinstance(value, (bytes, bytearray, memoryview)): + return "'%s'" % value.hex() + elif isinstance(value, bool): + return "1" if value else "0" + else: + return str(value) + + def remove_field(self, model, field): + # If the column is an identity column, drop the identity before + # removing the field. + if self._is_identity_column(model._meta.db_table, field.column): + self._drop_identity(model._meta.db_table, field.column) + super().remove_field(model, field) + + def delete_model(self, model): + # Run superclass action + super().delete_model(model) + # Clean up manually created sequence. + self.execute(""" + DECLARE + i INTEGER; + BEGIN + SELECT COUNT(1) INTO i FROM USER_SEQUENCES + WHERE SEQUENCE_NAME = '%(sq_name)s'; + IF i = 1 THEN + EXECUTE IMMEDIATE 'DROP SEQUENCE "%(sq_name)s"'; + END IF; + END; + /""" % {'sq_name': self.connection.ops._get_no_autofield_sequence_name(model._meta.db_table)}) + + def alter_field(self, model, old_field, new_field, strict=False): + try: + super().alter_field(model, old_field, new_field, strict) + except DatabaseError as e: + description = str(e) + # If we're changing type to an unsupported type we need a + # SQLite-ish workaround + if 'ORA-22858' in description or 'ORA-22859' in description: + self._alter_field_type_workaround(model, old_field, new_field) + # If an identity column is changing to a non-numeric type, drop the + # identity first. + elif 'ORA-30675' in description: + self._drop_identity(model._meta.db_table, old_field.column) + self.alter_field(model, old_field, new_field, strict) + # If a primary key column is changing to an identity column, drop + # the primary key first. + elif 'ORA-30673' in description and old_field.primary_key: + self._delete_primary_key(model, strict=True) + self._alter_field_type_workaround(model, old_field, new_field) + else: + raise + + def _alter_field_type_workaround(self, model, old_field, new_field): + """ + Oracle refuses to change from some type to other type. + What we need to do instead is: + - Add a nullable version of the desired field with a temporary name. If + the new column is an auto field, then the temporary column can't be + nullable. + - Update the table to transfer values from old to new + - Drop old column + - Rename the new column and possibly drop the nullable property + """ + # Make a new field that's like the new one but with a temporary + # column name. + new_temp_field = copy.deepcopy(new_field) + new_temp_field.null = (new_field.get_internal_type() not in ('AutoField', 'BigAutoField')) + new_temp_field.column = self._generate_temp_name(new_field.column) + # Add it + self.add_field(model, new_temp_field) + # Explicit data type conversion + # https://docs.oracle.com/database/121/SQLRF/sql_elements002.htm#SQLRF51054 + new_value = self.quote_name(old_field.column) + old_type = old_field.db_type(self.connection) + if re.match('^N?CLOB', old_type): + new_value = "TO_CHAR(%s)" % new_value + old_type = 'VARCHAR2' + if re.match('^N?VARCHAR2', old_type): + new_internal_type = new_field.get_internal_type() + if new_internal_type == 'DateField': + new_value = "TO_DATE(%s, 'YYYY-MM-DD')" % new_value + elif new_internal_type == 'DateTimeField': + new_value = "TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')" % new_value + elif new_internal_type == 'TimeField': + # TimeField are stored as TIMESTAMP with a 1900-01-01 date part. + new_value = "TO_TIMESTAMP(CONCAT('1900-01-01 ', %s), 'YYYY-MM-DD HH24:MI:SS.FF')" % new_value + # Transfer values across + self.execute("UPDATE %s set %s=%s" % ( + self.quote_name(model._meta.db_table), + self.quote_name(new_temp_field.column), + new_value, + )) + # Drop the old field + self.remove_field(model, old_field) + # Rename and possibly make the new field NOT NULL + super().alter_field(model, new_temp_field, new_field) + + def normalize_name(self, name): + """ + Get the properly shortened and uppercased identifier as returned by + quote_name() but without the quotes. + """ + nn = self.quote_name(name) + if nn[0] == '"' and nn[-1] == '"': + nn = nn[1:-1] + return nn + + def _generate_temp_name(self, for_name): + """Generate temporary names for workarounds that need temp columns.""" + suffix = hex(hash(for_name)).upper()[1:] + return self.normalize_name(for_name + "_" + suffix) + + def prepare_default(self, value): + return self.quote_value(value) + + def _field_should_be_indexed(self, model, field): + create_index = super()._field_should_be_indexed(model, field) + db_type = field.db_type(self.connection) + if db_type is not None and db_type.lower() in self.connection._limited_data_types: + return False + return create_index + + def _unique_should_be_added(self, old_field, new_field): + return ( + super()._unique_should_be_added(old_field, new_field) and + not self._field_became_primary_key(old_field, new_field) + ) + + def _is_identity_column(self, table_name, column_name): + with self.connection.cursor() as cursor: + cursor.execute(""" + SELECT + CASE WHEN identity_column = 'YES' THEN 1 ELSE 0 END + FROM user_tab_cols + WHERE table_name = %s AND + column_name = %s + """, [self.normalize_name(table_name), self.normalize_name(column_name)]) + row = cursor.fetchone() + return row[0] if row else False + + def _drop_identity(self, table_name, column_name): + self.execute('ALTER TABLE %(table)s MODIFY %(column)s DROP IDENTITY' % { + 'table': self.quote_name(table_name), + 'column': self.quote_name(column_name), + }) diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/utils.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/utils.py new file mode 100644 index 0000000..3b26112 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/utils.py @@ -0,0 +1,56 @@ +import datetime + +from .base import Database + + +class InsertIdVar: + """ + A late-binding cursor variable that can be passed to Cursor.execute + as a parameter, in order to receive the id of the row created by an + insert statement. + """ + + def bind_parameter(self, cursor): + param = cursor.cursor.var(Database.NUMBER) + cursor._insert_id_var = param + return param + + +class Oracle_datetime(datetime.datetime): + """ + A datetime object, with an additional class attribute + to tell cx_Oracle to save the microseconds too. + """ + input_size = Database.TIMESTAMP + + @classmethod + def from_datetime(cls, dt): + return Oracle_datetime( + dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second, dt.microsecond, + ) + + +class BulkInsertMapper: + BLOB = 'TO_BLOB(%s)' + DATE = 'TO_DATE(%s)' + INTERVAL = 'CAST(%s as INTERVAL DAY(9) TO SECOND(6))' + NUMBER = 'TO_NUMBER(%s)' + TIMESTAMP = 'TO_TIMESTAMP(%s)' + + types = { + 'BigIntegerField': NUMBER, + 'BinaryField': BLOB, + 'BooleanField': NUMBER, + 'DateField': DATE, + 'DateTimeField': TIMESTAMP, + 'DecimalField': NUMBER, + 'DurationField': INTERVAL, + 'FloatField': NUMBER, + 'IntegerField': NUMBER, + 'NullBooleanField': NUMBER, + 'PositiveIntegerField': NUMBER, + 'PositiveSmallIntegerField': NUMBER, + 'SmallIntegerField': NUMBER, + 'TimeField': TIMESTAMP, + } diff --git a/env/lib/python3.5/site-packages/django/db/backends/oracle/validation.py b/env/lib/python3.5/site-packages/django/db/backends/oracle/validation.py new file mode 100644 index 0000000..e5a35fd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/oracle/validation.py @@ -0,0 +1,22 @@ +from django.core import checks +from django.db.backends.base.validation import BaseDatabaseValidation + + +class DatabaseValidation(BaseDatabaseValidation): + def check_field_type(self, field, field_type): + """Oracle doesn't support a database index on some data types.""" + errors = [] + if field.db_index and field_type.lower() in self.connection._limited_data_types: + errors.append( + checks.Warning( + 'Oracle does not support a database index on %s columns.' + % field_type, + hint=( + "An index won't be created. Silence this warning if " + "you don't care about it." + ), + obj=field, + id='fields.W162', + ) + ) + return errors diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__init__.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e21d68d63f6c0bc90f1c28cef49ff2bd14375af GIT binary patch literal 155 zcmWgR<>fL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(mxq2yZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaoJ!J9N=(j9%}XiPFUT)0NiRw*F3i!7kI&4@EQycT WE2zB1VUwGmQks)$2eP3Uh#3HNS0=3h literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a0c1e05b72d95c2b7f8165769c2e3e7c4a48725 GIT binary patch literal 8349 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 aPZTTQnJt{=n73+$63`gvY}Ip9`TqrOK5Tvf literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/client.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/client.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb94a149596324a6dbd87760c7e348fda245ca03 GIT binary patch literal 1966 zcmZ`(TW=dh6h5<8$Cq4O8c+pQc&c0!M=D6DRY8T)M3E{}=F_%q6gqD!7p#MXL;BFFL$WiCxUiacWGj7ynM(}1D?vPayfUvWoBM?4@N8Ua)U zbm3A|GbZ|-+TXB8y$;juUNRN@shF09OyrxxaVCuR`$UN!k}4VC`!E}eyh@olf?>Wc z=0i;NDae8d@NqA9=)$qQO8^4C-|^>n>w6fFRGO4xFWEbl$#9DM_KH(TPYP8HrRe|k zc&}Ry%S5TYQ$Xn2Gw;~R+&MXU$L`^C53oWh$}CBNFmkKc)$b%j*nf9;P)*B&a$N2Y zX5)qqoF>^^E4&Ytm{R?P(ccv5Q- zm)0>q!F-6RG`zm_^N`WGLkmU|SX}%3++Aznc^iduZ>_ON5Q}qvtpS+jo?xv3q@^aL zML=>v3xK!$(4nu5J(uKfR$DXtTI-Sg!)iCE!Y0I=U9Lg)324o6r0IE$DwignrM}sC zzCrUpX%Ui?tO9~M@djNG!_GI7s*oyc3p-0BcJsZ3a?6TXwfB@a*CKKpoA=jZXhhzk z1+spV_!jYP;yZNVy9}xcFxP3)Al|0?&+|5URg=!@BwsR&pL0ep3}AN!*zhfr)2!O0 z$(DIFZfDQ&w5!_|8+H%wmv60=Z9EC^+bd&daPM1oY51ELIN$GF>uGOg>6k-+C z_^SA{H&a6DnkkJ}h2(Q*{~6{8v((9f}I4DyaiC9_C4=H=tRuLI3#Zxc5|=oYa0P z$9ZK-L3{SBQz#vZ{FkvTa@~HGk5k}zlv^rgA$5rJ@$pel*VSxL$|4m?>3TX6=~jpX3jL^ELS6uWicOIgF-z9A*boI+3M#6Y@03TE^9$*GnWO<7O2a% zR=*~81T1tuVlCHqcG-@54RRf;^BW%)boYwE^lJMw?zCln15AbX$!u|>ce*B9OkUZv zV7-nfO&^fAK;SsIN2Jxb$fN5BQv6zM^0vWi`tlWG{BIw!4MqhZ z@S@ZH(&{=J@-wq;nw|U{B-&jz?rvI0(KTtUx+cyx4WpZ@MLy`R+c_8|y30l`U2~1; e*Gtd+2NGSozkJfSCMc>2(q#BK+icryhW`MHBfpCP literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/creation.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/creation.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c70c48d926badacd0c9f2ab207ef69ea30211a5b GIT binary patch literal 3192 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/introspection.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/introspection.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03609dd68d5a1caa7c3fbffbbe8ec1f3ddbadca8 GIT binary patch literal 9559 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/operations.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/operations.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e325a3c70b84fbf37461e7bb34aa4c8e100aa7b4 GIT binary patch literal 11345 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 V#jLFM8)KK>A!rCq1e^9;>3@zT5<&m~ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5f705fca0ee700cdcaa9d1b00f48afa957009b8 GIT binary patch literal 412 zcmYjNu};G<5IrX?AVd*D0x>XTKtdVXNZmjPfvT=ufTcpJ65FZVCU&qdLn|iWXW00j ztW5j@6X#T_uzl~I?YrkYpZ0qDLw^1I1pwb<+Yu1EBXbdfpv9m7C>cx{FcE+V;R9ew zqyrCe_lKe&W=&Wl=ge~0X_h(} zaig{5sEm%3)0Y@Ii4mIU>2VYX&EdUs()!!6wZ>Zi5>>Ec@|@y6!FK83cbs5ZC6%iB zS*;4u*NfSe7%njpi&W3e)@4bS@}<= 0', + 'PositiveSmallIntegerField': '"%(column)s" >= 0', + } + operators = { + 'exact': '= %s', + 'iexact': '= UPPER(%s)', + 'contains': 'LIKE %s', + 'icontains': 'LIKE UPPER(%s)', + 'regex': '~ %s', + 'iregex': '~* %s', + 'gt': '> %s', + 'gte': '>= %s', + 'lt': '< %s', + 'lte': '<= %s', + 'startswith': 'LIKE %s', + 'endswith': 'LIKE %s', + 'istartswith': 'LIKE UPPER(%s)', + 'iendswith': 'LIKE UPPER(%s)', + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')" + pattern_ops = { + 'contains': "LIKE '%%' || {} || '%%'", + 'icontains': "LIKE '%%' || UPPER({}) || '%%'", + 'startswith': "LIKE {} || '%%'", + 'istartswith': "LIKE UPPER({}) || '%%'", + 'endswith': "LIKE '%%' || {}", + 'iendswith': "LIKE '%%' || UPPER({})", + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + # PostgreSQL backend-specific attributes. + _named_cursor_idx = 0 + + def get_connection_params(self): + settings_dict = self.settings_dict + # None may be used to connect to the default 'postgres' db + if settings_dict['NAME'] == '': + raise ImproperlyConfigured( + "settings.DATABASES is improperly configured. " + "Please supply the NAME value.") + if len(settings_dict['NAME'] or '') > self.ops.max_name_length(): + raise ImproperlyConfigured( + "The database name '%s' (%d characters) is longer than " + "PostgreSQL's limit of %d characters. Supply a shorter NAME " + "in settings.DATABASES." % ( + settings_dict['NAME'], + len(settings_dict['NAME']), + self.ops.max_name_length(), + ) + ) + conn_params = { + 'database': settings_dict['NAME'] or 'postgres', + **settings_dict['OPTIONS'], + } + conn_params.pop('isolation_level', None) + if settings_dict['USER']: + conn_params['user'] = settings_dict['USER'] + if settings_dict['PASSWORD']: + conn_params['password'] = settings_dict['PASSWORD'] + if settings_dict['HOST']: + conn_params['host'] = settings_dict['HOST'] + if settings_dict['PORT']: + conn_params['port'] = settings_dict['PORT'] + return conn_params + + def get_new_connection(self, conn_params): + connection = Database.connect(**conn_params) + + # self.isolation_level must be set: + # - after connecting to the database in order to obtain the database's + # default when no value is explicitly specified in options. + # - before calling _set_autocommit() because if autocommit is on, that + # will set connection.isolation_level to ISOLATION_LEVEL_AUTOCOMMIT. + options = self.settings_dict['OPTIONS'] + try: + self.isolation_level = options['isolation_level'] + except KeyError: + self.isolation_level = connection.isolation_level + else: + # Set the isolation level to the value from OPTIONS. + if self.isolation_level != connection.isolation_level: + connection.set_session(isolation_level=self.isolation_level) + + return connection + + def ensure_timezone(self): + self.ensure_connection() + conn_timezone_name = self.connection.get_parameter_status('TimeZone') + timezone_name = self.timezone_name + if timezone_name and conn_timezone_name != timezone_name: + with self.connection.cursor() as cursor: + cursor.execute(self.ops.set_time_zone_sql(), [timezone_name]) + return True + return False + + def init_connection_state(self): + self.connection.set_client_encoding('UTF8') + + timezone_changed = self.ensure_timezone() + if timezone_changed: + # Commit after setting the time zone (see #17062) + if not self.get_autocommit(): + self.connection.commit() + + def create_cursor(self, name=None): + if name: + # In autocommit mode, the cursor will be used outside of a + # transaction, hence use a holdable cursor. + cursor = self.connection.cursor(name, scrollable=False, withhold=self.connection.autocommit) + else: + cursor = self.connection.cursor() + cursor.tzinfo_factory = utc_tzinfo_factory if settings.USE_TZ else None + return cursor + + def chunked_cursor(self): + self._named_cursor_idx += 1 + return self._cursor( + name='_django_curs_%d_%d' % ( + # Avoid reusing name in other threads + threading.current_thread().ident, + self._named_cursor_idx, + ) + ) + + def _set_autocommit(self, autocommit): + with self.wrap_database_errors: + self.connection.autocommit = autocommit + + def check_constraints(self, table_names=None): + """ + Check constraints by setting them to immediate. Return them to deferred + afterward. + """ + self.cursor().execute('SET CONSTRAINTS ALL IMMEDIATE') + self.cursor().execute('SET CONSTRAINTS ALL DEFERRED') + + def is_usable(self): + try: + # Use a psycopg cursor directly, bypassing Django's utilities. + self.connection.cursor().execute("SELECT 1") + except Database.Error: + return False + else: + return True + + @property + def _nodb_connection(self): + nodb_connection = super()._nodb_connection + try: + nodb_connection.ensure_connection() + except (Database.DatabaseError, WrappedDatabaseError): + warnings.warn( + "Normally Django will use a connection to the 'postgres' database " + "to avoid running initialization queries against the production " + "database when it's not needed (for example, when running tests). " + "Django was unable to create a connection to the 'postgres' database " + "and will use the first PostgreSQL database instead.", + RuntimeWarning + ) + for connection in connections.all(): + if connection.vendor == 'postgresql' and connection.settings_dict['NAME'] != 'postgres': + return self.__class__( + {**self.settings_dict, 'NAME': connection.settings_dict['NAME']}, + alias=self.alias, + allow_thread_sharing=False, + ) + return nodb_connection + + @cached_property + def pg_version(self): + with self.temporary_connection(): + return self.connection.server_version diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/client.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/client.py new file mode 100644 index 0000000..7fca6ef --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/client.py @@ -0,0 +1,71 @@ +import os +import signal +import subprocess + +from django.core.files.temp import NamedTemporaryFile +from django.db.backends.base.client import BaseDatabaseClient + + +def _escape_pgpass(txt): + """ + Escape a fragment of a PostgreSQL .pgpass file. + """ + return txt.replace('\\', '\\\\').replace(':', '\\:') + + +class DatabaseClient(BaseDatabaseClient): + executable_name = 'psql' + + @classmethod + def runshell_db(cls, conn_params): + args = [cls.executable_name] + + host = conn_params.get('host', '') + port = conn_params.get('port', '') + dbname = conn_params.get('database', '') + user = conn_params.get('user', '') + passwd = conn_params.get('password', '') + + if user: + args += ['-U', user] + if host: + args += ['-h', host] + if port: + args += ['-p', str(port)] + args += [dbname] + + temp_pgpass = None + sigint_handler = signal.getsignal(signal.SIGINT) + try: + if passwd: + # Create temporary .pgpass file. + temp_pgpass = NamedTemporaryFile(mode='w+') + try: + print( + _escape_pgpass(host) or '*', + str(port) or '*', + _escape_pgpass(dbname) or '*', + _escape_pgpass(user) or '*', + _escape_pgpass(passwd), + file=temp_pgpass, + sep=':', + flush=True, + ) + os.environ['PGPASSFILE'] = temp_pgpass.name + except UnicodeEncodeError: + # If the current locale can't encode the data, let the + # user input the password manually. + pass + # Allow SIGINT to pass to psql to abort queries. + signal.signal(signal.SIGINT, signal.SIG_IGN) + subprocess.check_call(args) + finally: + # Restore the original SIGINT handler. + signal.signal(signal.SIGINT, sigint_handler) + if temp_pgpass: + temp_pgpass.close() + if 'PGPASSFILE' in os.environ: # unit tests need cleanup + del os.environ['PGPASSFILE'] + + def runshell(self): + DatabaseClient.runshell_db(self.connection.get_connection_params()) diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/creation.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/creation.py new file mode 100644 index 0000000..4b3c9d1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/creation.py @@ -0,0 +1,77 @@ +import sys + +from psycopg2 import errorcodes + +from django.db.backends.base.creation import BaseDatabaseCreation +from django.db.backends.utils import strip_quotes + + +class DatabaseCreation(BaseDatabaseCreation): + + def _quote_name(self, name): + return self.connection.ops.quote_name(name) + + def _get_database_create_suffix(self, encoding=None, template=None): + suffix = "" + if encoding: + suffix += " ENCODING '{}'".format(encoding) + if template: + suffix += " TEMPLATE {}".format(self._quote_name(template)) + return suffix and "WITH" + suffix + + def sql_table_creation_suffix(self): + test_settings = self.connection.settings_dict['TEST'] + assert test_settings['COLLATION'] is None, ( + "PostgreSQL does not support collation setting at database creation time." + ) + return self._get_database_create_suffix( + encoding=test_settings['CHARSET'], + template=test_settings.get('TEMPLATE'), + ) + + def _database_exists(self, cursor, database_name): + cursor.execute('SELECT 1 FROM pg_catalog.pg_database WHERE datname = %s', [strip_quotes(database_name)]) + return cursor.fetchone() is not None + + def _execute_create_test_db(self, cursor, parameters, keepdb=False): + try: + if keepdb and self._database_exists(cursor, parameters['dbname']): + # If the database should be kept and it already exists, don't + # try to create a new one. + return + super()._execute_create_test_db(cursor, parameters, keepdb) + except Exception as e: + if getattr(e.__cause__, 'pgcode', '') != errorcodes.DUPLICATE_DATABASE: + # All errors except "database already exists" cancel tests. + sys.stderr.write('Got an error creating the test database: %s\n' % e) + sys.exit(2) + elif not keepdb: + # If the database should be kept, ignore "database already + # exists". + raise e + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + # CREATE DATABASE ... WITH TEMPLATE ... requires closing connections + # to the template database. + self.connection.close() + + source_database_name = self.connection.settings_dict['NAME'] + target_database_name = self.get_test_db_clone_settings(suffix)['NAME'] + test_db_params = { + 'dbname': self._quote_name(target_database_name), + 'suffix': self._get_database_create_suffix(template=source_database_name), + } + with self._nodb_connection.cursor() as cursor: + try: + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception: + try: + if verbosity >= 1: + print("Destroying old test database for alias %s..." % ( + self._get_database_display_str(verbosity, target_database_name), + )) + cursor.execute('DROP DATABASE %(dbname)s' % test_db_params) + self._execute_create_test_db(cursor, test_db_params, keepdb) + except Exception as e: + sys.stderr.write("Got an error cloning the test database: %s\n" % e) + sys.exit(2) diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/features.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/features.py new file mode 100644 index 0000000..06b0303 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/features.py @@ -0,0 +1,63 @@ +from django.db.backends.base.features import BaseDatabaseFeatures +from django.db.utils import InterfaceError +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + allows_group_by_selected_pks = True + can_return_id_from_insert = True + can_return_ids_from_bulk_insert = True + has_real_datatype = True + has_native_uuid_field = True + has_native_duration_field = True + can_defer_constraint_checks = True + has_select_for_update = True + has_select_for_update_nowait = True + has_select_for_update_of = True + uses_savepoints = True + can_release_savepoints = True + supports_tablespaces = True + supports_transactions = True + can_introspect_autofield = True + can_introspect_ip_address_field = True + can_introspect_small_integer_field = True + can_distinct_on_fields = True + can_rollback_ddl = True + supports_combined_alters = True + nulls_order_largest = True + closed_cursor_error_class = InterfaceError + has_case_insensitive_like = False + requires_sqlparse_for_splitting = False + greatest_least_ignores_nulls = True + can_clone_databases = True + supports_temporal_subtraction = True + supports_slicing_ordering_in_compound = True + create_test_procedure_without_params_sql = """ + CREATE FUNCTION test_procedure () RETURNS void AS $$ + DECLARE + V_I INTEGER; + BEGIN + V_I := 1; + END; + $$ LANGUAGE plpgsql;""" + create_test_procedure_with_int_param_sql = """ + CREATE FUNCTION test_procedure (P_I INTEGER) RETURNS void AS $$ + DECLARE + V_I INTEGER; + BEGIN + V_I := P_I; + END; + $$ LANGUAGE plpgsql;""" + supports_over_clause = True + supports_aggregate_filter_clause = True + supported_explain_formats = {'JSON', 'TEXT', 'XML', 'YAML'} + validates_explain_options = False # A query will error on invalid options. + + @cached_property + def is_postgresql_9_5(self): + return self.connection.pg_version >= 90500 + + has_select_for_update_skip_locked = is_postgresql_9_5 + has_brin_index_support = is_postgresql_9_5 + has_jsonb_agg = is_postgresql_9_5 + has_gin_pending_list_limit = is_postgresql_9_5 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/introspection.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/introspection.py new file mode 100644 index 0000000..a24e37b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/introspection.py @@ -0,0 +1,215 @@ +from django.db.backends.base.introspection import ( + BaseDatabaseIntrospection, FieldInfo, TableInfo, +) +from django.db.models.indexes import Index + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + # Maps type codes to Django Field types. + data_types_reverse = { + 16: 'BooleanField', + 17: 'BinaryField', + 20: 'BigIntegerField', + 21: 'SmallIntegerField', + 23: 'IntegerField', + 25: 'TextField', + 700: 'FloatField', + 701: 'FloatField', + 869: 'GenericIPAddressField', + 1042: 'CharField', # blank-padded + 1043: 'CharField', + 1082: 'DateField', + 1083: 'TimeField', + 1114: 'DateTimeField', + 1184: 'DateTimeField', + 1266: 'TimeField', + 1700: 'DecimalField', + 2950: 'UUIDField', + } + + ignored_tables = [] + + def get_field_type(self, data_type, description): + field_type = super().get_field_type(data_type, description) + if description.default and 'nextval' in description.default: + if field_type == 'IntegerField': + return 'AutoField' + elif field_type == 'BigIntegerField': + return 'BigAutoField' + return field_type + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + cursor.execute(""" + SELECT c.relname, c.relkind + FROM pg_catalog.pg_class c + LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace + WHERE c.relkind IN ('r', 'v') + AND n.nspname NOT IN ('pg_catalog', 'pg_toast') + AND pg_catalog.pg_table_is_visible(c.oid)""") + return [TableInfo(row[0], {'r': 't', 'v': 'v'}.get(row[1])) + for row in cursor.fetchall() + if row[0] not in self.ignored_tables] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + # As cursor.description does not return reliably the nullable property, + # we have to query the information_schema (#7783) + cursor.execute(""" + SELECT column_name, is_nullable, column_default + FROM information_schema.columns + WHERE table_name = %s""", [table_name]) + field_map = {line[0]: line[1:] for line in cursor.fetchall()} + cursor.execute("SELECT * FROM %s LIMIT 1" % self.connection.ops.quote_name(table_name)) + return [ + FieldInfo(*line[0:6], field_map[line.name][0] == 'YES', field_map[line.name][1]) + for line in cursor.description + ] + + def get_sequences(self, cursor, table_name, table_fields=()): + sequences = [] + cursor.execute(""" + SELECT s.relname as sequence_name, col.attname + FROM pg_class s + JOIN pg_namespace sn ON sn.oid = s.relnamespace + JOIN pg_depend d ON d.refobjid = s.oid AND d.refclassid='pg_class'::regclass + JOIN pg_attrdef ad ON ad.oid = d.objid AND d.classid = 'pg_attrdef'::regclass + JOIN pg_attribute col ON col.attrelid = ad.adrelid AND col.attnum = ad.adnum + JOIN pg_class tbl ON tbl.oid = ad.adrelid + JOIN pg_namespace n ON n.oid = tbl.relnamespace + WHERE s.relkind = 'S' + AND d.deptype in ('a', 'n') + AND n.nspname = 'public' + AND tbl.relname = %s + """, [table_name]) + for row in cursor.fetchall(): + sequences.append({'name': row[0], 'table': table_name, 'column': row[1]}) + return sequences + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + cursor.execute(""" + SELECT c2.relname, a1.attname, a2.attname + FROM pg_constraint con + LEFT JOIN pg_class c1 ON con.conrelid = c1.oid + LEFT JOIN pg_class c2 ON con.confrelid = c2.oid + LEFT JOIN pg_attribute a1 ON c1.oid = a1.attrelid AND a1.attnum = con.conkey[1] + LEFT JOIN pg_attribute a2 ON c2.oid = a2.attrelid AND a2.attnum = con.confkey[1] + WHERE c1.relname = %s + AND con.contype = 'f'""", [table_name]) + relations = {} + for row in cursor.fetchall(): + relations[row[1]] = (row[2], row[0]) + return relations + + def get_key_columns(self, cursor, table_name): + key_columns = [] + cursor.execute(""" + SELECT kcu.column_name, ccu.table_name AS referenced_table, ccu.column_name AS referenced_column + FROM information_schema.constraint_column_usage ccu + LEFT JOIN information_schema.key_column_usage kcu + ON ccu.constraint_catalog = kcu.constraint_catalog + AND ccu.constraint_schema = kcu.constraint_schema + AND ccu.constraint_name = kcu.constraint_name + LEFT JOIN information_schema.table_constraints tc + ON ccu.constraint_catalog = tc.constraint_catalog + AND ccu.constraint_schema = tc.constraint_schema + AND ccu.constraint_name = tc.constraint_name + WHERE kcu.table_name = %s AND tc.constraint_type = 'FOREIGN KEY'""", [table_name]) + key_columns.extend(cursor.fetchall()) + return key_columns + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. Also retrieve the definition of expression-based + indexes. + """ + constraints = {} + # Loop over the key table, collecting things as constraints. The column + # array must return column names in the same order in which they were + # created. + cursor.execute(""" + SELECT + c.conname, + array( + SELECT attname + FROM unnest(c.conkey) WITH ORDINALITY cols(colid, arridx) + JOIN pg_attribute AS ca ON cols.colid = ca.attnum + WHERE ca.attrelid = c.conrelid + ORDER BY cols.arridx + ), + c.contype, + (SELECT fkc.relname || '.' || fka.attname + FROM pg_attribute AS fka + JOIN pg_class AS fkc ON fka.attrelid = fkc.oid + WHERE fka.attrelid = c.confrelid AND fka.attnum = c.confkey[1]), + cl.reloptions + FROM pg_constraint AS c + JOIN pg_class AS cl ON c.conrelid = cl.oid + JOIN pg_namespace AS ns ON cl.relnamespace = ns.oid + WHERE ns.nspname = %s AND cl.relname = %s + """, ["public", table_name]) + for constraint, columns, kind, used_cols, options in cursor.fetchall(): + constraints[constraint] = { + "columns": columns, + "primary_key": kind == "p", + "unique": kind in ["p", "u"], + "foreign_key": tuple(used_cols.split(".", 1)) if kind == "f" else None, + "check": kind == "c", + "index": False, + "definition": None, + "options": options, + } + # Now get indexes + cursor.execute(""" + SELECT + indexname, array_agg(attname ORDER BY arridx), indisunique, indisprimary, + array_agg(ordering ORDER BY arridx), amname, exprdef, s2.attoptions + FROM ( + SELECT + c2.relname as indexname, idx.*, attr.attname, am.amname, + CASE + WHEN idx.indexprs IS NOT NULL THEN + pg_get_indexdef(idx.indexrelid) + END AS exprdef, + CASE am.amname + WHEN 'btree' THEN + CASE (option & 1) + WHEN 1 THEN 'DESC' ELSE 'ASC' + END + END as ordering, + c2.reloptions as attoptions + FROM ( + SELECT * + FROM pg_index i, unnest(i.indkey, i.indoption) WITH ORDINALITY koi(key, option, arridx) + ) idx + LEFT JOIN pg_class c ON idx.indrelid = c.oid + LEFT JOIN pg_class c2 ON idx.indexrelid = c2.oid + LEFT JOIN pg_am am ON c2.relam = am.oid + LEFT JOIN pg_attribute attr ON attr.attrelid = c.oid AND attr.attnum = idx.key + WHERE c.relname = %s + ) s2 + GROUP BY indexname, indisunique, indisprimary, amname, exprdef, attoptions; + """, [table_name]) + for index, columns, unique, primary, orders, type_, definition, options in cursor.fetchall(): + if index not in constraints: + constraints[index] = { + "columns": columns if columns != [None] else [], + "orders": orders if orders != [None] else [], + "primary_key": primary, + "unique": unique, + "foreign_key": None, + "check": False, + "index": True, + "type": Index.suffix if type_ == 'btree' else type_, + "definition": definition, + "options": options, + } + return constraints diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/operations.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/operations.py new file mode 100644 index 0000000..80a28bc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/operations.py @@ -0,0 +1,275 @@ +from psycopg2.extras import Inet + +from django.conf import settings +from django.db import NotSupportedError +from django.db.backends.base.operations import BaseDatabaseOperations + + +class DatabaseOperations(BaseDatabaseOperations): + cast_char_field_without_max_length = 'varchar' + explain_prefix = 'EXPLAIN' + + def unification_cast_sql(self, output_field): + internal_type = output_field.get_internal_type() + if internal_type in ("GenericIPAddressField", "IPAddressField", "TimeField", "UUIDField"): + # PostgreSQL will resolve a union as type 'text' if input types are + # 'unknown'. + # https://www.postgresql.org/docs/current/static/typeconv-union-case.html + # These fields cannot be implicitly cast back in the default + # PostgreSQL configuration so we need to explicitly cast them. + # We must also remove components of the type within brackets: + # varchar(255) -> varchar. + return 'CAST(%%s AS %s)' % output_field.db_type(self.connection).split('(')[0] + return '%s' + + def date_extract_sql(self, lookup_type, field_name): + # https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT + if lookup_type == 'week_day': + # For consistency across backends, we return Sunday=1, Saturday=7. + return "EXTRACT('dow' FROM %s) + 1" % field_name + else: + return "EXTRACT('%s' FROM %s)" % (lookup_type, field_name) + + def date_trunc_sql(self, lookup_type, field_name): + # https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC + return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name) + + def _convert_field_to_tz(self, field_name, tzname): + if settings.USE_TZ: + field_name = "%s AT TIME ZONE '%s'" % (field_name, tzname) + return field_name + + def datetime_cast_date_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return '(%s)::date' % field_name + + def datetime_cast_time_sql(self, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return '(%s)::time' % field_name + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + return self.date_extract_sql(lookup_type, field_name) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + field_name = self._convert_field_to_tz(field_name, tzname) + # https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC + return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name) + + def time_trunc_sql(self, lookup_type, field_name): + return "DATE_TRUNC('%s', %s)::time" % (lookup_type, field_name) + + def deferrable_sql(self): + return " DEFERRABLE INITIALLY DEFERRED" + + def fetch_returned_insert_ids(self, cursor): + """ + Given a cursor object that has just performed an INSERT...RETURNING + statement into a table that has an auto-incrementing ID, return the + list of newly created IDs. + """ + return [item[0] for item in cursor.fetchall()] + + def lookup_cast(self, lookup_type, internal_type=None): + lookup = '%s' + + # Cast text lookups to text to allow things like filter(x__contains=4) + if lookup_type in ('iexact', 'contains', 'icontains', 'startswith', + 'istartswith', 'endswith', 'iendswith', 'regex', 'iregex'): + if internal_type in ('IPAddressField', 'GenericIPAddressField'): + lookup = "HOST(%s)" + elif internal_type in ('CICharField', 'CIEmailField', 'CITextField'): + lookup = '%s::citext' + else: + lookup = "%s::text" + + # Use UPPER(x) for case-insensitive lookups; it's faster. + if lookup_type in ('iexact', 'icontains', 'istartswith', 'iendswith'): + lookup = 'UPPER(%s)' % lookup + + return lookup + + def no_limit_value(self): + return None + + def prepare_sql_script(self, sql): + return [sql] + + def quote_name(self, name): + if name.startswith('"') and name.endswith('"'): + return name # Quoting once is enough. + return '"%s"' % name + + def set_time_zone_sql(self): + return "SET TIME ZONE %s" + + def sql_flush(self, style, tables, sequences, allow_cascade=False): + if tables: + # Perform a single SQL 'TRUNCATE x, y, z...;' statement. It allows + # us to truncate tables referenced by a foreign key in any other + # table. + tables_sql = ', '.join( + style.SQL_FIELD(self.quote_name(table)) for table in tables) + if allow_cascade: + sql = ['%s %s %s;' % ( + style.SQL_KEYWORD('TRUNCATE'), + tables_sql, + style.SQL_KEYWORD('CASCADE'), + )] + else: + sql = ['%s %s;' % ( + style.SQL_KEYWORD('TRUNCATE'), + tables_sql, + )] + sql.extend(self.sequence_reset_by_name_sql(style, sequences)) + return sql + else: + return [] + + def sequence_reset_by_name_sql(self, style, sequences): + # 'ALTER SEQUENCE sequence_name RESTART WITH 1;'... style SQL statements + # to reset sequence indices + sql = [] + for sequence_info in sequences: + table_name = sequence_info['table'] + # 'id' will be the case if it's an m2m using an autogenerated + # intermediate table (see BaseDatabaseIntrospection.sequence_list). + column_name = sequence_info['column'] or 'id' + sql.append("%s setval(pg_get_serial_sequence('%s','%s'), 1, false);" % ( + style.SQL_KEYWORD('SELECT'), + style.SQL_TABLE(self.quote_name(table_name)), + style.SQL_FIELD(column_name), + )) + return sql + + def tablespace_sql(self, tablespace, inline=False): + if inline: + return "USING INDEX TABLESPACE %s" % self.quote_name(tablespace) + else: + return "TABLESPACE %s" % self.quote_name(tablespace) + + def sequence_reset_sql(self, style, model_list): + from django.db import models + output = [] + qn = self.quote_name + for model in model_list: + # Use `coalesce` to set the sequence for each model to the max pk value if there are records, + # or 1 if there are none. Set the `is_called` property (the third argument to `setval`) to true + # if there are records (as the max pk value is already in use), otherwise set it to false. + # Use pg_get_serial_sequence to get the underlying sequence name from the table name + # and column name (available since PostgreSQL 8) + + for f in model._meta.local_fields: + if isinstance(f, models.AutoField): + output.append( + "%s setval(pg_get_serial_sequence('%s','%s'), " + "coalesce(max(%s), 1), max(%s) %s null) %s %s;" % ( + style.SQL_KEYWORD('SELECT'), + style.SQL_TABLE(qn(model._meta.db_table)), + style.SQL_FIELD(f.column), + style.SQL_FIELD(qn(f.column)), + style.SQL_FIELD(qn(f.column)), + style.SQL_KEYWORD('IS NOT'), + style.SQL_KEYWORD('FROM'), + style.SQL_TABLE(qn(model._meta.db_table)), + ) + ) + break # Only one AutoField is allowed per model, so don't bother continuing. + for f in model._meta.many_to_many: + if not f.remote_field.through: + output.append( + "%s setval(pg_get_serial_sequence('%s','%s'), " + "coalesce(max(%s), 1), max(%s) %s null) %s %s;" % ( + style.SQL_KEYWORD('SELECT'), + style.SQL_TABLE(qn(f.m2m_db_table())), + style.SQL_FIELD('id'), + style.SQL_FIELD(qn('id')), + style.SQL_FIELD(qn('id')), + style.SQL_KEYWORD('IS NOT'), + style.SQL_KEYWORD('FROM'), + style.SQL_TABLE(qn(f.m2m_db_table())) + ) + ) + return output + + def prep_for_iexact_query(self, x): + return x + + def max_name_length(self): + """ + Return the maximum length of an identifier. + + The maximum length of an identifier is 63 by default, but can be + changed by recompiling PostgreSQL after editing the NAMEDATALEN + macro in src/include/pg_config_manual.h. + + This implementation returns 63, but can be overridden by a custom + database backend that inherits most of its behavior from this one. + """ + return 63 + + def distinct_sql(self, fields, params): + if fields: + params = [param for param_list in params for param in param_list] + return (['DISTINCT ON (%s)' % ', '.join(fields)], params) + else: + return ['DISTINCT'], [] + + def last_executed_query(self, cursor, sql, params): + # http://initd.org/psycopg/docs/cursor.html#cursor.query + # The query attribute is a Psycopg extension to the DB API 2.0. + if cursor.query is not None: + return cursor.query.decode() + return None + + def return_insert_id(self): + return "RETURNING %s", () + + def bulk_insert_sql(self, fields, placeholder_rows): + placeholder_rows_sql = (", ".join(row) for row in placeholder_rows) + values_sql = ", ".join("(%s)" % sql for sql in placeholder_rows_sql) + return "VALUES " + values_sql + + def adapt_datefield_value(self, value): + return value + + def adapt_datetimefield_value(self, value): + return value + + def adapt_timefield_value(self, value): + return value + + def adapt_ipaddressfield_value(self, value): + if value: + return Inet(value) + return None + + def subtract_temporals(self, internal_type, lhs, rhs): + if internal_type == 'DateField': + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + return "(interval '1 day' * (%s - %s))" % (lhs_sql, rhs_sql), lhs_params + rhs_params + return super().subtract_temporals(internal_type, lhs, rhs) + + def window_frame_range_start_end(self, start=None, end=None): + start_, end_ = super().window_frame_range_start_end(start, end) + if (start and start < 0) or (end and end > 0): + raise NotSupportedError( + 'PostgreSQL only supports UNBOUNDED together with PRECEDING ' + 'and FOLLOWING.' + ) + return start_, end_ + + def explain_query_prefix(self, format=None, **options): + prefix = super().explain_query_prefix(format) + extra = {} + if format: + extra['FORMAT'] = format + if options: + extra.update({ + name.upper(): 'true' if value else 'false' + for name, value in options.items() + }) + if extra: + prefix += ' (%s)' % ', '.join('%s %s' % i for i in extra.items()) + return prefix diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/schema.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/schema.py new file mode 100644 index 0000000..18388cc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/schema.py @@ -0,0 +1,134 @@ +import psycopg2 + +from django.db.backends.base.schema import BaseDatabaseSchemaEditor + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_alter_column_type = "ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::%(type)s" + + sql_create_sequence = "CREATE SEQUENCE %(sequence)s" + sql_delete_sequence = "DROP SEQUENCE IF EXISTS %(sequence)s CASCADE" + sql_set_sequence_max = "SELECT setval('%(sequence)s', MAX(%(column)s)) FROM %(table)s" + + sql_create_index = "CREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(extra)s" + sql_create_varchar_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s varchar_pattern_ops)%(extra)s" + sql_create_text_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s text_pattern_ops)%(extra)s" + sql_delete_index = "DROP INDEX IF EXISTS %(name)s" + + # Setting the constraint to IMMEDIATE runs any deferred checks to allow + # dropping it in the same transaction. + sql_delete_fk = "SET CONSTRAINTS %(name)s IMMEDIATE; ALTER TABLE %(table)s DROP CONSTRAINT %(name)s" + + sql_delete_procedure = 'DROP FUNCTION %(procedure)s(%(param_types)s)' + + def quote_value(self, value): + return psycopg2.extensions.adapt(value) + + def _field_indexes_sql(self, model, field): + output = super()._field_indexes_sql(model, field) + like_index_statement = self._create_like_index_sql(model, field) + if like_index_statement is not None: + output.append(like_index_statement) + return output + + def _create_like_index_sql(self, model, field): + """ + Return the statement to create an index with varchar operator pattern + when the column type is 'varchar' or 'text', otherwise return None. + """ + db_type = field.db_type(connection=self.connection) + if db_type is not None and (field.db_index or field.unique): + # Fields with database column types of `varchar` and `text` need + # a second index that specifies their operator class, which is + # needed when performing correct LIKE queries outside the + # C locale. See #12234. + # + # The same doesn't apply to array fields such as varchar[size] + # and text[size], so skip them. + if '[' in db_type: + return None + if db_type.startswith('varchar'): + return self._create_index_sql(model, [field], suffix='_like', sql=self.sql_create_varchar_index) + elif db_type.startswith('text'): + return self._create_index_sql(model, [field], suffix='_like', sql=self.sql_create_text_index) + return None + + def _alter_column_type_sql(self, model, old_field, new_field, new_type): + """Make ALTER TYPE with SERIAL make sense.""" + table = model._meta.db_table + if new_type.lower() in ("serial", "bigserial"): + column = new_field.column + sequence_name = "%s_%s_seq" % (table, column) + col_type = "integer" if new_type.lower() == "serial" else "bigint" + return ( + ( + self.sql_alter_column_type % { + "column": self.quote_name(column), + "type": col_type, + }, + [], + ), + [ + ( + self.sql_delete_sequence % { + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ( + self.sql_create_sequence % { + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ( + self.sql_alter_column % { + "table": self.quote_name(table), + "changes": self.sql_alter_column_default % { + "column": self.quote_name(column), + "default": "nextval('%s')" % self.quote_name(sequence_name), + } + }, + [], + ), + ( + self.sql_set_sequence_max % { + "table": self.quote_name(table), + "column": self.quote_name(column), + "sequence": self.quote_name(sequence_name), + }, + [], + ), + ], + ) + else: + return super()._alter_column_type_sql(model, old_field, new_field, new_type) + + def _alter_field(self, model, old_field, new_field, old_type, new_type, + old_db_params, new_db_params, strict=False): + # Drop indexes on varchar/text/citext columns that are changing to a + # different type. + if (old_field.db_index or old_field.unique) and ( + (old_type.startswith('varchar') and not new_type.startswith('varchar')) or + (old_type.startswith('text') and not new_type.startswith('text')) or + (old_type.startswith('citext') and not new_type.startswith('citext')) + ): + index_name = self._create_index_name(model._meta.db_table, [old_field.column], suffix='_like') + self.execute(self._delete_constraint_sql(self.sql_delete_index, model, index_name)) + + super()._alter_field( + model, old_field, new_field, old_type, new_type, old_db_params, + new_db_params, strict, + ) + # Added an index? Create any PostgreSQL-specific indexes. + if ((not (old_field.db_index or old_field.unique) and new_field.db_index) or + (not old_field.unique and new_field.unique)): + like_index_statement = self._create_like_index_sql(model, new_field) + if like_index_statement is not None: + self.execute(like_index_statement) + + # Removed an index? Drop any PostgreSQL-specific indexes. + if old_field.unique and not (new_field.db_index or new_field.unique): + index_to_remove = self._create_index_name(model._meta.db_table, [old_field.column], suffix='_like') + self.execute(self._delete_constraint_sql(self.sql_delete_index, model, index_to_remove)) diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql/utils.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql/utils.py new file mode 100644 index 0000000..2c03ab3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql/utils.py @@ -0,0 +1,7 @@ +from django.utils.timezone import utc + + +def utc_tzinfo_factory(offset): + if offset != 0: + raise AssertionError("database connection isn't set to UTC") + return utc diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__init__.py b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__init__.py new file mode 100644 index 0000000..db97c5b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__init__.py @@ -0,0 +1,9 @@ +import warnings + +from django.utils.deprecation import RemovedInDjango30Warning + +warnings.warn( + "The django.db.backends.postgresql_psycopg2 module is deprecated in " + "favor of django.db.backends.postgresql.", + RemovedInDjango30Warning, stacklevel=2 +) diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f19fd4beb1a1cdf53e98918722979a8623dd26e7 GIT binary patch literal 424 zcmaJ;%Sr<=6un6wmSVw`beZieIwKVXMZ|?0H-ZlkiZIMfZpTbBNt~pWcI(&pOS5&= zUvOpGvEo7u$;r*-BKKFL8l# zO}(?AUH4uaA9gbQHZgZX+Hm)P(5l){>-L8D4%MDNY~k}Za;1rkFr#!XBp<0FKIP+? piyEPyEsb`eqCY}KaV(T@aU7au-8*k0UijYt+w-tb4``RP=ob~4d?)|_ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7fb278c27839b3c3015c503b66c5463d8b0c1c6a GIT binary patch literal 194 zcmWgR<>fL;wu;eUU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8Xgr`NbvaMXAMwIeJNn#i=V9ikN}&VB(jreo1bDenDn|Zc=GxPKs_`R=j13QFe)b zN>*ZCdOn;=(oafE&Q8rsDb`0A7hh0ZnVescZUmGpPSq=@yv1RYo1apelWNBZavKmc F008FBGR^=1 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/client.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/client.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef7b319330251f596dd72fcf0c8fdef877ddb285 GIT binary patch literal 198 zcmWgR<>fL;wu;eWU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8TFG`NbvaMXAMwIeN)CnW=dtD;bKIfhxenFMs`#+yecA%mUq{(#)I`-Mp-L%M_#R z68)5{#Ju!;IF+QIl$e~InwL_nk1#O4ptv$QzaZU6A7ZjzLFFwDo80`A(wtN~Mv(h} Gm;nIXdo-K? literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/creation.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/creation.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8361e62f08711e9f483b6404c4d2a861968821be GIT binary patch literal 202 zcmWgR<>fL;wu;eVU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8Vb``NbvaMXAMwIeN)Osfi_-`FSfDikN|Fz{IaW{gT`Q{esK_-K5gYoD|)>ta!^5 zqwEs>l&r+O^n5s#q@R?SoSmANQml_KGQOa=GC98>-AEs1wq8NyEe@O9{FKt1R69nH I8-bVs0MWQMP5=M^ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/features.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/features.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c175ae2725648a6259c082ed4ee4e793b1fdef3 GIT binary patch literal 202 zcmWgR<>fL;wu;eVU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8Vb``NbvaMXAMwIeKZSi6x~#=1PVlW}q4{@hecjB)34nAhSR>sWdYuMK>=i-ZI4~ zyF@=FD={xUA5JCdCnY9lr{<*;>m!VeFDR}|&M!ze(ubL?S5SG2!zMRBr8FnijuGTW HAZ7pn*Dy9> literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/introspection.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/introspection.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88ad4984fefb7ee54933e3ff5aeddce96c39547d GIT binary patch literal 212 zcmWgR<>fL;wu&)iU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8PH=`NbvaMXAMwIeM9SB}Mtg1*yp;nfZAu8H$*J3cfL;wu;eXU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8UQm`NbvaMXAMwIePg8sYQt;nfZCeD;bKIfvUj7uVDR>+yecA%mUq{(#)I`-Mp-L z%M_#R68)5{#Ju!;IF+QIl$e~InwL_nk1#a8ptv$QzaZU6A7Q#)LFFwDo80`A(wtN~ KMvyy!m;nIXeK;}z literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/schema.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/postgresql_psycopg2/__pycache__/schema.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01468c469da25a006a567928ab0676169eea2dfc GIT binary patch literal 198 zcmWgR<>fL;wu;eWU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8TFG`NbvaMXAMwIeNv(8L7F6D;bKIfhxenFMs`#+yecA%mUq{(#)I`-Mp-L%M_#R z68)5{#Ju!;IF+QIl$e~InwL_nk1#O4ptv$QzaZU6A7ZjzLFFwDo80`A(wtN~Mv(h} Gm;nIQTQqfL;wu;eYU|@I*#Bjg_WH|tFF&~gf0U}0*90rDv6efmXP3D&%Sxv@Uj9Px0 zj8Osw`NbvaMXAMwIeMifnK{KP8H$*J3c$oKKmC&20{w!_0^Ow2%$yY6ysUW36r=1C z{gkZ4y!3oHm874Pn4F!Omr|^cFfYEKxH37vAl*nGY_MKIfL;wu)f@g2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m#cnBZh?M5W`S-} zX=YA}ZeCWrWr|UDiGE5}VqSVaoJ!J9N=(j9%}XiPFD}fF4F>pvwM literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6de3374d7fb06912abba6f9bd1658445ec5143d GIT binary patch literal 15396 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/client.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/client.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9499ac8592717917a9e49084688090fc264ab670 GIT binary patch literal 680 zcmY*WO>fjN5FI=2c3E}-fdt~hfm@K8NJRpH5GpK)6MN|`Lb4p&Y?JjmY3xWXDyQ;i z_)ETW;xBMwoUmwXd7j5#@6EFxE*7(6`TEOC0`Lp=8pHeq!@WRI*a;YbV$3NR0$U0N z1@cKHpcwqX9R`}hbpi#h5I9W_e&bzOr6k;cFP#1$yeM&8no3(Q*o@U3@uV77)uQI4B-l(9+5yjFh5>X_)fql zP&2q9a7}=q>}g6@fvw(s{)jqv^@Wx_7H%}RVynYUHr8tCtHu@!r@gQ2+HqA$A7-vE z+pdw?IXrfz<%UaPOiBZD+I$U6bZhq$y4zUIpJnd1ZQfSxQQ22U9od?{QpX#gt6JD~ z^M5GwQpk0BS!&xFZl~%s-Qmr literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/creation.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/creation.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f5eb7912286def818a05609ee686e3bb0572668 GIT binary patch literal 3742 zcmb7H&vP5M6$W;f6h%=#Ez7a%Hi%MNW$jRI+RikZrcIjIIV4fXp(b%Tnb}$Hg5pZc z-8BGOCT;cN+RhyFe7X|L^}{ugpdzlSAhQgUVzO8bZf9v&VZzV|(FXLYsyZg}wZ z-!~Zh51adVXn%l5A3{X<=PY5YGi!6!;nRMHbsXDvSmLsQ$2uP4pF}Q;JoXJ{cuaci zh08h>GShBWUcx3jZ1Q6JPl1*n2PWv^`y(X-6K82iqtlOz#s_$G4k6)zT@~v|m`B^8 z6<)v_kIfdOb?{$h(GvRxLuk}kv`m_vB|B7S(TW{He}hGS30qG9u04h|bn6-f<2QJNukrEjrBGd(^dO|eqt6l^~wZoT$rt#g6 zaUd!i;lxCiM1tZjrspGinG*H@#Vy@xwZ@N*M!6JwBdPa9+!Ld0D9*AWrX}&I6ebf! zjYK39NeB?8kG=(ad$;u7T>+zeX|_lDVUUJ0IS_>lo8x<*WJUz3kV-*k!OkV$4&YM# zC1t^Q;|PoBiLFFNt>&6q#ek|p6qQ`XsVS~ogiLn^aOyk>Mm{!QIGHZ0K^RJ{3-5vd z=TD1DoaRGQR26vQi7b}yKMiGW;qB@Xl(mWAV^KL%$ne6GPh-C@aB4v;dKpUk@g(^Iy{R<$>uJHJlbg{S;>cOb!Cmtd`-f>S3=JKkaN~Dn9lXxo2Bv zLlw$Jx+y%BWu|ap>lMA1p}#RtJUF*h&J5mzE1HfDr@-rcoqNtrKE88_hQ8mz0v-Jf zhHS`xJENlsc@rg-!M4e2gP24Qxb$Gbqk`iZ30CQ zoY9=U#k@)5-b~mkyXKbwpVZm+Fsg4uFuuXBIO~>OJYb!eX38!CJhN?iX8h(QY9`o-*LuoU3U6{emK2hEx7$D=2HgZW{W!m$P8`kFJg` z$BABj2NczS7=)MWy-EE}fA7GRyrFb)z_M~&gECw8Z|-(8g2NbK%Xm7kevKl}_l zD|C#yZ0Ap*q{UgBB%&(?N+-&Dh--q>IVtypC(}&OxHZpg(Zy2Gy|N|R5^Bce`e1+m z?Ch*n-i=$CI^K`d@-`fGTYWP~X0vU10N8CMU#twM)_IOQwxa8EQL%BG2S?%R`1m5? zHz!c{F_s1hx%?8dHJMU$vco-y< zbo8bTen5o-Y5G}ILfP&`U_oU$;SRO#lA!uB=di^!<*6bd(&jbsT*KM&8rAiijpg+> z8WlT+I!I*_MHzy)qa(^+BrU{q`cniAEnCyyA&Tk@9q2Mxug}Dk4=Bd>2(vR7JmlSQYUyx&g5oifX9a zT=)y@p=L0tW;PZEn9XO*@B?O9AAS!xvzg{@eJy0+kViDtD&^XaL#LR3WniAbFuw!g z$e{vIq~ve{B1Zv2$)RyP91ai`JiqAalHaX+e%bRYp00ZOo?l<{e8cnad%EuFhF{&5Os8o&>8#( z=mw!*U!!*cx(?8pcNQ!M{m6GHvr#K+e8s z4`%JyO2?D6S+v2vjUs;j5NsP)rf6wBSPjZB>Omt|4mN`;oI}j}xphbRsJS~?q*Stm zQ#z?rny3i!1pEr6Zy_bq9kK<9rJ3P09AM5 zr*^O1jJ;0!01tvo%mELP^TadhxoDy;USsB08>jZVmpMV1VZX= z4zdO{1%=Gcd8&MZw!NQRaL}Dw*A=L5z2b=Lr8%zE7e-?KmJNy`>44< zmZpu^iu%(A$HlyrcO)=|xAJz>?u8&bGco^=w(_f&i793WZ4RzS?=VjmznS*hx9+(y L4t)dKwo(2EroUC8 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/introspection.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/introspection.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e855f6d69ab0a1f7975ec20a913ebadec0511fe5 GIT binary patch literal 9070 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 G?EeCP_F{wp literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/schema.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/__pycache__/schema.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5715bdc990362529035f1629b9c39e2ac36b356 GIT binary patch literal 12173 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 %s', + 'gte': '>= %s', + 'lt': '< %s', + 'lte': '<= %s', + 'startswith': "LIKE %s ESCAPE '\\'", + 'endswith': "LIKE %s ESCAPE '\\'", + 'istartswith': "LIKE %s ESCAPE '\\'", + 'iendswith': "LIKE %s ESCAPE '\\'", + } + + # The patterns below are used to generate SQL pattern lookup clauses when + # the right-hand side of the lookup isn't a raw string (it might be an expression + # or the result of a bilateral transformation). + # In those cases, special characters for LIKE operators (e.g. \, *, _) should be + # escaped on database side. + # + # Note: we use str.format() here for readability as '%' is used as a wildcard for + # the LIKE operator. + pattern_esc = r"REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')" + pattern_ops = { + 'contains': r"LIKE '%%' || {} || '%%' ESCAPE '\'", + 'icontains': r"LIKE '%%' || UPPER({}) || '%%' ESCAPE '\'", + 'startswith': r"LIKE {} || '%%' ESCAPE '\'", + 'istartswith': r"LIKE UPPER({}) || '%%' ESCAPE '\'", + 'endswith': r"LIKE '%%' || {} ESCAPE '\'", + 'iendswith': r"LIKE '%%' || UPPER({}) ESCAPE '\'", + } + + Database = Database + SchemaEditorClass = DatabaseSchemaEditor + # Classes instantiated in __init__(). + client_class = DatabaseClient + creation_class = DatabaseCreation + features_class = DatabaseFeatures + introspection_class = DatabaseIntrospection + ops_class = DatabaseOperations + + def get_connection_params(self): + settings_dict = self.settings_dict + if not settings_dict['NAME']: + raise ImproperlyConfigured( + "settings.DATABASES is improperly configured. " + "Please supply the NAME value.") + kwargs = { + 'database': settings_dict['NAME'], + 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES, + **settings_dict['OPTIONS'], + } + # Always allow the underlying SQLite connection to be shareable + # between multiple threads. The safe-guarding will be handled at a + # higher level by the `BaseDatabaseWrapper.allow_thread_sharing` + # property. This is necessary as the shareability is disabled by + # default in pysqlite and it cannot be changed once a connection is + # opened. + if 'check_same_thread' in kwargs and kwargs['check_same_thread']: + warnings.warn( + 'The `check_same_thread` option was provided and set to ' + 'True. It will be overridden with False. Use the ' + '`DatabaseWrapper.allow_thread_sharing` property instead ' + 'for controlling thread shareability.', + RuntimeWarning + ) + kwargs.update({'check_same_thread': False, 'uri': True}) + return kwargs + + def get_new_connection(self, conn_params): + conn = Database.connect(**conn_params) + conn.create_function("django_date_extract", 2, _sqlite_date_extract) + conn.create_function("django_date_trunc", 2, _sqlite_date_trunc) + conn.create_function("django_datetime_cast_date", 2, _sqlite_datetime_cast_date) + conn.create_function("django_datetime_cast_time", 2, _sqlite_datetime_cast_time) + conn.create_function("django_datetime_extract", 3, _sqlite_datetime_extract) + conn.create_function("django_datetime_trunc", 3, _sqlite_datetime_trunc) + conn.create_function("django_time_extract", 2, _sqlite_time_extract) + conn.create_function("django_time_trunc", 2, _sqlite_time_trunc) + conn.create_function("django_time_diff", 2, _sqlite_time_diff) + conn.create_function("django_timestamp_diff", 2, _sqlite_timestamp_diff) + conn.create_function("regexp", 2, _sqlite_regexp) + conn.create_function("django_format_dtdelta", 3, _sqlite_format_dtdelta) + conn.create_function("django_power", 2, _sqlite_power) + conn.create_function('LPAD', 3, _sqlite_lpad) + conn.create_function('REPEAT', 2, operator.mul) + conn.create_function('RPAD', 3, _sqlite_rpad) + conn.execute('PRAGMA foreign_keys = ON') + return conn + + def init_connection_state(self): + pass + + def create_cursor(self, name=None): + return self.connection.cursor(factory=SQLiteCursorWrapper) + + def close(self): + self.validate_thread_sharing() + # If database is in memory, closing the connection destroys the + # database. To prevent accidental data loss, ignore close requests on + # an in-memory db. + if not self.is_in_memory_db(): + BaseDatabaseWrapper.close(self) + + def _savepoint_allowed(self): + # Two conditions are required here: + # - A sufficiently recent version of SQLite to support savepoints, + # - Being in a transaction, which can only happen inside 'atomic'. + + # When 'isolation_level' is not None, sqlite3 commits before each + # savepoint; it's a bug. When it is None, savepoints don't make sense + # because autocommit is enabled. The only exception is inside 'atomic' + # blocks. To work around that bug, on SQLite, 'atomic' starts a + # transaction explicitly rather than simply disable autocommit. + return self.features.uses_savepoints and self.in_atomic_block + + def _set_autocommit(self, autocommit): + if autocommit: + level = None + else: + # sqlite3's internal default is ''. It's different from None. + # See Modules/_sqlite/connection.c. + level = '' + # 'isolation_level' is a misleading API. + # SQLite always runs at the SERIALIZABLE isolation level. + with self.wrap_database_errors: + self.connection.isolation_level = level + + def disable_constraint_checking(self): + with self.cursor() as cursor: + cursor.execute('PRAGMA foreign_keys = OFF') + # Foreign key constraints cannot be turned off while in a multi- + # statement transaction. Fetch the current state of the pragma + # to determine if constraints are effectively disabled. + enabled = cursor.execute('PRAGMA foreign_keys').fetchone()[0] + return not bool(enabled) + + def enable_constraint_checking(self): + self.cursor().execute('PRAGMA foreign_keys = ON') + + def check_constraints(self, table_names=None): + """ + Check each table name in `table_names` for rows with invalid foreign + key references. This method is intended to be used in conjunction with + `disable_constraint_checking()` and `enable_constraint_checking()`, to + determine if rows with invalid references were entered while constraint + checks were off. + """ + with self.cursor() as cursor: + if table_names is None: + table_names = self.introspection.table_names(cursor) + for table_name in table_names: + primary_key_column_name = self.introspection.get_primary_key_column(cursor, table_name) + if not primary_key_column_name: + continue + key_columns = self.introspection.get_key_columns(cursor, table_name) + for column_name, referenced_table_name, referenced_column_name in key_columns: + cursor.execute( + """ + SELECT REFERRING.`%s`, REFERRING.`%s` FROM `%s` as REFERRING + LEFT JOIN `%s` as REFERRED + ON (REFERRING.`%s` = REFERRED.`%s`) + WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL + """ + % ( + primary_key_column_name, column_name, table_name, + referenced_table_name, column_name, referenced_column_name, + column_name, referenced_column_name, + ) + ) + for bad_row in cursor.fetchall(): + raise utils.IntegrityError( + "The row in table '%s' with primary key '%s' has an " + "invalid foreign key: %s.%s contains a value '%s' that " + "does not have a corresponding value in %s.%s." % ( + table_name, bad_row[0], table_name, column_name, + bad_row[1], referenced_table_name, referenced_column_name, + ) + ) + + def is_usable(self): + return True + + def _start_transaction_under_autocommit(self): + """ + Start a transaction explicitly in autocommit mode. + + Staying in autocommit mode works around a bug of sqlite3 that breaks + savepoints when autocommit is disabled. + """ + self.cursor().execute("BEGIN") + + def is_in_memory_db(self): + return self.creation.is_in_memory_db(self.settings_dict['NAME']) + + +FORMAT_QMARK_REGEX = re.compile(r'(?= length: + return text[:length] + return (fill_text * length)[:length - len(text)] + text + + +def _sqlite_rpad(text, length, fill_text): + return (text + fill_text * length)[:length] + + +def _sqlite_power(x, y): + return x ** y diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/client.py b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/client.py new file mode 100644 index 0000000..0c490ea --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/client.py @@ -0,0 +1,12 @@ +import subprocess + +from django.db.backends.base.client import BaseDatabaseClient + + +class DatabaseClient(BaseDatabaseClient): + executable_name = 'sqlite3' + + def runshell(self): + args = [self.executable_name, + self.connection.settings_dict['NAME']] + subprocess.check_call(args) diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/creation.py b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/creation.py new file mode 100644 index 0000000..e5567d6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/creation.py @@ -0,0 +1,98 @@ +import os +import shutil +import sys + +from django.db.backends.base.creation import BaseDatabaseCreation + + +class DatabaseCreation(BaseDatabaseCreation): + + @staticmethod + def is_in_memory_db(database_name): + return database_name == ':memory:' or 'mode=memory' in database_name + + def _get_test_db_name(self): + test_database_name = self.connection.settings_dict['TEST']['NAME'] or ':memory:' + if test_database_name == ':memory:': + return 'file:memorydb_%s?mode=memory&cache=shared' % self.connection.alias + return test_database_name + + def _create_test_db(self, verbosity, autoclobber, keepdb=False): + test_database_name = self._get_test_db_name() + + if keepdb: + return test_database_name + if not self.is_in_memory_db(test_database_name): + # Erase the old test database + if verbosity >= 1: + print("Destroying old test database for alias %s..." % ( + self._get_database_display_str(verbosity, test_database_name), + )) + if os.access(test_database_name, os.F_OK): + if not autoclobber: + confirm = input( + "Type 'yes' if you would like to try deleting the test " + "database '%s', or 'no' to cancel: " % test_database_name + ) + if autoclobber or confirm == 'yes': + try: + os.remove(test_database_name) + except Exception as e: + sys.stderr.write("Got an error deleting the old test database: %s\n" % e) + sys.exit(2) + else: + print("Tests cancelled.") + sys.exit(1) + return test_database_name + + def get_test_db_clone_settings(self, suffix): + orig_settings_dict = self.connection.settings_dict + source_database_name = orig_settings_dict['NAME'] + if self.is_in_memory_db(source_database_name): + return orig_settings_dict + else: + root, ext = os.path.splitext(orig_settings_dict['NAME']) + return {**orig_settings_dict, 'NAME': '{}_{}.{}'.format(root, suffix, ext)} + + def _clone_test_db(self, suffix, verbosity, keepdb=False): + source_database_name = self.connection.settings_dict['NAME'] + target_database_name = self.get_test_db_clone_settings(suffix)['NAME'] + # Forking automatically makes a copy of an in-memory database. + if not self.is_in_memory_db(source_database_name): + # Erase the old test database + if os.access(target_database_name, os.F_OK): + if keepdb: + return + if verbosity >= 1: + print("Destroying old test database for alias %s..." % ( + self._get_database_display_str(verbosity, target_database_name), + )) + try: + os.remove(target_database_name) + except Exception as e: + sys.stderr.write("Got an error deleting the old test database: %s\n" % e) + sys.exit(2) + try: + shutil.copy(source_database_name, target_database_name) + except Exception as e: + sys.stderr.write("Got an error cloning the test database: %s\n" % e) + sys.exit(2) + + def _destroy_test_db(self, test_database_name, verbosity): + if test_database_name and not self.is_in_memory_db(test_database_name): + # Remove the SQLite database file + os.remove(test_database_name) + + def test_db_signature(self): + """ + Return a tuple that uniquely identifies a test database. + + This takes into account the special cases of ":memory:" and "" for + SQLite since the databases will be distinct despite having the same + TEST NAME. See https://www.sqlite.org/inmemorydb.html + """ + test_database_name = self._get_test_db_name() + sig = [self.connection.settings_dict['NAME']] + if self.is_in_memory_db(test_database_name): + sig.append(self.connection.alias) + return tuple(sig) diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/features.py b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/features.py new file mode 100644 index 0000000..7563edf --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/features.py @@ -0,0 +1,52 @@ +from django.db import utils +from django.db.backends.base.features import BaseDatabaseFeatures +from django.utils.functional import cached_property + + +class DatabaseFeatures(BaseDatabaseFeatures): + # SQLite cannot handle us only partially reading from a cursor's result set + # and then writing the same rows to the database in another cursor. This + # setting ensures we always read result sets fully into memory all in one + # go. + can_use_chunked_reads = False + test_db_allows_multiple_connections = False + supports_unspecified_pk = True + supports_timezones = False + max_query_params = 999 + supports_mixed_date_datetime_comparisons = False + supports_column_check_constraints = False + autocommits_when_autocommit_is_off = True + can_introspect_decimal_field = False + can_introspect_positive_integer_field = True + can_introspect_small_integer_field = True + supports_transactions = True + atomic_transactions = False + can_rollback_ddl = True + supports_atomic_references_rename = False + supports_paramstyle_pyformat = False + supports_sequence_reset = False + can_clone_databases = True + supports_temporal_subtraction = True + ignores_table_name_case = True + supports_cast_with_precision = False + uses_savepoints = True + can_release_savepoints = True + + @cached_property + def supports_stddev(self): + """ + Confirm support for STDDEV and related stats functions. + + SQLite supports STDDEV as an extension package; so + connection.ops.check_expression_support() can't unilaterally + rule out support for STDDEV. Manually check whether the call works. + """ + with self.connection.cursor() as cursor: + cursor.execute('CREATE TABLE STDDEV_TEST (X INT)') + try: + cursor.execute('SELECT STDDEV(*) FROM STDDEV_TEST') + has_support = True + except utils.DatabaseError: + has_support = False + cursor.execute('DROP TABLE STDDEV_TEST') + return has_support diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/introspection.py b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/introspection.py new file mode 100644 index 0000000..75fb9a7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/introspection.py @@ -0,0 +1,283 @@ +import re + +from django.db.backends.base.introspection import ( + BaseDatabaseIntrospection, FieldInfo, TableInfo, +) +from django.db.models.indexes import Index + +field_size_re = re.compile(r'^\s*(?:var)?char\s*\(\s*(\d+)\s*\)\s*$') + + +def get_field_size(name): + """ Extract the size number from a "varchar(11)" type name """ + m = field_size_re.search(name) + return int(m.group(1)) if m else None + + +# This light wrapper "fakes" a dictionary interface, because some SQLite data +# types include variables in them -- e.g. "varchar(30)" -- and can't be matched +# as a simple dictionary lookup. +class FlexibleFieldLookupDict: + # Maps SQL types to Django Field types. Some of the SQL types have multiple + # entries here because SQLite allows for anything and doesn't normalize the + # field type; it uses whatever was given. + base_data_types_reverse = { + 'bool': 'BooleanField', + 'boolean': 'BooleanField', + 'smallint': 'SmallIntegerField', + 'smallint unsigned': 'PositiveSmallIntegerField', + 'smallinteger': 'SmallIntegerField', + 'int': 'IntegerField', + 'integer': 'IntegerField', + 'bigint': 'BigIntegerField', + 'integer unsigned': 'PositiveIntegerField', + 'decimal': 'DecimalField', + 'real': 'FloatField', + 'text': 'TextField', + 'char': 'CharField', + 'blob': 'BinaryField', + 'date': 'DateField', + 'datetime': 'DateTimeField', + 'time': 'TimeField', + } + + def __getitem__(self, key): + key = key.lower() + try: + return self.base_data_types_reverse[key] + except KeyError: + size = get_field_size(key) + if size is not None: + return ('CharField', {'max_length': size}) + raise KeyError + + +class DatabaseIntrospection(BaseDatabaseIntrospection): + data_types_reverse = FlexibleFieldLookupDict() + + def get_table_list(self, cursor): + """Return a list of table and view names in the current database.""" + # Skip the sqlite_sequence system table used for autoincrement key + # generation. + cursor.execute(""" + SELECT name, type FROM sqlite_master + WHERE type in ('table', 'view') AND NOT name='sqlite_sequence' + ORDER BY name""") + return [TableInfo(row[0], row[1][0]) for row in cursor.fetchall()] + + def get_table_description(self, cursor, table_name): + """ + Return a description of the table with the DB-API cursor.description + interface. + """ + return [ + FieldInfo( + info['name'], + info['type'], + None, + info['size'], + None, + None, + info['null_ok'], + info['default'], + ) for info in self._table_info(cursor, table_name) + ] + + def get_sequences(self, cursor, table_name, table_fields=()): + pk_col = self.get_primary_key_column(cursor, table_name) + return [{'table': table_name, 'column': pk_col}] + + def get_relations(self, cursor, table_name): + """ + Return a dictionary of {field_name: (field_name_other_table, other_table)} + representing all relationships to the given table. + """ + # Dictionary of relations to return + relations = {} + + # Schema for this table + cursor.execute( + "SELECT sql, type FROM sqlite_master " + "WHERE tbl_name = %s AND type IN ('table', 'view')", + [table_name] + ) + create_sql, table_type = cursor.fetchone() + if table_type == 'view': + # It might be a view, then no results will be returned + return relations + results = create_sql[create_sql.index('(') + 1:create_sql.rindex(')')] + + # Walk through and look for references to other tables. SQLite doesn't + # really have enforced references, but since it echoes out the SQL used + # to create the table we can look for REFERENCES statements used there. + for field_desc in results.split(','): + field_desc = field_desc.strip() + if field_desc.startswith("UNIQUE"): + continue + + m = re.search(r'references (\S*) ?\(["|]?(.*)["|]?\)', field_desc, re.I) + if not m: + continue + table, column = [s.strip('"') for s in m.groups()] + + if field_desc.startswith("FOREIGN KEY"): + # Find name of the target FK field + m = re.match(r'FOREIGN KEY\s*\(([^\)]*)\).*', field_desc, re.I) + field_name = m.groups()[0].strip('"') + else: + field_name = field_desc.split()[0].strip('"') + + cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s", [table]) + result = cursor.fetchall()[0] + other_table_results = result[0].strip() + li, ri = other_table_results.index('('), other_table_results.rindex(')') + other_table_results = other_table_results[li + 1:ri] + + for other_desc in other_table_results.split(','): + other_desc = other_desc.strip() + if other_desc.startswith('UNIQUE'): + continue + + other_name = other_desc.split(' ', 1)[0].strip('"') + if other_name == column: + relations[field_name] = (other_name, table) + break + + return relations + + def get_key_columns(self, cursor, table_name): + """ + Return a list of (column_name, referenced_table_name, referenced_column_name) + for all key columns in given table. + """ + key_columns = [] + + # Schema for this table + cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s AND type = %s", [table_name, "table"]) + results = cursor.fetchone()[0].strip() + results = results[results.index('(') + 1:results.rindex(')')] + + # Walk through and look for references to other tables. SQLite doesn't + # really have enforced references, but since it echoes out the SQL used + # to create the table we can look for REFERENCES statements used there. + for field_index, field_desc in enumerate(results.split(',')): + field_desc = field_desc.strip() + if field_desc.startswith("UNIQUE"): + continue + + m = re.search(r'"(.*)".*references (.*) \(["|](.*)["|]\)', field_desc, re.I) + if not m: + continue + + # This will append (column_name, referenced_table_name, referenced_column_name) to key_columns + key_columns.append(tuple(s.strip('"') for s in m.groups())) + + return key_columns + + def get_primary_key_column(self, cursor, table_name): + """Return the column name of the primary key for the given table.""" + # Don't use PRAGMA because that causes issues with some transactions + cursor.execute( + "SELECT sql, type FROM sqlite_master " + "WHERE tbl_name = %s AND type IN ('table', 'view')", + [table_name] + ) + row = cursor.fetchone() + if row is None: + raise ValueError("Table %s does not exist" % table_name) + create_sql, table_type = row + if table_type == 'view': + # Views don't have a primary key. + return None + fields_sql = create_sql[create_sql.index('(') + 1:create_sql.rindex(')')] + for field_desc in fields_sql.split(','): + field_desc = field_desc.strip() + m = re.match(r'(?:(?:["`\[])(.*)(?:["`\]])|(\w+)).*PRIMARY KEY.*', field_desc) + if m: + return m.group(1) if m.group(1) else m.group(2) + return None + + def _table_info(self, cursor, name): + cursor.execute('PRAGMA table_info(%s)' % self.connection.ops.quote_name(name)) + # cid, name, type, notnull, default_value, pk + return [{ + 'name': field[1], + 'type': field[2], + 'size': get_field_size(field[2]), + 'null_ok': not field[3], + 'default': field[4], + 'pk': field[5], # undocumented + } for field in cursor.fetchall()] + + def _get_foreign_key_constraints(self, cursor, table_name): + constraints = {} + cursor.execute('PRAGMA foreign_key_list(%s)' % self.connection.ops.quote_name(table_name)) + for row in cursor.fetchall(): + # Remaining on_update/on_delete/match values are of no interest. + id_, _, table, from_, to = row[:5] + constraints['fk_%d' % id_] = { + 'columns': [from_], + 'primary_key': False, + 'unique': False, + 'foreign_key': (table, to), + 'check': False, + 'index': False, + } + return constraints + + def get_constraints(self, cursor, table_name): + """ + Retrieve any constraints or keys (unique, pk, fk, check, index) across + one or more columns. + """ + constraints = {} + # Get the index info + cursor.execute("PRAGMA index_list(%s)" % self.connection.ops.quote_name(table_name)) + for row in cursor.fetchall(): + # Sqlite3 3.8.9+ has 5 columns, however older versions only give 3 + # columns. Discard last 2 columns if there. + number, index, unique = row[:3] + # Get the index info for that index + cursor.execute('PRAGMA index_info(%s)' % self.connection.ops.quote_name(index)) + for index_rank, column_rank, column in cursor.fetchall(): + if index not in constraints: + constraints[index] = { + "columns": [], + "primary_key": False, + "unique": bool(unique), + "foreign_key": False, + "check": False, + "index": True, + } + constraints[index]['columns'].append(column) + # Add type and column orders for indexes + if constraints[index]['index'] and not constraints[index]['unique']: + # SQLite doesn't support any index type other than b-tree + constraints[index]['type'] = Index.suffix + cursor.execute( + "SELECT sql FROM sqlite_master " + "WHERE type='index' AND name=%s" % self.connection.ops.quote_name(index) + ) + orders = [] + # There would be only 1 row to loop over + for sql, in cursor.fetchall(): + order_info = sql.split('(')[-1].split(')')[0].split(',') + orders = ['DESC' if info.endswith('DESC') else 'ASC' for info in order_info] + constraints[index]['orders'] = orders + # Get the PK + pk_column = self.get_primary_key_column(cursor, table_name) + if pk_column: + # SQLite doesn't actually give a name to the PK constraint, + # so we invent one. This is fine, as the SQLite backend never + # deletes PK constraints by name, as you can't delete constraints + # in SQLite; we remake the table with a new PK instead. + constraints["__primary__"] = { + "columns": [pk_column], + "primary_key": True, + "unique": False, # It's not actually a unique constraint. + "foreign_key": False, + "check": False, + "index": False, + } + constraints.update(self._get_foreign_key_constraints(cursor, table_name)) + return constraints diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/operations.py b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/operations.py new file mode 100644 index 0000000..ee197d3 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/operations.py @@ -0,0 +1,299 @@ +import datetime +import decimal +import uuid + +from django.conf import settings +from django.core.exceptions import FieldError +from django.db import utils +from django.db.backends.base.operations import BaseDatabaseOperations +from django.db.models import aggregates, fields +from django.db.models.expressions import Col +from django.utils import timezone +from django.utils.dateparse import parse_date, parse_datetime, parse_time +from django.utils.duration import duration_microseconds + + +class DatabaseOperations(BaseDatabaseOperations): + cast_char_field_without_max_length = 'text' + cast_data_types = { + 'DateField': 'TEXT', + 'DateTimeField': 'TEXT', + } + explain_prefix = 'EXPLAIN QUERY PLAN' + + def bulk_batch_size(self, fields, objs): + """ + SQLite has a compile-time default (SQLITE_LIMIT_VARIABLE_NUMBER) of + 999 variables per query. + + If there's only a single field to insert, the limit is 500 + (SQLITE_MAX_COMPOUND_SELECT). + """ + if len(fields) == 1: + return 500 + elif len(fields) > 1: + return self.connection.features.max_query_params // len(fields) + else: + return len(objs) + + def check_expression_support(self, expression): + bad_fields = (fields.DateField, fields.DateTimeField, fields.TimeField) + bad_aggregates = (aggregates.Sum, aggregates.Avg, aggregates.Variance, aggregates.StdDev) + if isinstance(expression, bad_aggregates): + for expr in expression.get_source_expressions(): + try: + output_field = expr.output_field + except FieldError: + # Not every subexpression has an output_field which is fine + # to ignore. + pass + else: + if isinstance(output_field, bad_fields): + raise utils.NotSupportedError( + 'You cannot use Sum, Avg, StdDev, and Variance ' + 'aggregations on date/time fields in sqlite3 ' + 'since date/time is saved as text.' + ) + + def date_extract_sql(self, lookup_type, field_name): + """ + Support EXTRACT with a user-defined function django_date_extract() + that's registered in connect(). Use single quotes because this is a + string and could otherwise cause a collision with a field name. + """ + return "django_date_extract('%s', %s)" % (lookup_type.lower(), field_name) + + def date_interval_sql(self, timedelta): + return str(duration_microseconds(timedelta)) + + def format_for_duration_arithmetic(self, sql): + """Do nothing since formatting is handled in the custom function.""" + return sql + + def date_trunc_sql(self, lookup_type, field_name): + return "django_date_trunc('%s', %s)" % (lookup_type.lower(), field_name) + + def time_trunc_sql(self, lookup_type, field_name): + return "django_time_trunc('%s', %s)" % (lookup_type.lower(), field_name) + + def _convert_tzname_to_sql(self, tzname): + return "'%s'" % tzname if settings.USE_TZ else 'NULL' + + def datetime_cast_date_sql(self, field_name, tzname): + return "django_datetime_cast_date(%s, %s)" % ( + field_name, self._convert_tzname_to_sql(tzname), + ) + + def datetime_cast_time_sql(self, field_name, tzname): + return "django_datetime_cast_time(%s, %s)" % ( + field_name, self._convert_tzname_to_sql(tzname), + ) + + def datetime_extract_sql(self, lookup_type, field_name, tzname): + return "django_datetime_extract('%s', %s, %s)" % ( + lookup_type.lower(), field_name, self._convert_tzname_to_sql(tzname), + ) + + def datetime_trunc_sql(self, lookup_type, field_name, tzname): + return "django_datetime_trunc('%s', %s, %s)" % ( + lookup_type.lower(), field_name, self._convert_tzname_to_sql(tzname), + ) + + def time_extract_sql(self, lookup_type, field_name): + return "django_time_extract('%s', %s)" % (lookup_type.lower(), field_name) + + def pk_default_value(self): + return "NULL" + + def _quote_params_for_last_executed_query(self, params): + """ + Only for last_executed_query! Don't use this to execute SQL queries! + """ + # This function is limited both by SQLITE_LIMIT_VARIABLE_NUMBER (the + # number of parameters, default = 999) and SQLITE_MAX_COLUMN (the + # number of return values, default = 2000). Since Python's sqlite3 + # module doesn't expose the get_limit() C API, assume the default + # limits are in effect and split the work in batches if needed. + BATCH_SIZE = 999 + if len(params) > BATCH_SIZE: + results = () + for index in range(0, len(params), BATCH_SIZE): + chunk = params[index:index + BATCH_SIZE] + results += self._quote_params_for_last_executed_query(chunk) + return results + + sql = 'SELECT ' + ', '.join(['QUOTE(?)'] * len(params)) + # Bypass Django's wrappers and use the underlying sqlite3 connection + # to avoid logging this query - it would trigger infinite recursion. + cursor = self.connection.connection.cursor() + # Native sqlite3 cursors cannot be used as context managers. + try: + return cursor.execute(sql, params).fetchone() + finally: + cursor.close() + + def last_executed_query(self, cursor, sql, params): + # Python substitutes parameters in Modules/_sqlite/cursor.c with: + # pysqlite_statement_bind_parameters(self->statement, parameters, allow_8bit_chars); + # Unfortunately there is no way to reach self->statement from Python, + # so we quote and substitute parameters manually. + if params: + if isinstance(params, (list, tuple)): + params = self._quote_params_for_last_executed_query(params) + else: + values = tuple(params.values()) + values = self._quote_params_for_last_executed_query(values) + params = dict(zip(params, values)) + return sql % params + # For consistency with SQLiteCursorWrapper.execute(), just return sql + # when there are no parameters. See #13648 and #17158. + else: + return sql + + def quote_name(self, name): + if name.startswith('"') and name.endswith('"'): + return name # Quoting once is enough. + return '"%s"' % name + + def no_limit_value(self): + return -1 + + def sql_flush(self, style, tables, sequences, allow_cascade=False): + sql = ['%s %s %s;' % ( + style.SQL_KEYWORD('DELETE'), + style.SQL_KEYWORD('FROM'), + style.SQL_FIELD(self.quote_name(table)) + ) for table in tables] + # Note: No requirement for reset of auto-incremented indices (cf. other + # sql_flush() implementations). Just return SQL at this point + return sql + + def execute_sql_flush(self, using, sql_list): + # To prevent possible violation of foreign key constraints, deactivate + # constraints outside of the transaction created in super(). + with self.connection.constraint_checks_disabled(): + super().execute_sql_flush(using, sql_list) + + def adapt_datetimefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, 'resolve_expression'): + return value + + # SQLite doesn't support tz-aware datetimes + if timezone.is_aware(value): + if settings.USE_TZ: + value = timezone.make_naive(value, self.connection.timezone) + else: + raise ValueError("SQLite backend does not support timezone-aware datetimes when USE_TZ is False.") + + return str(value) + + def adapt_timefield_value(self, value): + if value is None: + return None + + # Expression values are adapted by the database. + if hasattr(value, 'resolve_expression'): + return value + + # SQLite doesn't support tz-aware datetimes + if timezone.is_aware(value): + raise ValueError("SQLite backend does not support timezone-aware times.") + + return str(value) + + def get_db_converters(self, expression): + converters = super().get_db_converters(expression) + internal_type = expression.output_field.get_internal_type() + if internal_type == 'DateTimeField': + converters.append(self.convert_datetimefield_value) + elif internal_type == 'DateField': + converters.append(self.convert_datefield_value) + elif internal_type == 'TimeField': + converters.append(self.convert_timefield_value) + elif internal_type == 'DecimalField': + converters.append(self.get_decimalfield_converter(expression)) + elif internal_type == 'UUIDField': + converters.append(self.convert_uuidfield_value) + elif internal_type in ('NullBooleanField', 'BooleanField'): + converters.append(self.convert_booleanfield_value) + return converters + + def convert_datetimefield_value(self, value, expression, connection): + if value is not None: + if not isinstance(value, datetime.datetime): + value = parse_datetime(value) + if settings.USE_TZ and not timezone.is_aware(value): + value = timezone.make_aware(value, self.connection.timezone) + return value + + def convert_datefield_value(self, value, expression, connection): + if value is not None: + if not isinstance(value, datetime.date): + value = parse_date(value) + return value + + def convert_timefield_value(self, value, expression, connection): + if value is not None: + if not isinstance(value, datetime.time): + value = parse_time(value) + return value + + def get_decimalfield_converter(self, expression): + # SQLite stores only 15 significant digits. Digits coming from + # float inaccuracy must be removed. + create_decimal = decimal.Context(prec=15).create_decimal_from_float + if isinstance(expression, Col): + quantize_value = decimal.Decimal(1).scaleb(-expression.output_field.decimal_places) + + def converter(value, expression, connection): + if value is not None: + return create_decimal(value).quantize(quantize_value, context=expression.output_field.context) + else: + def converter(value, expression, connection): + if value is not None: + return create_decimal(value) + return converter + + def convert_uuidfield_value(self, value, expression, connection): + if value is not None: + value = uuid.UUID(value) + return value + + def convert_booleanfield_value(self, value, expression, connection): + return bool(value) if value in (1, 0) else value + + def bulk_insert_sql(self, fields, placeholder_rows): + return " UNION ALL ".join( + "SELECT %s" % ", ".join(row) + for row in placeholder_rows + ) + + def combine_expression(self, connector, sub_expressions): + # SQLite doesn't have a power function, so we fake it with a + # user-defined function django_power that's registered in connect(). + if connector == '^': + return 'django_power(%s)' % ','.join(sub_expressions) + return super().combine_expression(connector, sub_expressions) + + def combine_duration_expression(self, connector, sub_expressions): + if connector not in ['+', '-']: + raise utils.DatabaseError('Invalid connector for timedelta: %s.' % connector) + fn_params = ["'%s'" % connector] + sub_expressions + if len(fn_params) > 3: + raise ValueError('Too many params for timedelta operations.') + return "django_format_dtdelta(%s)" % ', '.join(fn_params) + + def integer_field_range(self, internal_type): + # SQLite doesn't enforce any integer constraints + return (None, None) + + def subtract_temporals(self, internal_type, lhs, rhs): + lhs_sql, lhs_params = lhs + rhs_sql, rhs_params = rhs + if internal_type == 'TimeField': + return "django_time_diff(%s, %s)" % (lhs_sql, rhs_sql), lhs_params + rhs_params + return "django_timestamp_diff(%s, %s)" % (lhs_sql, rhs_sql), lhs_params + rhs_params diff --git a/env/lib/python3.5/site-packages/django/db/backends/sqlite3/schema.py b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/schema.py new file mode 100644 index 0000000..0954c66 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/sqlite3/schema.py @@ -0,0 +1,373 @@ +import contextlib +import copy +from decimal import Decimal + +from django.apps.registry import Apps +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.backends.ddl_references import Statement +from django.db.transaction import atomic +from django.db.utils import NotSupportedError + + +class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): + + sql_delete_table = "DROP TABLE %(table)s" + sql_create_fk = None + sql_create_inline_fk = "REFERENCES %(to_table)s (%(to_column)s) DEFERRABLE INITIALLY DEFERRED" + sql_create_unique = "CREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)" + sql_delete_unique = "DROP INDEX %(name)s" + + def __enter__(self): + # Some SQLite schema alterations need foreign key constraints to be + # disabled. Enforce it here for the duration of the schema edition. + if not self.connection.disable_constraint_checking(): + raise NotSupportedError( + 'SQLite schema editor cannot be used while foreign key ' + 'constraint checks are enabled. Make sure to disable them ' + 'before entering a transaction.atomic() context because ' + 'SQLite3 does not support disabling them in the middle of ' + 'a multi-statement transaction.' + ) + self.connection.cursor().execute('PRAGMA legacy_alter_table = ON') + return super().__enter__() + + def __exit__(self, exc_type, exc_value, traceback): + super().__exit__(exc_type, exc_value, traceback) + self.connection.cursor().execute('PRAGMA legacy_alter_table = OFF') + self.connection.enable_constraint_checking() + + def quote_value(self, value): + # The backend "mostly works" without this function and there are use + # cases for compiling Python without the sqlite3 libraries (e.g. + # security hardening). + try: + import sqlite3 + value = sqlite3.adapt(value) + except ImportError: + pass + except sqlite3.ProgrammingError: + pass + # Manual emulation of SQLite parameter quoting + if isinstance(value, bool): + return str(int(value)) + elif isinstance(value, (Decimal, float, int)): + return str(value) + elif isinstance(value, str): + return "'%s'" % value.replace("\'", "\'\'") + elif value is None: + return "NULL" + elif isinstance(value, (bytes, bytearray, memoryview)): + # Bytes are only allowed for BLOB fields, encoded as string + # literals containing hexadecimal data and preceded by a single "X" + # character. + return "X'%s'" % value.hex() + else: + raise ValueError("Cannot quote parameter value %r of type %s" % (value, type(value))) + + def _is_referenced_by_fk_constraint(self, table_name, column_name=None, ignore_self=False): + """ + Return whether or not the provided table name is referenced by another + one. If `column_name` is specified, only references pointing to that + column are considered. If `ignore_self` is True, self-referential + constraints are ignored. + """ + with self.connection.cursor() as cursor: + for other_table in self.connection.introspection.get_table_list(cursor): + if ignore_self and other_table.name == table_name: + continue + constraints = self.connection.introspection._get_foreign_key_constraints(cursor, other_table.name) + for constraint in constraints.values(): + constraint_table, constraint_column = constraint['foreign_key'] + if (constraint_table == table_name and + (column_name is None or constraint_column == column_name)): + return True + return False + + def alter_db_table(self, model, old_db_table, new_db_table, disable_constraints=True): + if disable_constraints and self._is_referenced_by_fk_constraint(old_db_table): + if self.connection.in_atomic_block: + raise NotSupportedError(( + 'Renaming the %r table while in a transaction is not ' + 'supported on SQLite because it would break referential ' + 'integrity. Try adding `atomic = False` to the Migration class.' + ) % old_db_table) + self.connection.enable_constraint_checking() + super().alter_db_table(model, old_db_table, new_db_table) + self.connection.disable_constraint_checking() + else: + super().alter_db_table(model, old_db_table, new_db_table) + + def alter_field(self, model, old_field, new_field, strict=False): + old_field_name = old_field.name + table_name = model._meta.db_table + _, old_column_name = old_field.get_attname_column() + if (new_field.name != old_field_name and + self._is_referenced_by_fk_constraint(table_name, old_column_name, ignore_self=True)): + if self.connection.in_atomic_block: + raise NotSupportedError(( + 'Renaming the %r.%r column while in a transaction is not ' + 'supported on SQLite because it would break referential ' + 'integrity. Try adding `atomic = False` to the Migration class.' + ) % (model._meta.db_table, old_field_name)) + with atomic(self.connection.alias): + super().alter_field(model, old_field, new_field, strict=strict) + # Follow SQLite's documented procedure for performing changes + # that don't affect the on-disk content. + # https://sqlite.org/lang_altertable.html#otheralter + with self.connection.cursor() as cursor: + schema_version = cursor.execute('PRAGMA schema_version').fetchone()[0] + cursor.execute('PRAGMA writable_schema = 1') + references_template = ' REFERENCES "%s" ("%%s") ' % table_name + new_column_name = new_field.get_attname_column()[1] + search = references_template % old_column_name + replacement = references_template % new_column_name + cursor.execute('UPDATE sqlite_master SET sql = replace(sql, %s, %s)', (search, replacement)) + cursor.execute('PRAGMA schema_version = %d' % (schema_version + 1)) + cursor.execute('PRAGMA writable_schema = 0') + # The integrity check will raise an exception and rollback + # the transaction if the sqlite_master updates corrupt the + # database. + cursor.execute('PRAGMA integrity_check') + # Perform a VACUUM to refresh the database representation from + # the sqlite_master table. + with self.connection.cursor() as cursor: + cursor.execute('VACUUM') + else: + super().alter_field(model, old_field, new_field, strict=strict) + + def _remake_table(self, model, create_field=None, delete_field=None, alter_field=None): + """ + Shortcut to transform a model from old_model into new_model + + The essential steps are: + 1. rename the model's existing table, e.g. "app_model" to "app_model__old" + 2. create a table with the updated definition called "app_model" + 3. copy the data from the old renamed table to the new table + 4. delete the "app_model__old" table + """ + # Self-referential fields must be recreated rather than copied from + # the old model to ensure their remote_field.field_name doesn't refer + # to an altered field. + def is_self_referential(f): + return f.is_relation and f.remote_field.model is model + # Work out the new fields dict / mapping + body = { + f.name: f.clone() if is_self_referential(f) else f + for f in model._meta.local_concrete_fields + } + # Since mapping might mix column names and default values, + # its values must be already quoted. + mapping = {f.column: self.quote_name(f.column) for f in model._meta.local_concrete_fields} + # This maps field names (not columns) for things like unique_together + rename_mapping = {} + # If any of the new or altered fields is introducing a new PK, + # remove the old one + restore_pk_field = None + if getattr(create_field, 'primary_key', False) or ( + alter_field and getattr(alter_field[1], 'primary_key', False)): + for name, field in list(body.items()): + if field.primary_key: + field.primary_key = False + restore_pk_field = field + if field.auto_created: + del body[name] + del mapping[field.column] + # Add in any created fields + if create_field: + body[create_field.name] = create_field + # Choose a default and insert it into the copy map + if not create_field.many_to_many and create_field.concrete: + mapping[create_field.column] = self.quote_value( + self.effective_default(create_field) + ) + # Add in any altered fields + if alter_field: + old_field, new_field = alter_field + body.pop(old_field.name, None) + mapping.pop(old_field.column, None) + body[new_field.name] = new_field + if old_field.null and not new_field.null: + case_sql = "coalesce(%(col)s, %(default)s)" % { + 'col': self.quote_name(old_field.column), + 'default': self.quote_value(self.effective_default(new_field)) + } + mapping[new_field.column] = case_sql + else: + mapping[new_field.column] = self.quote_name(old_field.column) + rename_mapping[old_field.name] = new_field.name + # Remove any deleted fields + if delete_field: + del body[delete_field.name] + del mapping[delete_field.column] + # Remove any implicit M2M tables + if delete_field.many_to_many and delete_field.remote_field.through._meta.auto_created: + return self.delete_model(delete_field.remote_field.through) + # Work inside a new app registry + apps = Apps() + + # Provide isolated instances of the fields to the new model body so + # that the existing model's internals aren't interfered with when + # the dummy model is constructed. + body = copy.deepcopy(body) + + # Work out the new value of unique_together, taking renames into + # account + unique_together = [ + [rename_mapping.get(n, n) for n in unique] + for unique in model._meta.unique_together + ] + + # Work out the new value for index_together, taking renames into + # account + index_together = [ + [rename_mapping.get(n, n) for n in index] + for index in model._meta.index_together + ] + + indexes = model._meta.indexes + if delete_field: + indexes = [ + index for index in indexes + if delete_field.name not in index.fields + ] + + # Construct a new model for the new state + meta_contents = { + 'app_label': model._meta.app_label, + 'db_table': model._meta.db_table, + 'unique_together': unique_together, + 'index_together': index_together, + 'indexes': indexes, + 'apps': apps, + } + meta = type("Meta", (), meta_contents) + body['Meta'] = meta + body['__module__'] = model.__module__ + + temp_model = type(model._meta.object_name, model.__bases__, body) + + # We need to modify model._meta.db_table, but everything explodes + # if the change isn't reversed before the end of this method. This + # context manager helps us avoid that situation. + @contextlib.contextmanager + def altered_table_name(model, temporary_table_name): + original_table_name = model._meta.db_table + model._meta.db_table = temporary_table_name + yield + model._meta.db_table = original_table_name + + with altered_table_name(model, model._meta.db_table + "__old"): + # Rename the old table to make way for the new + self.alter_db_table( + model, temp_model._meta.db_table, model._meta.db_table, + disable_constraints=False, + ) + # Create a new table with the updated schema. + self.create_model(temp_model) + + # Copy data from the old table into the new table + field_maps = list(mapping.items()) + self.execute("INSERT INTO %s (%s) SELECT %s FROM %s" % ( + self.quote_name(temp_model._meta.db_table), + ', '.join(self.quote_name(x) for x, y in field_maps), + ', '.join(y for x, y in field_maps), + self.quote_name(model._meta.db_table), + )) + + # Delete the old table + self.delete_model(model, handle_autom2m=False) + + # Run deferred SQL on correct table + for sql in self.deferred_sql: + self.execute(sql) + self.deferred_sql = [] + # Fix any PK-removed field + if restore_pk_field: + restore_pk_field.primary_key = True + + def delete_model(self, model, handle_autom2m=True): + if handle_autom2m: + super().delete_model(model) + else: + # Delete the table (and only that) + self.execute(self.sql_delete_table % { + "table": self.quote_name(model._meta.db_table), + }) + # Remove all deferred statements referencing the deleted table. + for sql in list(self.deferred_sql): + if isinstance(sql, Statement) and sql.references_table(model._meta.db_table): + self.deferred_sql.remove(sql) + + def add_field(self, model, field): + """ + Create a field on a model. Usually involves adding a column, but may + involve adding a table instead (for M2M fields). + """ + # Special-case implicit M2M tables + if field.many_to_many and field.remote_field.through._meta.auto_created: + return self.create_model(field.remote_field.through) + self._remake_table(model, create_field=field) + + def remove_field(self, model, field): + """ + Remove a field from a model. Usually involves deleting a column, + but for M2Ms may involve deleting a table. + """ + # M2M fields are a special case + if field.many_to_many: + # For implicit M2M tables, delete the auto-created table + if field.remote_field.through._meta.auto_created: + self.delete_model(field.remote_field.through) + # For explicit "through" M2M fields, do nothing + # For everything else, remake. + else: + # It might not actually have a column behind it + if field.db_parameters(connection=self.connection)['type'] is None: + return + self._remake_table(model, delete_field=field) + + def _alter_field(self, model, old_field, new_field, old_type, new_type, + old_db_params, new_db_params, strict=False): + """Perform a "physical" (non-ManyToMany) field update.""" + # Alter by remaking table + self._remake_table(model, alter_field=(old_field, new_field)) + # Rebuild tables with FKs pointing to this field if the PK type changed. + if old_field.primary_key and new_field.primary_key and old_type != new_type: + for rel in new_field.model._meta.related_objects: + if not rel.many_to_many: + self._remake_table(rel.related_model) + + def _alter_many_to_many(self, model, old_field, new_field, strict): + """Alter M2Ms to repoint their to= endpoints.""" + if old_field.remote_field.through._meta.db_table == new_field.remote_field.through._meta.db_table: + # The field name didn't change, but some options did; we have to propagate this altering. + self._remake_table( + old_field.remote_field.through, + alter_field=( + # We need the field that points to the target model, so we can tell alter_field to change it - + # this is m2m_reverse_field_name() (as opposed to m2m_field_name, which points to our model) + old_field.remote_field.through._meta.get_field(old_field.m2m_reverse_field_name()), + new_field.remote_field.through._meta.get_field(new_field.m2m_reverse_field_name()), + ), + ) + return + + # Make a new through table + self.create_model(new_field.remote_field.through) + # Copy the data across + self.execute("INSERT INTO %s (%s) SELECT %s FROM %s" % ( + self.quote_name(new_field.remote_field.through._meta.db_table), + ', '.join([ + "id", + new_field.m2m_column_name(), + new_field.m2m_reverse_name(), + ]), + ', '.join([ + "id", + old_field.m2m_column_name(), + old_field.m2m_reverse_name(), + ]), + self.quote_name(old_field.remote_field.through._meta.db_table), + )) + # Delete the old through table + self.delete_model(old_field.remote_field.through) diff --git a/env/lib/python3.5/site-packages/django/db/backends/utils.py b/env/lib/python3.5/site-packages/django/db/backends/utils.py new file mode 100644 index 0000000..a574d64 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/backends/utils.py @@ -0,0 +1,256 @@ +import datetime +import decimal +import functools +import hashlib +import logging +from time import time + +from django.conf import settings +from django.db.utils import NotSupportedError +from django.utils.encoding import force_bytes +from django.utils.timezone import utc + +logger = logging.getLogger('django.db.backends') + + +class CursorWrapper: + def __init__(self, cursor, db): + self.cursor = cursor + self.db = db + + WRAP_ERROR_ATTRS = frozenset(['fetchone', 'fetchmany', 'fetchall', 'nextset']) + + def __getattr__(self, attr): + cursor_attr = getattr(self.cursor, attr) + if attr in CursorWrapper.WRAP_ERROR_ATTRS: + return self.db.wrap_database_errors(cursor_attr) + else: + return cursor_attr + + def __iter__(self): + with self.db.wrap_database_errors: + yield from self.cursor + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + # Close instead of passing through to avoid backend-specific behavior + # (#17671). Catch errors liberally because errors in cleanup code + # aren't useful. + try: + self.close() + except self.db.Database.Error: + pass + + # The following methods cannot be implemented in __getattr__, because the + # code must run when the method is invoked, not just when it is accessed. + + def callproc(self, procname, params=None, kparams=None): + # Keyword parameters for callproc aren't supported in PEP 249, but the + # database driver may support them (e.g. cx_Oracle). + if kparams is not None and not self.db.features.supports_callproc_kwargs: + raise NotSupportedError( + 'Keyword parameters for callproc are not supported on this ' + 'database backend.' + ) + self.db.validate_no_broken_transaction() + with self.db.wrap_database_errors: + if params is None and kparams is None: + return self.cursor.callproc(procname) + elif kparams is None: + return self.cursor.callproc(procname, params) + else: + params = params or () + return self.cursor.callproc(procname, params, kparams) + + def execute(self, sql, params=None): + return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) + + def executemany(self, sql, param_list): + return self._execute_with_wrappers(sql, param_list, many=True, executor=self._executemany) + + def _execute_with_wrappers(self, sql, params, many, executor): + context = {'connection': self.db, 'cursor': self} + for wrapper in reversed(self.db.execute_wrappers): + executor = functools.partial(wrapper, executor) + return executor(sql, params, many, context) + + def _execute(self, sql, params, *ignored_wrapper_args): + self.db.validate_no_broken_transaction() + with self.db.wrap_database_errors: + if params is None: + return self.cursor.execute(sql) + else: + return self.cursor.execute(sql, params) + + def _executemany(self, sql, param_list, *ignored_wrapper_args): + self.db.validate_no_broken_transaction() + with self.db.wrap_database_errors: + return self.cursor.executemany(sql, param_list) + + +class CursorDebugWrapper(CursorWrapper): + + # XXX callproc isn't instrumented at this time. + + def execute(self, sql, params=None): + start = time() + try: + return super().execute(sql, params) + finally: + stop = time() + duration = stop - start + sql = self.db.ops.last_executed_query(self.cursor, sql, params) + self.db.queries_log.append({ + 'sql': sql, + 'time': "%.3f" % duration, + }) + logger.debug( + '(%.3f) %s; args=%s', duration, sql, params, + extra={'duration': duration, 'sql': sql, 'params': params} + ) + + def executemany(self, sql, param_list): + start = time() + try: + return super().executemany(sql, param_list) + finally: + stop = time() + duration = stop - start + try: + times = len(param_list) + except TypeError: # param_list could be an iterator + times = '?' + self.db.queries_log.append({ + 'sql': '%s times: %s' % (times, sql), + 'time': "%.3f" % duration, + }) + logger.debug( + '(%.3f) %s; args=%s', duration, sql, param_list, + extra={'duration': duration, 'sql': sql, 'params': param_list} + ) + + +############################################### +# Converters from database (string) to Python # +############################################### + +def typecast_date(s): + return datetime.date(*map(int, s.split('-'))) if s else None # return None if s is null + + +def typecast_time(s): # does NOT store time zone information + if not s: + return None + hour, minutes, seconds = s.split(':') + if '.' in seconds: # check whether seconds have a fractional part + seconds, microseconds = seconds.split('.') + else: + microseconds = '0' + return datetime.time(int(hour), int(minutes), int(seconds), int((microseconds + '000000')[:6])) + + +def typecast_timestamp(s): # does NOT store time zone information + # "2005-07-29 15:48:00.590358-05" + # "2005-07-29 09:56:00-05" + if not s: + return None + if ' ' not in s: + return typecast_date(s) + d, t = s.split() + # Extract timezone information, if it exists. Currently it's ignored. + if '-' in t: + t, tz = t.split('-', 1) + tz = '-' + tz + elif '+' in t: + t, tz = t.split('+', 1) + tz = '+' + tz + else: + tz = '' + dates = d.split('-') + times = t.split(':') + seconds = times[2] + if '.' in seconds: # check whether seconds have a fractional part + seconds, microseconds = seconds.split('.') + else: + microseconds = '0' + tzinfo = utc if settings.USE_TZ else None + return datetime.datetime( + int(dates[0]), int(dates[1]), int(dates[2]), + int(times[0]), int(times[1]), int(seconds), + int((microseconds + '000000')[:6]), tzinfo + ) + + +############################################### +# Converters from Python to database (string) # +############################################### + +def rev_typecast_decimal(d): + if d is None: + return None + return str(d) + + +def split_identifier(identifier): + """ + Split a SQL identifier into a two element tuple of (namespace, name). + + The identifier could be a table, column, or sequence name might be prefixed + by a namespace. + """ + try: + namespace, name = identifier.split('"."') + except ValueError: + namespace, name = '', identifier + return namespace.strip('"'), name.strip('"') + + +def truncate_name(identifier, length=None, hash_len=4): + """ + Shorten a SQL identifier to a repeatable mangled version with the given + length. + + If a quote stripped name contains a namespace, e.g. USERNAME"."TABLE, + truncate the table portion only. + """ + namespace, name = split_identifier(identifier) + + if length is None or len(name) <= length: + return identifier + + digest = hashlib.md5(force_bytes(name)).hexdigest()[:hash_len] + return '%s%s%s' % ('%s"."' % namespace if namespace else '', name[:length - hash_len], digest) + + +def format_number(value, max_digits, decimal_places): + """ + Format a number into a string with the requisite number of digits and + decimal places. + """ + if value is None: + return None + if isinstance(value, decimal.Decimal): + context = decimal.getcontext().copy() + if max_digits is not None: + context.prec = max_digits + if decimal_places is not None: + value = value.quantize(decimal.Decimal(1).scaleb(-decimal_places), context=context) + else: + context.traps[decimal.Rounded] = 1 + value = context.create_decimal(value) + return "{:f}".format(value) + if decimal_places is not None: + return "%.*f" % (decimal_places, value) + return "{:f}".format(value) + + +def strip_quotes(table_name): + """ + Strip quotes off of quoted table names to make them safe for use in index + names, sequence names, etc. For example '"USER"."TABLE"' (an Oracle naming + scheme) becomes 'USER"."TABLE'. + """ + has_quotes = table_name.startswith('"') and table_name.endswith('"') + return table_name[1:-1] if has_quotes else table_name diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__init__.py b/env/lib/python3.5/site-packages/django/db/migrations/__init__.py new file mode 100644 index 0000000..e7f3d2d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/__init__.py @@ -0,0 +1,2 @@ +from .migration import Migration, swappable_dependency # NOQA +from .operations import * # NOQA diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bedbded8af669a7455efa5ddb5960b6d5226bfc3 GIT binary patch literal 255 zcmX|5K?=e!5Zt69TJR>mz)J-U^rndV0lny{2q85=qDdN>iufeIl&dGd;K>BB%g*ew z%ZBt70?C_-6p_|1M!du6o5uhAkY{J3@A=9s00o?fqm9_qae+&?{DR~ zW{s?jAG$lUmX%6SF03$InA0Oe9!+*xr|9dyu#R?h63C~O6~Arwgt{B&kv?nEXiKcL v)AA-2pPCDu^ZeQneqrWZwWTEORYxe5MmChr?8En#y5ct_R`E?24M*q;1)4$` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/autodetector.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/autodetector.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65f3007178e0cd4691833ab809898a91582c43f8 GIT binary patch literal 38065 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 kNw`aSn!KIXtUr3nL#{sc%18uSo z#g5701k<$kl#ac9FkYON_fqqwHaCkbdB)3N9!}R2IxBB z4UaZv=o+9+!Z$p+K}6lpyAEiJ@U}uO4D?u|kHq1$_XvSP}DlBDGu}sk1h!gp)Ka8s7 zdK@DZ$7M5)GtG+>>#aEctzhZ2ryj>#Cvp4-G3!9bn|}@lF3ShG%y&nHO!=-li@)Z3 zZ{2{OF*Vln*Jv=OVF%(}B64J8`}u_lVKUrwi>4K<1s=IW9Jtek;ap;P=rA zV?^%6*cfpxjL(t@<2?wxTtb)5frO(m(uJc=PpIRU;&#+Abv|36j>ro25P*Fg@*S8P zg$(qZSIHIVn%8pB?kiBb8Y(y_Hr7GSQSTaMcL?DhYWKY^6rXswkE!LH$Z`joM?v6V z2nFXd25*o;hYg=i=S-$}?5R}HAt;Dre%c=^N2Qb`xb520mI zZ%EL9zspZP@U%Z0n&91l55BQ@z9>^b_H4>4@C!$Q!Lx9ERnT+mOdNj+eHJ|?!R5y{ zE$BzBtT&GjZZzCQlO<0A(mRSO!^@oyW_kS3L_h;0@E>d-21evSXBWoI=-lZ4WLQ+c zQKGluYqNs}ugoQveaO9Hcc9}7C>9~OZz`QyD>R5EQ0CA4?!~>kma^bw*_-Rz5nQSn zJCq>IY7EJ6o!DZx7bG6Qq+dbtp0)ym?OQFsJr$-oi=R@a{^#PTGf$Ql$M!Jl9Cs#{ zcAt;>g_Ef@xX)$dMsNPB+`u6xrKmFwS5euF&4O|Y0Xn_;iE^w;TC{{=}!5dZ)H literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/executor.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/executor.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c0e013a886e8672937faeee994e40126159b5ae GIT binary patch literal 11913 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 B`NRMK literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/loader.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/loader.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec50ae2c6c094b09ef467c6a5b4cb9dca77a9d92 GIT binary patch literal 10988 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/optimizer.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/optimizer.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df4e8182c37c9eeec1a969abfc93d13c1eafe3ae GIT binary patch literal 2532 zcmaJ@-EJF26rNo>PV6SFC@Q7mZ@5Y=xsFsJAzDC1t%?xz2Lh^OwOWmL$Mz)a+0D#s z9Y@Jk%VY2WJO>hQz|G$Fs&`0;8?N}yti5qa#VRwNnLXz_XU_S~*}Sv0)wvnpdiqy~ zu~%&6X<&T^!(PSob;4K@u$O**5wZamA=~XXV!W)MTICZQNyY{NgWez{)j@+a63k8Z z65FQVuCb)$w^$I~dU^SQ8XMtMrXS@_P1TV!;#t60hvRvi&7|ROB6(K5^nyG$SuCyX z@!3Qg$>&)?N6%Fvx!|d?j%OqOCkBSng@@5{wyFy#DE}Aio=oKu{Ec80ROTj1kNbY}Fs9Ve)5M_l zT@3pzCZz6|v52w5+qBrj7JnfF2~HYx(%kc0_%wvfF-`)uA2Ra=t#>g_0(P*;o*?nN z-KO{(*xn*#^MO$MY$Bz0W{%h)l70SISc{nQH>429)(MTI_iD7UM4Af+af;Hpte>hZ zQbHd5q({hZp^=Pq-s4FjIZ{acvN7^Zv^ht%>u#3uIGYZY7D#Yy|CASes>TyXNwhK- zARUr8oMZDG%t`sA(22nj5+IH3_FzI;O8YkH)OZOoNm$$`molGZY0Zg>^fLuI#uFLu z+a26H$JG__Yl{+%C%Z^JCPih>c6NRGk zg|RFG&p-?3Ek`J4!X!Rt1m{zLa9Zgr0!QZbc2ssk&-qk1+ySL)U6$t{Bv~D12$3*K z+B5Zr@>VhKOp&UcI#VhcBFwMK%zyRf?CD50!+6UbLM) z%mQjEDT;1_0MuNnuX(25O$)R%qL(8E`V@$CCg$+gL*j&=Z(wj`h5B?;k>^n=hSY@2 zxFF(?TVyKJ0>K#)r$$vj^~LCDy`83S@(oD6p^5O4w`karUqq z4lYCrJ+=9Q1zWajSIbrvz+ahZ1MQzXJ8qiqZti?{&eY33uAa~q?9AruGWP=^A`F0E;tkIFtY}?F*>=<){8npS1y6_$p z+hjjjY&KRmXyyyx#;Ow}y9+gY%R{V@F@kt}aEm=5ociS8ZGV97e)R4)zH}C`soE4; zN!~XN1mxlC5OcRxwxtHys4r47lOmR7N7-ddFPl^}WlJ79sgtsW%;UG)F>BB^6k@ZE zX>bv3K3btjpa$)FTLydOns2a!j?&Rkx|x*PY>+n5rkW^chQ4@R4ErG_7Pf+G;dbzT za3#1DZUtMxM_@n;tF`d0;OOK3VZwsFt#TuZH2O>wm7OR;n<-LSZ$=UQOR;#f9z{tO uN0GSzo8E;Lx4eViH>wvJmae_oZiSaVFjWl&{`XBv<;Lfg(J#Fw6xqMbBhc3X literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/questioner.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/questioner.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3f6e3fbc4f71ac7ecaa903bf56a3ce7154c0c8a GIT binary patch literal 9462 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 xj(S~5@ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/recorder.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/recorder.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..feb67fbaef4d2f928e228ba344527f822f9365db GIT binary patch literal 4093 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 C-Ib^S literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8fa95b4f44d3ec34544c2cf9e762f94d4aad5542 GIT binary patch literal 907 zcmZuw&2AGh5FUFsKTT5!5$LHGkRq{%Hd1e(3RNmmL858YaG)zBYm;@tru$dh5j5hK zz6`JAD<@uo6Ej{V3L=(gJUbqLGvC;IcyQ1HJAurQ%@JvbWYDEbvD ziP4NQhn&t}20D+>YjjM7xTBzM_iyA(e!m{i<-|+~ga)l77byA&)eo!`HGrsW=4_W@ z6tF?SZKI5gkt(;fX&TKmdVDR@sr8ES{3oa;g8Vt_nXK%UNqIb8Bx!t{&&BKb^v?9+ zd6dtJ%`)y~$xKBiDRSLgm?YIF<%4Ysk>rUHg0QrY3Rs&hpKTF1S%>Uq@)D0A2V&y* z+;J#gI1lnc4+Hd6d=%lU8mfS+Ixe*d8a+tfx)>2p^V_Gl)J*xXOW ziGsC>vhoR)SM@=4&<+}kT$U?oee+OC+n5wtnWQr8TwGrbKYZ-J6F2?K{%7&&cG!1> Z+`*lxn`c$u-r^4jni_*$;Lp9z-e3ORx>o=I literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/writer.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/__pycache__/writer.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29de8a7dcc347694c17afd2763bdea286f8de89b GIT binary patch literal 8808 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 U*4fmXuqqS(jHT&$cm8kx7jqTV`Tzg` literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/autodetector.py b/env/lib/python3.5/site-packages/django/db/migrations/autodetector.py new file mode 100644 index 0000000..f32d4af --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/autodetector.py @@ -0,0 +1,1260 @@ +import functools +import re +from itertools import chain + +from django.conf import settings +from django.db import models +from django.db.migrations import operations +from django.db.migrations.migration import Migration +from django.db.migrations.operations.models import AlterModelOptions +from django.db.migrations.optimizer import MigrationOptimizer +from django.db.migrations.questioner import MigrationQuestioner +from django.db.migrations.utils import ( + COMPILED_REGEX_TYPE, RegexObject, get_migration_name_timestamp, +) + +from .topological_sort import stable_topological_sort + + +class MigrationAutodetector: + """ + Take a pair of ProjectStates and compare them to see what the first would + need doing to make it match the second (the second usually being the + project's current state). + + Note that this naturally operates on entire projects at a time, + as it's likely that changes interact (for example, you can't + add a ForeignKey without having a migration to add the table it + depends on first). A user interface may offer single-app usage + if it wishes, with the caveat that it may not always be possible. + """ + + def __init__(self, from_state, to_state, questioner=None): + self.from_state = from_state + self.to_state = to_state + self.questioner = questioner or MigrationQuestioner() + self.existing_apps = {app for app, model in from_state.models} + + def changes(self, graph, trim_to_apps=None, convert_apps=None, migration_name=None): + """ + Main entry point to produce a list of applicable changes. + Take a graph to base names on and an optional set of apps + to try and restrict to (restriction is not guaranteed) + """ + changes = self._detect_changes(convert_apps, graph) + changes = self.arrange_for_graph(changes, graph, migration_name) + if trim_to_apps: + changes = self._trim_to_apps(changes, trim_to_apps) + return changes + + def deep_deconstruct(self, obj): + """ + Recursive deconstruction for a field and its arguments. + Used for full comparison for rename/alter; sometimes a single-level + deconstruction will not compare correctly. + """ + if isinstance(obj, list): + return [self.deep_deconstruct(value) for value in obj] + elif isinstance(obj, tuple): + return tuple(self.deep_deconstruct(value) for value in obj) + elif isinstance(obj, dict): + return { + key: self.deep_deconstruct(value) + for key, value in obj.items() + } + elif isinstance(obj, functools.partial): + return (obj.func, self.deep_deconstruct(obj.args), self.deep_deconstruct(obj.keywords)) + elif isinstance(obj, COMPILED_REGEX_TYPE): + return RegexObject(obj) + elif isinstance(obj, type): + # If this is a type that implements 'deconstruct' as an instance method, + # avoid treating this as being deconstructible itself - see #22951 + return obj + elif hasattr(obj, 'deconstruct'): + deconstructed = obj.deconstruct() + if isinstance(obj, models.Field): + # we have a field which also returns a name + deconstructed = deconstructed[1:] + path, args, kwargs = deconstructed + return ( + path, + [self.deep_deconstruct(value) for value in args], + { + key: self.deep_deconstruct(value) + for key, value in kwargs.items() + }, + ) + else: + return obj + + def only_relation_agnostic_fields(self, fields): + """ + Return a definition of the fields that ignores field names and + what related fields actually relate to. Used for detecting renames (as, + of course, the related fields change during renames). + """ + fields_def = [] + for name, field in sorted(fields): + deconstruction = self.deep_deconstruct(field) + if field.remote_field and field.remote_field.model: + del deconstruction[2]['to'] + fields_def.append(deconstruction) + return fields_def + + def _detect_changes(self, convert_apps=None, graph=None): + """ + Return a dict of migration plans which will achieve the + change from from_state to to_state. The dict has app labels + as keys and a list of migrations as values. + + The resulting migrations aren't specially named, but the names + do matter for dependencies inside the set. + + convert_apps is the list of apps to convert to use migrations + (i.e. to make initial migrations for, in the usual case) + + graph is an optional argument that, if provided, can help improve + dependency generation and avoid potential circular dependencies. + """ + # The first phase is generating all the operations for each app + # and gathering them into a big per-app list. + # Then go through that list, order it, and split into migrations to + # resolve dependencies caused by M2Ms and FKs. + self.generated_operations = {} + self.altered_indexes = {} + + # Prepare some old/new state and model lists, separating + # proxy models and ignoring unmigrated apps. + self.old_apps = self.from_state.concrete_apps + self.new_apps = self.to_state.apps + self.old_model_keys = set() + self.old_proxy_keys = set() + self.old_unmanaged_keys = set() + self.new_model_keys = set() + self.new_proxy_keys = set() + self.new_unmanaged_keys = set() + for al, mn in self.from_state.models: + model = self.old_apps.get_model(al, mn) + if not model._meta.managed: + self.old_unmanaged_keys.add((al, mn)) + elif al not in self.from_state.real_apps: + if model._meta.proxy: + self.old_proxy_keys.add((al, mn)) + else: + self.old_model_keys.add((al, mn)) + + for al, mn in self.to_state.models: + model = self.new_apps.get_model(al, mn) + if not model._meta.managed: + self.new_unmanaged_keys.add((al, mn)) + elif ( + al not in self.from_state.real_apps or + (convert_apps and al in convert_apps) + ): + if model._meta.proxy: + self.new_proxy_keys.add((al, mn)) + else: + self.new_model_keys.add((al, mn)) + + # Renames have to come first + self.generate_renamed_models() + + # Prepare lists of fields and generate through model map + self._prepare_field_lists() + self._generate_through_model_map() + + # Generate non-rename model operations + self.generate_deleted_models() + self.generate_created_models() + self.generate_deleted_proxies() + self.generate_created_proxies() + self.generate_altered_options() + self.generate_altered_managers() + + # Create the altered indexes and store them in self.altered_indexes. + # This avoids the same computation in generate_removed_indexes() + # and generate_added_indexes(). + self.create_altered_indexes() + # Generate index removal operations before field is removed + self.generate_removed_indexes() + # Generate field operations + self.generate_renamed_fields() + self.generate_removed_fields() + self.generate_added_fields() + self.generate_altered_fields() + self.generate_altered_unique_together() + self.generate_altered_index_together() + self.generate_added_indexes() + self.generate_altered_db_table() + self.generate_altered_order_with_respect_to() + + self._sort_migrations() + self._build_migration_list(graph) + self._optimize_migrations() + + return self.migrations + + def _prepare_field_lists(self): + """ + Prepare field lists and a list of the fields that used through models + in the old state so dependencies can be made from the through model + deletion to the field that uses it. + """ + self.kept_model_keys = self.old_model_keys & self.new_model_keys + self.kept_proxy_keys = self.old_proxy_keys & self.new_proxy_keys + self.kept_unmanaged_keys = self.old_unmanaged_keys & self.new_unmanaged_keys + self.through_users = {} + self.old_field_keys = { + (app_label, model_name, x) + for app_label, model_name in self.kept_model_keys + for x, y in self.from_state.models[ + app_label, + self.renamed_models.get((app_label, model_name), model_name) + ].fields + } + self.new_field_keys = { + (app_label, model_name, x) + for app_label, model_name in self.kept_model_keys + for x, y in self.to_state.models[app_label, model_name].fields + } + + def _generate_through_model_map(self): + """Through model map generation.""" + for app_label, model_name in sorted(self.old_model_keys): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + for field_name, field in old_model_state.fields: + old_field = self.old_apps.get_model(app_label, old_model_name)._meta.get_field(field_name) + if (hasattr(old_field, "remote_field") and getattr(old_field.remote_field, "through", None) and + not old_field.remote_field.through._meta.auto_created): + through_key = ( + old_field.remote_field.through._meta.app_label, + old_field.remote_field.through._meta.model_name, + ) + self.through_users[through_key] = (app_label, old_model_name, field_name) + + def _build_migration_list(self, graph=None): + """ + Chop the lists of operations up into migrations with dependencies on + each other. Do this by going through an app's list of operations until + one is found that has an outgoing dependency that isn't in another + app's migration yet (hasn't been chopped off its list). Then chop off + the operations before it into a migration and move onto the next app. + If the loops completes without doing anything, there's a circular + dependency (which _should_ be impossible as the operations are + all split at this point so they can't depend and be depended on). + """ + self.migrations = {} + num_ops = sum(len(x) for x in self.generated_operations.values()) + chop_mode = False + while num_ops: + # On every iteration, we step through all the apps and see if there + # is a completed set of operations. + # If we find that a subset of the operations are complete we can + # try to chop it off from the rest and continue, but we only + # do this if we've already been through the list once before + # without any chopping and nothing has changed. + for app_label in sorted(self.generated_operations): + chopped = [] + dependencies = set() + for operation in list(self.generated_operations[app_label]): + deps_satisfied = True + operation_dependencies = set() + for dep in operation._auto_deps: + is_swappable_dep = dep[0] == '__setting__' + if is_swappable_dep: + # We need to temporarily resolve the swappable dependency to prevent + # circular references. While keeping the dependency checks on the + # resolved model we still add the swappable dependencies. + # See #23322 + resolved_app_label, resolved_object_name = getattr(settings, dep[1]).split('.') + original_dep = dep + dep = (resolved_app_label, resolved_object_name.lower(), dep[2], dep[3]) + if dep[0] != app_label and dep[0] != "__setting__": + # External app dependency. See if it's not yet + # satisfied. + for other_operation in self.generated_operations.get(dep[0], []): + if self.check_dependency(other_operation, dep): + deps_satisfied = False + break + if not deps_satisfied: + break + else: + if is_swappable_dep: + operation_dependencies.add((original_dep[0], original_dep[1])) + elif dep[0] in self.migrations: + operation_dependencies.add((dep[0], self.migrations[dep[0]][-1].name)) + else: + # If we can't find the other app, we add a first/last dependency, + # but only if we've already been through once and checked everything + if chop_mode: + # If the app already exists, we add a dependency on the last migration, + # as we don't know which migration contains the target field. + # If it's not yet migrated or has no migrations, we use __first__ + if graph and graph.leaf_nodes(dep[0]): + operation_dependencies.add(graph.leaf_nodes(dep[0])[0]) + else: + operation_dependencies.add((dep[0], "__first__")) + else: + deps_satisfied = False + if deps_satisfied: + chopped.append(operation) + dependencies.update(operation_dependencies) + del self.generated_operations[app_label][0] + else: + break + # Make a migration! Well, only if there's stuff to put in it + if dependencies or chopped: + if not self.generated_operations[app_label] or chop_mode: + subclass = type("Migration", (Migration,), {"operations": [], "dependencies": []}) + instance = subclass("auto_%i" % (len(self.migrations.get(app_label, [])) + 1), app_label) + instance.dependencies = list(dependencies) + instance.operations = chopped + instance.initial = app_label not in self.existing_apps + self.migrations.setdefault(app_label, []).append(instance) + chop_mode = False + else: + self.generated_operations[app_label] = chopped + self.generated_operations[app_label] + new_num_ops = sum(len(x) for x in self.generated_operations.values()) + if new_num_ops == num_ops: + if not chop_mode: + chop_mode = True + else: + raise ValueError("Cannot resolve operation dependencies: %r" % self.generated_operations) + num_ops = new_num_ops + + def _sort_migrations(self): + """ + Reorder to make things possible. Reordering may be needed so FKs work + nicely inside the same app. + """ + for app_label, ops in sorted(self.generated_operations.items()): + # construct a dependency graph for intra-app dependencies + dependency_graph = {op: set() for op in ops} + for op in ops: + for dep in op._auto_deps: + if dep[0] == app_label: + for op2 in ops: + if self.check_dependency(op2, dep): + dependency_graph[op].add(op2) + + # we use a stable sort for deterministic tests & general behavior + self.generated_operations[app_label] = stable_topological_sort(ops, dependency_graph) + + def _optimize_migrations(self): + # Add in internal dependencies among the migrations + for app_label, migrations in self.migrations.items(): + for m1, m2 in zip(migrations, migrations[1:]): + m2.dependencies.append((app_label, m1.name)) + + # De-dupe dependencies + for migrations in self.migrations.values(): + for migration in migrations: + migration.dependencies = list(set(migration.dependencies)) + + # Optimize migrations + for app_label, migrations in self.migrations.items(): + for migration in migrations: + migration.operations = MigrationOptimizer().optimize(migration.operations, app_label=app_label) + + def check_dependency(self, operation, dependency): + """ + Return True if the given operation depends on the given dependency, + False otherwise. + """ + # Created model + if dependency[2] is None and dependency[3] is True: + return ( + isinstance(operation, operations.CreateModel) and + operation.name_lower == dependency[1].lower() + ) + # Created field + elif dependency[2] is not None and dependency[3] is True: + return ( + ( + isinstance(operation, operations.CreateModel) and + operation.name_lower == dependency[1].lower() and + any(dependency[2] == x for x, y in operation.fields) + ) or + ( + isinstance(operation, operations.AddField) and + operation.model_name_lower == dependency[1].lower() and + operation.name_lower == dependency[2].lower() + ) + ) + # Removed field + elif dependency[2] is not None and dependency[3] is False: + return ( + isinstance(operation, operations.RemoveField) and + operation.model_name_lower == dependency[1].lower() and + operation.name_lower == dependency[2].lower() + ) + # Removed model + elif dependency[2] is None and dependency[3] is False: + return ( + isinstance(operation, operations.DeleteModel) and + operation.name_lower == dependency[1].lower() + ) + # Field being altered + elif dependency[2] is not None and dependency[3] == "alter": + return ( + isinstance(operation, operations.AlterField) and + operation.model_name_lower == dependency[1].lower() and + operation.name_lower == dependency[2].lower() + ) + # order_with_respect_to being unset for a field + elif dependency[2] is not None and dependency[3] == "order_wrt_unset": + return ( + isinstance(operation, operations.AlterOrderWithRespectTo) and + operation.name_lower == dependency[1].lower() and + (operation.order_with_respect_to or "").lower() != dependency[2].lower() + ) + # Field is removed and part of an index/unique_together + elif dependency[2] is not None and dependency[3] == "foo_together_change": + return ( + isinstance(operation, (operations.AlterUniqueTogether, + operations.AlterIndexTogether)) and + operation.name_lower == dependency[1].lower() + ) + # Unknown dependency. Raise an error. + else: + raise ValueError("Can't handle dependency %r" % (dependency,)) + + def add_operation(self, app_label, operation, dependencies=None, beginning=False): + # Dependencies are (app_label, model_name, field_name, create/delete as True/False) + operation._auto_deps = dependencies or [] + if beginning: + self.generated_operations.setdefault(app_label, []).insert(0, operation) + else: + self.generated_operations.setdefault(app_label, []).append(operation) + + def swappable_first_key(self, item): + """ + Place potential swappable models first in lists of created models (only + real way to solve #22783). + """ + try: + model = self.new_apps.get_model(item[0], item[1]) + base_names = [base.__name__ for base in model.__bases__] + string_version = "%s.%s" % (item[0], item[1]) + if ( + model._meta.swappable or + "AbstractUser" in base_names or + "AbstractBaseUser" in base_names or + settings.AUTH_USER_MODEL.lower() == string_version.lower() + ): + return ("___" + item[0], "___" + item[1]) + except LookupError: + pass + return item + + def generate_renamed_models(self): + """ + Find any renamed models, generate the operations for them, and remove + the old entry from the model lists. Must be run before other + model-level generation. + """ + self.renamed_models = {} + self.renamed_models_rel = {} + added_models = self.new_model_keys - self.old_model_keys + for app_label, model_name in sorted(added_models): + model_state = self.to_state.models[app_label, model_name] + model_fields_def = self.only_relation_agnostic_fields(model_state.fields) + + removed_models = self.old_model_keys - self.new_model_keys + for rem_app_label, rem_model_name in removed_models: + if rem_app_label == app_label: + rem_model_state = self.from_state.models[rem_app_label, rem_model_name] + rem_model_fields_def = self.only_relation_agnostic_fields(rem_model_state.fields) + if model_fields_def == rem_model_fields_def: + if self.questioner.ask_rename_model(rem_model_state, model_state): + model_opts = self.new_apps.get_model(app_label, model_name)._meta + dependencies = [] + for field in model_opts.get_fields(): + if field.is_relation: + dependencies.extend(self._get_dependencies_for_foreign_key(field)) + self.add_operation( + app_label, + operations.RenameModel( + old_name=rem_model_state.name, + new_name=model_state.name, + ), + dependencies=dependencies, + ) + self.renamed_models[app_label, model_name] = rem_model_name + renamed_models_rel_key = '%s.%s' % (rem_model_state.app_label, rem_model_state.name) + self.renamed_models_rel[renamed_models_rel_key] = '%s.%s' % ( + model_state.app_label, + model_state.name, + ) + self.old_model_keys.remove((rem_app_label, rem_model_name)) + self.old_model_keys.add((app_label, model_name)) + break + + def generate_created_models(self): + """ + Find all new models (both managed and unmanaged) and make create + operations for them as well as separate operations to create any + foreign key or M2M relationships (these are optimized later, if + possible). + + Defer any model options that refer to collections of fields that might + be deferred (e.g. unique_together, index_together). + """ + old_keys = self.old_model_keys | self.old_unmanaged_keys + added_models = self.new_model_keys - old_keys + added_unmanaged_models = self.new_unmanaged_keys - old_keys + all_added_models = chain( + sorted(added_models, key=self.swappable_first_key, reverse=True), + sorted(added_unmanaged_models, key=self.swappable_first_key, reverse=True) + ) + for app_label, model_name in all_added_models: + model_state = self.to_state.models[app_label, model_name] + model_opts = self.new_apps.get_model(app_label, model_name)._meta + # Gather related fields + related_fields = {} + primary_key_rel = None + for field in model_opts.local_fields: + if field.remote_field: + if field.remote_field.model: + if field.primary_key: + primary_key_rel = field.remote_field.model + elif not field.remote_field.parent_link: + related_fields[field.name] = field + # through will be none on M2Ms on swapped-out models; + # we can treat lack of through as auto_created=True, though. + if (getattr(field.remote_field, "through", None) and + not field.remote_field.through._meta.auto_created): + related_fields[field.name] = field + for field in model_opts.local_many_to_many: + if field.remote_field.model: + related_fields[field.name] = field + if getattr(field.remote_field, "through", None) and not field.remote_field.through._meta.auto_created: + related_fields[field.name] = field + # Are there indexes/unique|index_together to defer? + indexes = model_state.options.pop('indexes') + unique_together = model_state.options.pop('unique_together', None) + index_together = model_state.options.pop('index_together', None) + order_with_respect_to = model_state.options.pop('order_with_respect_to', None) + # Depend on the deletion of any possible proxy version of us + dependencies = [ + (app_label, model_name, None, False), + ] + # Depend on all bases + for base in model_state.bases: + if isinstance(base, str) and "." in base: + base_app_label, base_name = base.split(".", 1) + dependencies.append((base_app_label, base_name, None, True)) + # Depend on the other end of the primary key if it's a relation + if primary_key_rel: + dependencies.append(( + primary_key_rel._meta.app_label, + primary_key_rel._meta.object_name, + None, + True + )) + # Generate creation operation + self.add_operation( + app_label, + operations.CreateModel( + name=model_state.name, + fields=[d for d in model_state.fields if d[0] not in related_fields], + options=model_state.options, + bases=model_state.bases, + managers=model_state.managers, + ), + dependencies=dependencies, + beginning=True, + ) + + # Don't add operations which modify the database for unmanaged models + if not model_opts.managed: + continue + + # Generate operations for each related field + for name, field in sorted(related_fields.items()): + dependencies = self._get_dependencies_for_foreign_key(field) + # Depend on our own model being created + dependencies.append((app_label, model_name, None, True)) + # Make operation + self.add_operation( + app_label, + operations.AddField( + model_name=model_name, + name=name, + field=field, + ), + dependencies=list(set(dependencies)), + ) + # Generate other opns + related_dependencies = [ + (app_label, model_name, name, True) + for name in sorted(related_fields) + ] + related_dependencies.append((app_label, model_name, None, True)) + for index in indexes: + self.add_operation( + app_label, + operations.AddIndex( + model_name=model_name, + index=index, + ), + dependencies=related_dependencies, + ) + if unique_together: + self.add_operation( + app_label, + operations.AlterUniqueTogether( + name=model_name, + unique_together=unique_together, + ), + dependencies=related_dependencies + ) + if index_together: + self.add_operation( + app_label, + operations.AlterIndexTogether( + name=model_name, + index_together=index_together, + ), + dependencies=related_dependencies + ) + if order_with_respect_to: + self.add_operation( + app_label, + operations.AlterOrderWithRespectTo( + name=model_name, + order_with_respect_to=order_with_respect_to, + ), + dependencies=[ + (app_label, model_name, order_with_respect_to, True), + (app_label, model_name, None, True), + ] + ) + + # Fix relationships if the model changed from a proxy model to a + # concrete model. + if (app_label, model_name) in self.old_proxy_keys: + for related_object in model_opts.related_objects: + self.add_operation( + related_object.related_model._meta.app_label, + operations.AlterField( + model_name=related_object.related_model._meta.object_name, + name=related_object.field.name, + field=related_object.field, + ), + dependencies=[(app_label, model_name, None, True)], + ) + + def generate_created_proxies(self): + """ + Make CreateModel statements for proxy models. Use the same statements + as that way there's less code duplication, but of course for proxy + models it's safe to skip all the pointless field stuff and just chuck + out an operation. + """ + added = self.new_proxy_keys - self.old_proxy_keys + for app_label, model_name in sorted(added): + model_state = self.to_state.models[app_label, model_name] + assert model_state.options.get("proxy") + # Depend on the deletion of any possible non-proxy version of us + dependencies = [ + (app_label, model_name, None, False), + ] + # Depend on all bases + for base in model_state.bases: + if isinstance(base, str) and "." in base: + base_app_label, base_name = base.split(".", 1) + dependencies.append((base_app_label, base_name, None, True)) + # Generate creation operation + self.add_operation( + app_label, + operations.CreateModel( + name=model_state.name, + fields=[], + options=model_state.options, + bases=model_state.bases, + managers=model_state.managers, + ), + # Depend on the deletion of any possible non-proxy version of us + dependencies=dependencies, + ) + + def generate_deleted_models(self): + """ + Find all deleted models (managed and unmanaged) and make delete + operations for them as well as separate operations to delete any + foreign key or M2M relationships (these are optimized later, if + possible). + + Also bring forward removal of any model options that refer to + collections of fields - the inverse of generate_created_models(). + """ + new_keys = self.new_model_keys | self.new_unmanaged_keys + deleted_models = self.old_model_keys - new_keys + deleted_unmanaged_models = self.old_unmanaged_keys - new_keys + all_deleted_models = chain(sorted(deleted_models), sorted(deleted_unmanaged_models)) + for app_label, model_name in all_deleted_models: + model_state = self.from_state.models[app_label, model_name] + model = self.old_apps.get_model(app_label, model_name) + if not model._meta.managed: + # Skip here, no need to handle fields for unmanaged models + continue + + # Gather related fields + related_fields = {} + for field in model._meta.local_fields: + if field.remote_field: + if field.remote_field.model: + related_fields[field.name] = field + # through will be none on M2Ms on swapped-out models; + # we can treat lack of through as auto_created=True, though. + if (getattr(field.remote_field, "through", None) and + not field.remote_field.through._meta.auto_created): + related_fields[field.name] = field + for field in model._meta.local_many_to_many: + if field.remote_field.model: + related_fields[field.name] = field + if getattr(field.remote_field, "through", None) and not field.remote_field.through._meta.auto_created: + related_fields[field.name] = field + # Generate option removal first + unique_together = model_state.options.pop('unique_together', None) + index_together = model_state.options.pop('index_together', None) + if unique_together: + self.add_operation( + app_label, + operations.AlterUniqueTogether( + name=model_name, + unique_together=None, + ) + ) + if index_together: + self.add_operation( + app_label, + operations.AlterIndexTogether( + name=model_name, + index_together=None, + ) + ) + # Then remove each related field + for name in sorted(related_fields): + self.add_operation( + app_label, + operations.RemoveField( + model_name=model_name, + name=name, + ) + ) + # Finally, remove the model. + # This depends on both the removal/alteration of all incoming fields + # and the removal of all its own related fields, and if it's + # a through model the field that references it. + dependencies = [] + for related_object in model._meta.related_objects: + related_object_app_label = related_object.related_model._meta.app_label + object_name = related_object.related_model._meta.object_name + field_name = related_object.field.name + dependencies.append((related_object_app_label, object_name, field_name, False)) + if not related_object.many_to_many: + dependencies.append((related_object_app_label, object_name, field_name, "alter")) + + for name in sorted(related_fields): + dependencies.append((app_label, model_name, name, False)) + # We're referenced in another field's through= + through_user = self.through_users.get((app_label, model_state.name_lower)) + if through_user: + dependencies.append((through_user[0], through_user[1], through_user[2], False)) + # Finally, make the operation, deduping any dependencies + self.add_operation( + app_label, + operations.DeleteModel( + name=model_state.name, + ), + dependencies=list(set(dependencies)), + ) + + def generate_deleted_proxies(self): + """Make DeleteModel options for proxy models.""" + deleted = self.old_proxy_keys - self.new_proxy_keys + for app_label, model_name in sorted(deleted): + model_state = self.from_state.models[app_label, model_name] + assert model_state.options.get("proxy") + self.add_operation( + app_label, + operations.DeleteModel( + name=model_state.name, + ), + ) + + def generate_renamed_fields(self): + """Work out renamed fields.""" + self.renamed_fields = {} + for app_label, model_name, field_name in sorted(self.new_field_keys - self.old_field_keys): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + field = self.new_apps.get_model(app_label, model_name)._meta.get_field(field_name) + # Scan to see if this is actually a rename! + field_dec = self.deep_deconstruct(field) + for rem_app_label, rem_model_name, rem_field_name in sorted(self.old_field_keys - self.new_field_keys): + if rem_app_label == app_label and rem_model_name == model_name: + old_field = old_model_state.get_field_by_name(rem_field_name) + old_field_dec = self.deep_deconstruct(old_field) + if field.remote_field and field.remote_field.model and 'to' in old_field_dec[2]: + old_rel_to = old_field_dec[2]['to'] + if old_rel_to in self.renamed_models_rel: + old_field_dec[2]['to'] = self.renamed_models_rel[old_rel_to] + old_field.set_attributes_from_name(rem_field_name) + old_db_column = old_field.get_attname_column()[1] + if (old_field_dec == field_dec or ( + # Was the field renamed and db_column equal to the + # old field's column added? + old_field_dec[0:2] == field_dec[0:2] and + dict(old_field_dec[2], db_column=old_db_column) == field_dec[2])): + if self.questioner.ask_rename(model_name, rem_field_name, field_name, field): + self.add_operation( + app_label, + operations.RenameField( + model_name=model_name, + old_name=rem_field_name, + new_name=field_name, + ) + ) + self.old_field_keys.remove((rem_app_label, rem_model_name, rem_field_name)) + self.old_field_keys.add((app_label, model_name, field_name)) + self.renamed_fields[app_label, model_name, field_name] = rem_field_name + break + + def generate_added_fields(self): + """Make AddField operations.""" + for app_label, model_name, field_name in sorted(self.new_field_keys - self.old_field_keys): + self._generate_added_field(app_label, model_name, field_name) + + def _generate_added_field(self, app_label, model_name, field_name): + field = self.new_apps.get_model(app_label, model_name)._meta.get_field(field_name) + # Fields that are foreignkeys/m2ms depend on stuff + dependencies = [] + if field.remote_field and field.remote_field.model: + dependencies.extend(self._get_dependencies_for_foreign_key(field)) + # You can't just add NOT NULL fields with no default or fields + # which don't allow empty strings as default. + time_fields = (models.DateField, models.DateTimeField, models.TimeField) + preserve_default = ( + field.null or field.has_default() or field.many_to_many or + (field.blank and field.empty_strings_allowed) or + (isinstance(field, time_fields) and field.auto_now) + ) + if not preserve_default: + field = field.clone() + if isinstance(field, time_fields) and field.auto_now_add: + field.default = self.questioner.ask_auto_now_add_addition(field_name, model_name) + else: + field.default = self.questioner.ask_not_null_addition(field_name, model_name) + self.add_operation( + app_label, + operations.AddField( + model_name=model_name, + name=field_name, + field=field, + preserve_default=preserve_default, + ), + dependencies=dependencies, + ) + + def generate_removed_fields(self): + """Make RemoveField operations.""" + for app_label, model_name, field_name in sorted(self.old_field_keys - self.new_field_keys): + self._generate_removed_field(app_label, model_name, field_name) + + def _generate_removed_field(self, app_label, model_name, field_name): + self.add_operation( + app_label, + operations.RemoveField( + model_name=model_name, + name=field_name, + ), + # We might need to depend on the removal of an + # order_with_respect_to or index/unique_together operation; + # this is safely ignored if there isn't one + dependencies=[ + (app_label, model_name, field_name, "order_wrt_unset"), + (app_label, model_name, field_name, "foo_together_change"), + ], + ) + + def generate_altered_fields(self): + """ + Make AlterField operations, or possibly RemovedField/AddField if alter + isn's possible. + """ + for app_label, model_name, field_name in sorted(self.old_field_keys & self.new_field_keys): + # Did the field change? + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_field_name = self.renamed_fields.get((app_label, model_name, field_name), field_name) + old_field = self.old_apps.get_model(app_label, old_model_name)._meta.get_field(old_field_name) + new_field = self.new_apps.get_model(app_label, model_name)._meta.get_field(field_name) + # Implement any model renames on relations; these are handled by RenameModel + # so we need to exclude them from the comparison + if hasattr(new_field, "remote_field") and getattr(new_field.remote_field, "model", None): + rename_key = ( + new_field.remote_field.model._meta.app_label, + new_field.remote_field.model._meta.model_name, + ) + if rename_key in self.renamed_models: + new_field.remote_field.model = old_field.remote_field.model + # Handle ForeignKey which can only have a single to_field. + remote_field_name = getattr(new_field.remote_field, 'field_name', None) + if remote_field_name: + to_field_rename_key = rename_key + (remote_field_name,) + if to_field_rename_key in self.renamed_fields: + new_field.remote_field.field_name = old_field.remote_field.field_name + # Handle ForeignObjects which can have multiple from_fields/to_fields. + from_fields = getattr(new_field, 'from_fields', None) + if from_fields: + from_rename_key = (app_label, model_name) + new_field.from_fields = tuple([ + self.renamed_fields.get(from_rename_key + (from_field,), from_field) + for from_field in from_fields + ]) + new_field.to_fields = tuple([ + self.renamed_fields.get(rename_key + (to_field,), to_field) + for to_field in new_field.to_fields + ]) + if hasattr(new_field, "remote_field") and getattr(new_field.remote_field, "through", None): + rename_key = ( + new_field.remote_field.through._meta.app_label, + new_field.remote_field.through._meta.model_name, + ) + if rename_key in self.renamed_models: + new_field.remote_field.through = old_field.remote_field.through + old_field_dec = self.deep_deconstruct(old_field) + new_field_dec = self.deep_deconstruct(new_field) + if old_field_dec != new_field_dec: + both_m2m = old_field.many_to_many and new_field.many_to_many + neither_m2m = not old_field.many_to_many and not new_field.many_to_many + if both_m2m or neither_m2m: + # Either both fields are m2m or neither is + preserve_default = True + if (old_field.null and not new_field.null and not new_field.has_default() and + not new_field.many_to_many): + field = new_field.clone() + new_default = self.questioner.ask_not_null_alteration(field_name, model_name) + if new_default is not models.NOT_PROVIDED: + field.default = new_default + preserve_default = False + else: + field = new_field + self.add_operation( + app_label, + operations.AlterField( + model_name=model_name, + name=field_name, + field=field, + preserve_default=preserve_default, + ) + ) + else: + # We cannot alter between m2m and concrete fields + self._generate_removed_field(app_label, model_name, field_name) + self._generate_added_field(app_label, model_name, field_name) + + def create_altered_indexes(self): + option_name = operations.AddIndex.option_name + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + + old_indexes = old_model_state.options[option_name] + new_indexes = new_model_state.options[option_name] + add_idx = [idx for idx in new_indexes if idx not in old_indexes] + rem_idx = [idx for idx in old_indexes if idx not in new_indexes] + + self.altered_indexes.update({ + (app_label, model_name): { + 'added_indexes': add_idx, 'removed_indexes': rem_idx, + } + }) + + def generate_added_indexes(self): + for (app_label, model_name), alt_indexes in self.altered_indexes.items(): + for index in alt_indexes['added_indexes']: + self.add_operation( + app_label, + operations.AddIndex( + model_name=model_name, + index=index, + ) + ) + + def generate_removed_indexes(self): + for (app_label, model_name), alt_indexes in self.altered_indexes.items(): + for index in alt_indexes['removed_indexes']: + self.add_operation( + app_label, + operations.RemoveIndex( + model_name=model_name, + name=index.name, + ) + ) + + def _get_dependencies_for_foreign_key(self, field): + # Account for FKs to swappable models + swappable_setting = getattr(field, 'swappable_setting', None) + if swappable_setting is not None: + dep_app_label = "__setting__" + dep_object_name = swappable_setting + else: + dep_app_label = field.remote_field.model._meta.app_label + dep_object_name = field.remote_field.model._meta.object_name + dependencies = [(dep_app_label, dep_object_name, None, True)] + if getattr(field.remote_field, "through", None) and not field.remote_field.through._meta.auto_created: + dependencies.append(( + field.remote_field.through._meta.app_label, + field.remote_field.through._meta.object_name, + None, + True, + )) + return dependencies + + def _generate_altered_foo_together(self, operation): + option_name = operation.option_name + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + + # We run the old version through the field renames to account for those + old_value = old_model_state.options.get(option_name) + old_value = { + tuple( + self.renamed_fields.get((app_label, model_name, n), n) + for n in unique + ) + for unique in old_value + } if old_value else set() + + new_value = new_model_state.options.get(option_name) + new_value = set(new_value) if new_value else set() + + if old_value != new_value: + dependencies = [] + for foo_togethers in new_value: + for field_name in foo_togethers: + field = self.new_apps.get_model(app_label, model_name)._meta.get_field(field_name) + if field.remote_field and field.remote_field.model: + dependencies.extend(self._get_dependencies_for_foreign_key(field)) + + self.add_operation( + app_label, + operation( + name=model_name, + **{option_name: new_value} + ), + dependencies=dependencies, + ) + + def generate_altered_unique_together(self): + self._generate_altered_foo_together(operations.AlterUniqueTogether) + + def generate_altered_index_together(self): + self._generate_altered_foo_together(operations.AlterIndexTogether) + + def generate_altered_db_table(self): + models_to_check = self.kept_model_keys.union(self.kept_proxy_keys, self.kept_unmanaged_keys) + for app_label, model_name in sorted(models_to_check): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + old_db_table_name = old_model_state.options.get('db_table') + new_db_table_name = new_model_state.options.get('db_table') + if old_db_table_name != new_db_table_name: + self.add_operation( + app_label, + operations.AlterModelTable( + name=model_name, + table=new_db_table_name, + ) + ) + + def generate_altered_options(self): + """ + Work out if any non-schema-affecting options have changed and make an + operation to represent them in state changes (in case Python code in + migrations needs them). + """ + models_to_check = self.kept_model_keys.union( + self.kept_proxy_keys, + self.kept_unmanaged_keys, + # unmanaged converted to managed + self.old_unmanaged_keys & self.new_model_keys, + # managed converted to unmanaged + self.old_model_keys & self.new_unmanaged_keys, + ) + + for app_label, model_name in sorted(models_to_check): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + old_options = { + key: value for key, value in old_model_state.options.items() + if key in AlterModelOptions.ALTER_OPTION_KEYS + } + new_options = { + key: value for key, value in new_model_state.options.items() + if key in AlterModelOptions.ALTER_OPTION_KEYS + } + if old_options != new_options: + self.add_operation( + app_label, + operations.AlterModelOptions( + name=model_name, + options=new_options, + ) + ) + + def generate_altered_order_with_respect_to(self): + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + if (old_model_state.options.get("order_with_respect_to") != + new_model_state.options.get("order_with_respect_to")): + # Make sure it comes second if we're adding + # (removal dependency is part of RemoveField) + dependencies = [] + if new_model_state.options.get("order_with_respect_to"): + dependencies.append(( + app_label, + model_name, + new_model_state.options["order_with_respect_to"], + True, + )) + # Actually generate the operation + self.add_operation( + app_label, + operations.AlterOrderWithRespectTo( + name=model_name, + order_with_respect_to=new_model_state.options.get('order_with_respect_to'), + ), + dependencies=dependencies, + ) + + def generate_altered_managers(self): + for app_label, model_name in sorted(self.kept_model_keys): + old_model_name = self.renamed_models.get((app_label, model_name), model_name) + old_model_state = self.from_state.models[app_label, old_model_name] + new_model_state = self.to_state.models[app_label, model_name] + if old_model_state.managers != new_model_state.managers: + self.add_operation( + app_label, + operations.AlterModelManagers( + name=model_name, + managers=new_model_state.managers, + ) + ) + + def arrange_for_graph(self, changes, graph, migration_name=None): + """ + Take a result from changes() and a MigrationGraph, and fix the names + and dependencies of the changes so they extend the graph from the leaf + nodes for each app. + """ + leaves = graph.leaf_nodes() + name_map = {} + for app_label, migrations in list(changes.items()): + if not migrations: + continue + # Find the app label's current leaf node + app_leaf = None + for leaf in leaves: + if leaf[0] == app_label: + app_leaf = leaf + break + # Do they want an initial migration for this app? + if app_leaf is None and not self.questioner.ask_initial(app_label): + # They don't. + for migration in migrations: + name_map[(app_label, migration.name)] = (app_label, "__first__") + del changes[app_label] + continue + # Work out the next number in the sequence + if app_leaf is None: + next_number = 1 + else: + next_number = (self.parse_number(app_leaf[1]) or 0) + 1 + # Name each migration + for i, migration in enumerate(migrations): + if i == 0 and app_leaf: + migration.dependencies.append(app_leaf) + if i == 0 and not app_leaf: + new_name = "0001_%s" % migration_name if migration_name else "0001_initial" + else: + new_name = "%04i_%s" % ( + next_number, + migration_name or self.suggest_name(migration.operations)[:100], + ) + name_map[(app_label, migration.name)] = (app_label, new_name) + next_number += 1 + migration.name = new_name + # Now fix dependencies + for migrations in changes.values(): + for migration in migrations: + migration.dependencies = [name_map.get(d, d) for d in migration.dependencies] + return changes + + def _trim_to_apps(self, changes, app_labels): + """ + Take changes from arrange_for_graph() and set of app labels, and return + a modified set of changes which trims out as many migrations that are + not in app_labels as possible. Note that some other migrations may + still be present as they may be required dependencies. + """ + # Gather other app dependencies in a first pass + app_dependencies = {} + for app_label, migrations in changes.items(): + for migration in migrations: + for dep_app_label, name in migration.dependencies: + app_dependencies.setdefault(app_label, set()).add(dep_app_label) + required_apps = set(app_labels) + # Keep resolving till there's no change + old_required_apps = None + while old_required_apps != required_apps: + old_required_apps = set(required_apps) + required_apps.update(*[app_dependencies.get(app_label, ()) for app_label in required_apps]) + # Remove all migrations that aren't needed + for app_label in list(changes): + if app_label not in required_apps: + del changes[app_label] + return changes + + @classmethod + def suggest_name(cls, ops): + """ + Given a set of operations, suggest a name for the migration they might + represent. Names are not guaranteed to be unique, but put some effort + into the fallback name to avoid VCS conflicts if possible. + """ + if len(ops) == 1: + if isinstance(ops[0], operations.CreateModel): + return ops[0].name_lower + elif isinstance(ops[0], operations.DeleteModel): + return "delete_%s" % ops[0].name_lower + elif isinstance(ops[0], operations.AddField): + return "%s_%s" % (ops[0].model_name_lower, ops[0].name_lower) + elif isinstance(ops[0], operations.RemoveField): + return "remove_%s_%s" % (ops[0].model_name_lower, ops[0].name_lower) + elif ops: + if all(isinstance(o, operations.CreateModel) for o in ops): + return "_".join(sorted(o.name_lower for o in ops)) + return "auto_%s" % get_migration_name_timestamp() + + @classmethod + def parse_number(cls, name): + """ + Given a migration name, try to extract a number from the beginning of + it. If no number is found, return None. + """ + match = re.match(r'^\d+', name) + if match: + return int(match.group()) + return None diff --git a/env/lib/python3.5/site-packages/django/db/migrations/exceptions.py b/env/lib/python3.5/site-packages/django/db/migrations/exceptions.py new file mode 100644 index 0000000..f389701 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/exceptions.py @@ -0,0 +1,54 @@ +from django.db.utils import DatabaseError + + +class AmbiguityError(Exception): + """More than one migration matches a name prefix.""" + pass + + +class BadMigrationError(Exception): + """There's a bad migration (unreadable/bad format/etc.).""" + pass + + +class CircularDependencyError(Exception): + """There's an impossible-to-resolve circular dependency.""" + pass + + +class InconsistentMigrationHistory(Exception): + """An applied migration has some of its dependencies not applied.""" + pass + + +class InvalidBasesError(ValueError): + """A model's base classes can't be resolved.""" + pass + + +class IrreversibleError(RuntimeError): + """An irreversible migration is about to be reversed.""" + pass + + +class NodeNotFoundError(LookupError): + """An attempt on a node is made that is not available in the graph.""" + + def __init__(self, message, node, origin=None): + self.message = message + self.origin = origin + self.node = node + + def __str__(self): + return self.message + + def __repr__(self): + return "NodeNotFoundError(%r)" % (self.node,) + + +class MigrationSchemaMissing(DatabaseError): + pass + + +class InvalidMigrationPlan(ValueError): + pass diff --git a/env/lib/python3.5/site-packages/django/db/migrations/executor.py b/env/lib/python3.5/site-packages/django/db/migrations/executor.py new file mode 100644 index 0000000..ebaf756 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/executor.py @@ -0,0 +1,369 @@ +from django.apps.registry import apps as global_apps +from django.db import migrations, router + +from .exceptions import InvalidMigrationPlan +from .loader import MigrationLoader +from .recorder import MigrationRecorder +from .state import ProjectState + + +class MigrationExecutor: + """ + End-to-end migration execution - load migrations and run them up or down + to a specified set of targets. + """ + + def __init__(self, connection, progress_callback=None): + self.connection = connection + self.loader = MigrationLoader(self.connection) + self.recorder = MigrationRecorder(self.connection) + self.progress_callback = progress_callback + + def migration_plan(self, targets, clean_start=False): + """ + Given a set of targets, return a list of (Migration instance, backwards?). + """ + plan = [] + if clean_start: + applied = set() + else: + applied = set(self.loader.applied_migrations) + for target in targets: + # If the target is (app_label, None), that means unmigrate everything + if target[1] is None: + for root in self.loader.graph.root_nodes(): + if root[0] == target[0]: + for migration in self.loader.graph.backwards_plan(root): + if migration in applied: + plan.append((self.loader.graph.nodes[migration], True)) + applied.remove(migration) + # If the migration is already applied, do backwards mode, + # otherwise do forwards mode. + elif target in applied: + # Don't migrate backwards all the way to the target node (that + # may roll back dependencies in other apps that don't need to + # be rolled back); instead roll back through target's immediate + # child(ren) in the same app, and no further. + next_in_app = sorted( + n for n in + self.loader.graph.node_map[target].children + if n[0] == target[0] + ) + for node in next_in_app: + for migration in self.loader.graph.backwards_plan(node): + if migration in applied: + plan.append((self.loader.graph.nodes[migration], True)) + applied.remove(migration) + else: + for migration in self.loader.graph.forwards_plan(target): + if migration not in applied: + plan.append((self.loader.graph.nodes[migration], False)) + applied.add(migration) + return plan + + def _create_project_state(self, with_applied_migrations=False): + """ + Create a project state including all the applications without + migrations and applied migrations if with_applied_migrations=True. + """ + state = ProjectState(real_apps=list(self.loader.unmigrated_apps)) + if with_applied_migrations: + # Create the forwards plan Django would follow on an empty database + full_plan = self.migration_plan(self.loader.graph.leaf_nodes(), clean_start=True) + applied_migrations = { + self.loader.graph.nodes[key] for key in self.loader.applied_migrations + if key in self.loader.graph.nodes + } + for migration, _ in full_plan: + if migration in applied_migrations: + migration.mutate_state(state, preserve=False) + return state + + def migrate(self, targets, plan=None, state=None, fake=False, fake_initial=False): + """ + Migrate the database up to the given targets. + + Django first needs to create all project states before a migration is + (un)applied and in a second step run all the database operations. + """ + # The django_migrations table must be present to record applied + # migrations. + self.recorder.ensure_schema() + + if plan is None: + plan = self.migration_plan(targets) + # Create the forwards plan Django would follow on an empty database + full_plan = self.migration_plan(self.loader.graph.leaf_nodes(), clean_start=True) + + all_forwards = all(not backwards for mig, backwards in plan) + all_backwards = all(backwards for mig, backwards in plan) + + if not plan: + if state is None: + # The resulting state should include applied migrations. + state = self._create_project_state(with_applied_migrations=True) + elif all_forwards == all_backwards: + # This should only happen if there's a mixed plan + raise InvalidMigrationPlan( + "Migration plans with both forwards and backwards migrations " + "are not supported. Please split your migration process into " + "separate plans of only forwards OR backwards migrations.", + plan + ) + elif all_forwards: + if state is None: + # The resulting state should still include applied migrations. + state = self._create_project_state(with_applied_migrations=True) + state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) + else: + # No need to check for `elif all_backwards` here, as that condition + # would always evaluate to true. + state = self._migrate_all_backwards(plan, full_plan, fake=fake) + + self.check_replacements() + + return state + + def _migrate_all_forwards(self, state, plan, full_plan, fake, fake_initial): + """ + Take a list of 2-tuples of the form (migration instance, False) and + apply them in the order they occur in the full_plan. + """ + migrations_to_run = {m[0] for m in plan} + for migration, _ in full_plan: + if not migrations_to_run: + # We remove every migration that we applied from these sets so + # that we can bail out once the last migration has been applied + # and don't always run until the very end of the migration + # process. + break + if migration in migrations_to_run: + if 'apps' not in state.__dict__: + if self.progress_callback: + self.progress_callback("render_start") + state.apps # Render all -- performance critical + if self.progress_callback: + self.progress_callback("render_success") + state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) + migrations_to_run.remove(migration) + + return state + + def _migrate_all_backwards(self, plan, full_plan, fake): + """ + Take a list of 2-tuples of the form (migration instance, True) and + unapply them in reverse order they occur in the full_plan. + + Since unapplying a migration requires the project state prior to that + migration, Django will compute the migration states before each of them + in a first run over the plan and then unapply them in a second run over + the plan. + """ + migrations_to_run = {m[0] for m in plan} + # Holds all migration states prior to the migrations being unapplied + states = {} + state = self._create_project_state() + applied_migrations = { + self.loader.graph.nodes[key] for key in self.loader.applied_migrations + if key in self.loader.graph.nodes + } + if self.progress_callback: + self.progress_callback("render_start") + for migration, _ in full_plan: + if not migrations_to_run: + # We remove every migration that we applied from this set so + # that we can bail out once the last migration has been applied + # and don't always run until the very end of the migration + # process. + break + if migration in migrations_to_run: + if 'apps' not in state.__dict__: + state.apps # Render all -- performance critical + # The state before this migration + states[migration] = state + # The old state keeps as-is, we continue with the new state + state = migration.mutate_state(state, preserve=True) + migrations_to_run.remove(migration) + elif migration in applied_migrations: + # Only mutate the state if the migration is actually applied + # to make sure the resulting state doesn't include changes + # from unrelated migrations. + migration.mutate_state(state, preserve=False) + if self.progress_callback: + self.progress_callback("render_success") + + for migration, _ in plan: + self.unapply_migration(states[migration], migration, fake=fake) + applied_migrations.remove(migration) + + # Generate the post migration state by starting from the state before + # the last migration is unapplied and mutating it to include all the + # remaining applied migrations. + last_unapplied_migration = plan[-1][0] + state = states[last_unapplied_migration] + for index, (migration, _) in enumerate(full_plan): + if migration == last_unapplied_migration: + for migration, _ in full_plan[index:]: + if migration in applied_migrations: + migration.mutate_state(state, preserve=False) + break + + return state + + def collect_sql(self, plan): + """ + Take a migration plan and return a list of collected SQL statements + that represent the best-efforts version of that plan. + """ + statements = [] + state = None + for migration, backwards in plan: + with self.connection.schema_editor(collect_sql=True, atomic=migration.atomic) as schema_editor: + if state is None: + state = self.loader.project_state((migration.app_label, migration.name), at_end=False) + if not backwards: + state = migration.apply(state, schema_editor, collect_sql=True) + else: + state = migration.unapply(state, schema_editor, collect_sql=True) + statements.extend(schema_editor.collected_sql) + return statements + + def apply_migration(self, state, migration, fake=False, fake_initial=False): + """Run a migration forwards.""" + if self.progress_callback: + self.progress_callback("apply_start", migration, fake) + if not fake: + if fake_initial: + # Test to see if this is an already-applied initial migration + applied, state = self.detect_soft_applied(state, migration) + if applied: + fake = True + if not fake: + # Alright, do it normally + with self.connection.schema_editor(atomic=migration.atomic) as schema_editor: + state = migration.apply(state, schema_editor) + # For replacement migrations, record individual statuses + if migration.replaces: + for app_label, name in migration.replaces: + self.recorder.record_applied(app_label, name) + else: + self.recorder.record_applied(migration.app_label, migration.name) + # Report progress + if self.progress_callback: + self.progress_callback("apply_success", migration, fake) + return state + + def unapply_migration(self, state, migration, fake=False): + """Run a migration backwards.""" + if self.progress_callback: + self.progress_callback("unapply_start", migration, fake) + if not fake: + with self.connection.schema_editor(atomic=migration.atomic) as schema_editor: + state = migration.unapply(state, schema_editor) + # For replacement migrations, record individual statuses + if migration.replaces: + for app_label, name in migration.replaces: + self.recorder.record_unapplied(app_label, name) + else: + self.recorder.record_unapplied(migration.app_label, migration.name) + # Report progress + if self.progress_callback: + self.progress_callback("unapply_success", migration, fake) + return state + + def check_replacements(self): + """ + Mark replacement migrations applied if their replaced set all are. + + Do this unconditionally on every migrate, rather than just when + migrations are applied or unapplied, to correctly handle the case + when a new squash migration is pushed to a deployment that already had + all its replaced migrations applied. In this case no new migration will + be applied, but the applied state of the squashed migration must be + maintained. + """ + applied = self.recorder.applied_migrations() + for key, migration in self.loader.replacements.items(): + all_applied = all(m in applied for m in migration.replaces) + if all_applied and key not in applied: + self.recorder.record_applied(*key) + + def detect_soft_applied(self, project_state, migration): + """ + Test whether a migration has been implicitly applied - that the + tables or columns it would create exist. This is intended only for use + on initial migrations (as it only looks for CreateModel and AddField). + """ + def should_skip_detecting_model(migration, model): + """ + No need to detect tables for proxy models, unmanaged models, or + models that can't be migrated on the current database. + """ + return ( + model._meta.proxy or not model._meta.managed or not + router.allow_migrate( + self.connection.alias, migration.app_label, + model_name=model._meta.model_name, + ) + ) + + if migration.initial is None: + # Bail if the migration isn't the first one in its app + if any(app == migration.app_label for app, name in migration.dependencies): + return False, project_state + elif migration.initial is False: + # Bail if it's NOT an initial migration + return False, project_state + + if project_state is None: + after_state = self.loader.project_state((migration.app_label, migration.name), at_end=True) + else: + after_state = migration.mutate_state(project_state) + apps = after_state.apps + found_create_model_migration = False + found_add_field_migration = False + with self.connection.cursor() as cursor: + existing_table_names = self.connection.introspection.table_names(cursor) + # Make sure all create model and add field operations are done + for operation in migration.operations: + if isinstance(operation, migrations.CreateModel): + model = apps.get_model(migration.app_label, operation.name) + if model._meta.swapped: + # We have to fetch the model to test with from the + # main app cache, as it's not a direct dependency. + model = global_apps.get_model(model._meta.swapped) + if should_skip_detecting_model(migration, model): + continue + if model._meta.db_table not in existing_table_names: + return False, project_state + found_create_model_migration = True + elif isinstance(operation, migrations.AddField): + model = apps.get_model(migration.app_label, operation.model_name) + if model._meta.swapped: + # We have to fetch the model to test with from the + # main app cache, as it's not a direct dependency. + model = global_apps.get_model(model._meta.swapped) + if should_skip_detecting_model(migration, model): + continue + + table = model._meta.db_table + field = model._meta.get_field(operation.name) + + # Handle implicit many-to-many tables created by AddField. + if field.many_to_many: + if field.remote_field.through._meta.db_table not in existing_table_names: + return False, project_state + else: + found_add_field_migration = True + continue + + column_names = [ + column.name for column in + self.connection.introspection.get_table_description(self.connection.cursor(), table) + ] + if field.column not in column_names: + return False, project_state + found_add_field_migration = True + # If we get this far and we found at least one CreateModel or AddField migration, + # the migration is considered implicitly applied. + return (found_create_model_migration or found_add_field_migration), after_state diff --git a/env/lib/python3.5/site-packages/django/db/migrations/graph.py b/env/lib/python3.5/site-packages/django/db/migrations/graph.py new file mode 100644 index 0000000..61ad936 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/graph.py @@ -0,0 +1,382 @@ +import warnings +from functools import total_ordering + +from django.db.migrations.state import ProjectState +from django.utils.datastructures import OrderedSet + +from .exceptions import CircularDependencyError, NodeNotFoundError + +RECURSION_DEPTH_WARNING = ( + "Maximum recursion depth exceeded while generating migration graph, " + "falling back to iterative approach. If you're experiencing performance issues, " + "consider squashing migrations as described at " + "https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations." +) + + +@total_ordering +class Node: + """ + A single node in the migration graph. Contains direct links to adjacent + nodes in either direction. + """ + def __init__(self, key): + self.key = key + self.children = set() + self.parents = set() + + def __eq__(self, other): + return self.key == other + + def __lt__(self, other): + return self.key < other + + def __hash__(self): + return hash(self.key) + + def __getitem__(self, item): + return self.key[item] + + def __str__(self): + return str(self.key) + + def __repr__(self): + return '<%s: (%r, %r)>' % (self.__class__.__name__, self.key[0], self.key[1]) + + def add_child(self, child): + self.children.add(child) + + def add_parent(self, parent): + self.parents.add(parent) + + # Use manual caching, @cached_property effectively doubles the + # recursion depth for each recursion. + def ancestors(self): + # Use self.key instead of self to speed up the frequent hashing + # when constructing an OrderedSet. + if '_ancestors' not in self.__dict__: + ancestors = [] + for parent in sorted(self.parents, reverse=True): + ancestors += parent.ancestors() + ancestors.append(self.key) + self.__dict__['_ancestors'] = list(OrderedSet(ancestors)) + return self.__dict__['_ancestors'] + + # Use manual caching, @cached_property effectively doubles the + # recursion depth for each recursion. + def descendants(self): + # Use self.key instead of self to speed up the frequent hashing + # when constructing an OrderedSet. + if '_descendants' not in self.__dict__: + descendants = [] + for child in sorted(self.children, reverse=True): + descendants += child.descendants() + descendants.append(self.key) + self.__dict__['_descendants'] = list(OrderedSet(descendants)) + return self.__dict__['_descendants'] + + +class DummyNode(Node): + def __init__(self, key, origin, error_message): + super().__init__(key) + self.origin = origin + self.error_message = error_message + + def promote(self): + """ + Transition dummy to a normal node and clean off excess attribs. + Creating a Node object from scratch would be too much of a + hassle as many dependendies would need to be remapped. + """ + del self.origin + del self.error_message + self.__class__ = Node + + def raise_error(self): + raise NodeNotFoundError(self.error_message, self.key, origin=self.origin) + + +class MigrationGraph: + """ + Represent the digraph of all migrations in a project. + + Each migration is a node, and each dependency is an edge. There are + no implicit dependencies between numbered migrations - the numbering is + merely a convention to aid file listing. Every new numbered migration + has a declared dependency to the previous number, meaning that VCS + branch merges can be detected and resolved. + + Migrations files can be marked as replacing another set of migrations - + this is to support the "squash" feature. The graph handler isn't responsible + for these; instead, the code to load them in here should examine the + migration files and if the replaced migrations are all either unapplied + or not present, it should ignore the replaced ones, load in just the + replacing migration, and repoint any dependencies that pointed to the + replaced migrations to point to the replacing one. + + A node should be a tuple: (app_path, migration_name). The tree special-cases + things within an app - namely, root nodes and leaf nodes ignore dependencies + to other apps. + """ + + def __init__(self): + self.node_map = {} + self.nodes = {} + self.cached = False + + def add_node(self, key, migration): + # If the key already exists, then it must be a dummy node. + dummy_node = self.node_map.get(key) + if dummy_node: + # Promote DummyNode to Node. + dummy_node.promote() + else: + node = Node(key) + self.node_map[key] = node + self.nodes[key] = migration + self.clear_cache() + + def add_dummy_node(self, key, origin, error_message): + node = DummyNode(key, origin, error_message) + self.node_map[key] = node + self.nodes[key] = None + + def add_dependency(self, migration, child, parent, skip_validation=False): + """ + This may create dummy nodes if they don't yet exist. If + `skip_validation=True`, validate_consistency() should be called + afterwards. + """ + if child not in self.nodes: + error_message = ( + "Migration %s dependencies reference nonexistent" + " child node %r" % (migration, child) + ) + self.add_dummy_node(child, migration, error_message) + if parent not in self.nodes: + error_message = ( + "Migration %s dependencies reference nonexistent" + " parent node %r" % (migration, parent) + ) + self.add_dummy_node(parent, migration, error_message) + self.node_map[child].add_parent(self.node_map[parent]) + self.node_map[parent].add_child(self.node_map[child]) + if not skip_validation: + self.validate_consistency() + self.clear_cache() + + def remove_replaced_nodes(self, replacement, replaced): + """ + Remove each of the `replaced` nodes (when they exist). Any + dependencies that were referencing them are changed to reference the + `replacement` node instead. + """ + # Cast list of replaced keys to set to speed up lookup later. + replaced = set(replaced) + try: + replacement_node = self.node_map[replacement] + except KeyError as err: + raise NodeNotFoundError( + "Unable to find replacement node %r. It was either never added" + " to the migration graph, or has been removed." % (replacement,), + replacement + ) from err + for replaced_key in replaced: + self.nodes.pop(replaced_key, None) + replaced_node = self.node_map.pop(replaced_key, None) + if replaced_node: + for child in replaced_node.children: + child.parents.remove(replaced_node) + # We don't want to create dependencies between the replaced + # node and the replacement node as this would lead to + # self-referencing on the replacement node at a later iteration. + if child.key not in replaced: + replacement_node.add_child(child) + child.add_parent(replacement_node) + for parent in replaced_node.parents: + parent.children.remove(replaced_node) + # Again, to avoid self-referencing. + if parent.key not in replaced: + replacement_node.add_parent(parent) + parent.add_child(replacement_node) + self.clear_cache() + + def remove_replacement_node(self, replacement, replaced): + """ + The inverse operation to `remove_replaced_nodes`. Almost. Remove the + replacement node `replacement` and remap its child nodes to `replaced` + - the list of nodes it would have replaced. Don't remap its parent + nodes as they are expected to be correct already. + """ + self.nodes.pop(replacement, None) + try: + replacement_node = self.node_map.pop(replacement) + except KeyError as err: + raise NodeNotFoundError( + "Unable to remove replacement node %r. It was either never added" + " to the migration graph, or has been removed already." % (replacement,), + replacement + ) from err + replaced_nodes = set() + replaced_nodes_parents = set() + for key in replaced: + replaced_node = self.node_map.get(key) + if replaced_node: + replaced_nodes.add(replaced_node) + replaced_nodes_parents |= replaced_node.parents + # We're only interested in the latest replaced node, so filter out + # replaced nodes that are parents of other replaced nodes. + replaced_nodes -= replaced_nodes_parents + for child in replacement_node.children: + child.parents.remove(replacement_node) + for replaced_node in replaced_nodes: + replaced_node.add_child(child) + child.add_parent(replaced_node) + for parent in replacement_node.parents: + parent.children.remove(replacement_node) + # NOTE: There is no need to remap parent dependencies as we can + # assume the replaced nodes already have the correct ancestry. + self.clear_cache() + + def validate_consistency(self): + """Ensure there are no dummy nodes remaining in the graph.""" + [n.raise_error() for n in self.node_map.values() if isinstance(n, DummyNode)] + + def clear_cache(self): + if self.cached: + for node in self.nodes: + self.node_map[node].__dict__.pop('_ancestors', None) + self.node_map[node].__dict__.pop('_descendants', None) + self.cached = False + + def forwards_plan(self, target): + """ + Given a node, return a list of which previous nodes (dependencies) must + be applied, ending with the node itself. This is the list you would + follow if applying the migrations to a database. + """ + if target not in self.nodes: + raise NodeNotFoundError("Node %r not a valid node" % (target,), target) + # Use parent.key instead of parent to speed up the frequent hashing in ensure_not_cyclic + self.ensure_not_cyclic(target, lambda x: (parent.key for parent in self.node_map[x].parents)) + self.cached = True + node = self.node_map[target] + try: + return node.ancestors() + except RuntimeError: + # fallback to iterative dfs + warnings.warn(RECURSION_DEPTH_WARNING, RuntimeWarning) + return self.iterative_dfs(node) + + def backwards_plan(self, target): + """ + Given a node, return a list of which dependent nodes (dependencies) + must be unapplied, ending with the node itself. This is the list you + would follow if removing the migrations from a database. + """ + if target not in self.nodes: + raise NodeNotFoundError("Node %r not a valid node" % (target,), target) + # Use child.key instead of child to speed up the frequent hashing in ensure_not_cyclic + self.ensure_not_cyclic(target, lambda x: (child.key for child in self.node_map[x].children)) + self.cached = True + node = self.node_map[target] + try: + return node.descendants() + except RuntimeError: + # fallback to iterative dfs + warnings.warn(RECURSION_DEPTH_WARNING, RuntimeWarning) + return self.iterative_dfs(node, forwards=False) + + def iterative_dfs(self, start, forwards=True): + """Iterative depth-first search for finding dependencies.""" + visited = [] + stack = [start] + while stack: + node = stack.pop() + visited.append(node) + stack += sorted(node.parents if forwards else node.children) + return list(OrderedSet(reversed(visited))) + + def root_nodes(self, app=None): + """ + Return all root nodes - that is, nodes with no dependencies inside + their app. These are the starting point for an app. + """ + roots = set() + for node in self.nodes: + if all(key[0] != node[0] for key in self.node_map[node].parents) and (not app or app == node[0]): + roots.add(node) + return sorted(roots) + + def leaf_nodes(self, app=None): + """ + Return all leaf nodes - that is, nodes with no dependents in their app. + These are the "most current" version of an app's schema. + Having more than one per app is technically an error, but one that + gets handled further up, in the interactive command - it's usually the + result of a VCS merge and needs some user input. + """ + leaves = set() + for node in self.nodes: + if all(key[0] != node[0] for key in self.node_map[node].children) and (not app or app == node[0]): + leaves.add(node) + return sorted(leaves) + + def ensure_not_cyclic(self, start, get_children): + # Algo from GvR: + # https://neopythonic.blogspot.com/2009/01/detecting-cycles-in-directed-graph.html + todo = set(self.nodes) + while todo: + node = todo.pop() + stack = [node] + while stack: + top = stack[-1] + for node in get_children(top): + if node in stack: + cycle = stack[stack.index(node):] + raise CircularDependencyError(", ".join("%s.%s" % n for n in cycle)) + if node in todo: + stack.append(node) + todo.remove(node) + break + else: + node = stack.pop() + + def __str__(self): + return 'Graph: %s nodes, %s edges' % self._nodes_and_edges() + + def __repr__(self): + nodes, edges = self._nodes_and_edges() + return '<%s: nodes=%s, edges=%s>' % (self.__class__.__name__, nodes, edges) + + def _nodes_and_edges(self): + return len(self.nodes), sum(len(node.parents) for node in self.node_map.values()) + + def _generate_plan(self, nodes, at_end): + plan = [] + for node in nodes: + for migration in self.forwards_plan(node): + if migration not in plan and (at_end or migration not in nodes): + plan.append(migration) + return plan + + def make_state(self, nodes=None, at_end=True, real_apps=None): + """ + Given a migration node or nodes, return a complete ProjectState for it. + If at_end is False, return the state before the migration has run. + If nodes is not provided, return the overall most current project state. + """ + if nodes is None: + nodes = list(self.leaf_nodes()) + if not nodes: + return ProjectState() + if not isinstance(nodes[0], tuple): + nodes = [nodes] + plan = self._generate_plan(nodes, at_end) + project_state = ProjectState(real_apps=real_apps) + for node in plan: + project_state = self.nodes[node].mutate_state(project_state, preserve=False) + return project_state + + def __contains__(self, node): + return node in self.nodes diff --git a/env/lib/python3.5/site-packages/django/db/migrations/loader.py b/env/lib/python3.5/site-packages/django/db/migrations/loader.py new file mode 100644 index 0000000..9d0b4a4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/loader.py @@ -0,0 +1,322 @@ +import pkgutil +import sys +from importlib import import_module, reload + +from django.apps import apps +from django.conf import settings +from django.db.migrations.graph import MigrationGraph +from django.db.migrations.recorder import MigrationRecorder + +from .exceptions import ( + AmbiguityError, BadMigrationError, InconsistentMigrationHistory, + NodeNotFoundError, +) + +MIGRATIONS_MODULE_NAME = 'migrations' + + +class MigrationLoader: + """ + Load migration files from disk and their status from the database. + + Migration files are expected to live in the "migrations" directory of + an app. Their names are entirely unimportant from a code perspective, + but will probably follow the 1234_name.py convention. + + On initialization, this class will scan those directories, and open and + read the Python files, looking for a class called Migration, which should + inherit from django.db.migrations.Migration. See + django.db.migrations.migration for what that looks like. + + Some migrations will be marked as "replacing" another set of migrations. + These are loaded into a separate set of migrations away from the main ones. + If all the migrations they replace are either unapplied or missing from + disk, then they are injected into the main set, replacing the named migrations. + Any dependency pointers to the replaced migrations are re-pointed to the + new migration. + + This does mean that this class MUST also talk to the database as well as + to disk, but this is probably fine. We're already not just operating + in memory. + """ + + def __init__(self, connection, load=True, ignore_no_migrations=False): + self.connection = connection + self.disk_migrations = None + self.applied_migrations = None + self.ignore_no_migrations = ignore_no_migrations + if load: + self.build_graph() + + @classmethod + def migrations_module(cls, app_label): + """ + Return the path to the migrations module for the specified app_label + and a boolean indicating if the module is specified in + settings.MIGRATION_MODULE. + """ + if app_label in settings.MIGRATION_MODULES: + return settings.MIGRATION_MODULES[app_label], True + else: + app_package_name = apps.get_app_config(app_label).name + return '%s.%s' % (app_package_name, MIGRATIONS_MODULE_NAME), False + + def load_disk(self): + """Load the migrations from all INSTALLED_APPS from disk.""" + self.disk_migrations = {} + self.unmigrated_apps = set() + self.migrated_apps = set() + for app_config in apps.get_app_configs(): + # Get the migrations module directory + module_name, explicit = self.migrations_module(app_config.label) + if module_name is None: + self.unmigrated_apps.add(app_config.label) + continue + was_loaded = module_name in sys.modules + try: + module = import_module(module_name) + except ImportError as e: + # I hate doing this, but I don't want to squash other import errors. + # Might be better to try a directory check directly. + if ((explicit and self.ignore_no_migrations) or ( + not explicit and "No module named" in str(e) and MIGRATIONS_MODULE_NAME in str(e))): + self.unmigrated_apps.add(app_config.label) + continue + raise + else: + # Empty directories are namespaces. + # getattr() needed on PY36 and older (replace w/attribute access). + if getattr(module, '__file__', None) is None: + self.unmigrated_apps.add(app_config.label) + continue + # Module is not a package (e.g. migrations.py). + if not hasattr(module, '__path__'): + self.unmigrated_apps.add(app_config.label) + continue + # Force a reload if it's already loaded (tests need this) + if was_loaded: + reload(module) + self.migrated_apps.add(app_config.label) + migration_names = { + name for _, name, is_pkg in pkgutil.iter_modules(module.__path__) + if not is_pkg and name[0] not in '_~' + } + # Load migrations + for migration_name in migration_names: + migration_path = '%s.%s' % (module_name, migration_name) + try: + migration_module = import_module(migration_path) + except ImportError as e: + if 'bad magic number' in str(e): + raise ImportError( + "Couldn't import %r as it appears to be a stale " + ".pyc file." % migration_path + ) from e + else: + raise + if not hasattr(migration_module, "Migration"): + raise BadMigrationError( + "Migration %s in app %s has no Migration class" % (migration_name, app_config.label) + ) + self.disk_migrations[app_config.label, migration_name] = migration_module.Migration( + migration_name, + app_config.label, + ) + + def get_migration(self, app_label, name_prefix): + """Return the named migration or raise NodeNotFoundError.""" + return self.graph.nodes[app_label, name_prefix] + + def get_migration_by_prefix(self, app_label, name_prefix): + """ + Return the migration(s) which match the given app label and name_prefix. + """ + # Do the search + results = [] + for migration_app_label, migration_name in self.disk_migrations: + if migration_app_label == app_label and migration_name.startswith(name_prefix): + results.append((migration_app_label, migration_name)) + if len(results) > 1: + raise AmbiguityError( + "There is more than one migration for '%s' with the prefix '%s'" % (app_label, name_prefix) + ) + elif not results: + raise KeyError("There no migrations for '%s' with the prefix '%s'" % (app_label, name_prefix)) + else: + return self.disk_migrations[results[0]] + + def check_key(self, key, current_app): + if (key[1] != "__first__" and key[1] != "__latest__") or key in self.graph: + return key + # Special-case __first__, which means "the first migration" for + # migrated apps, and is ignored for unmigrated apps. It allows + # makemigrations to declare dependencies on apps before they even have + # migrations. + if key[0] == current_app: + # Ignore __first__ references to the same app (#22325) + return + if key[0] in self.unmigrated_apps: + # This app isn't migrated, but something depends on it. + # The models will get auto-added into the state, though + # so we're fine. + return + if key[0] in self.migrated_apps: + try: + if key[1] == "__first__": + return self.graph.root_nodes(key[0])[0] + else: # "__latest__" + return self.graph.leaf_nodes(key[0])[0] + except IndexError: + if self.ignore_no_migrations: + return None + else: + raise ValueError("Dependency on app with no migrations: %s" % key[0]) + raise ValueError("Dependency on unknown app: %s" % key[0]) + + def add_internal_dependencies(self, key, migration): + """ + Internal dependencies need to be added first to ensure `__first__` + dependencies find the correct root node. + """ + for parent in migration.dependencies: + # Ignore __first__ references to the same app. + if parent[0] == key[0] and parent[1] != '__first__': + self.graph.add_dependency(migration, key, parent, skip_validation=True) + + def add_external_dependencies(self, key, migration): + for parent in migration.dependencies: + # Skip internal dependencies + if key[0] == parent[0]: + continue + parent = self.check_key(parent, key[0]) + if parent is not None: + self.graph.add_dependency(migration, key, parent, skip_validation=True) + for child in migration.run_before: + child = self.check_key(child, key[0]) + if child is not None: + self.graph.add_dependency(migration, child, key, skip_validation=True) + + def build_graph(self): + """ + Build a migration dependency graph using both the disk and database. + You'll need to rebuild the graph if you apply migrations. This isn't + usually a problem as generally migration stuff runs in a one-shot process. + """ + # Load disk data + self.load_disk() + # Load database data + if self.connection is None: + self.applied_migrations = set() + else: + recorder = MigrationRecorder(self.connection) + self.applied_migrations = recorder.applied_migrations() + # To start, populate the migration graph with nodes for ALL migrations + # and their dependencies. Also make note of replacing migrations at this step. + self.graph = MigrationGraph() + self.replacements = {} + for key, migration in self.disk_migrations.items(): + self.graph.add_node(key, migration) + # Internal (aka same-app) dependencies. + self.add_internal_dependencies(key, migration) + # Replacing migrations. + if migration.replaces: + self.replacements[key] = migration + # Add external dependencies now that the internal ones have been resolved. + for key, migration in self.disk_migrations.items(): + self.add_external_dependencies(key, migration) + # Carry out replacements where possible. + for key, migration in self.replacements.items(): + # Get applied status of each of this migration's replacement targets. + applied_statuses = [(target in self.applied_migrations) for target in migration.replaces] + # Ensure the replacing migration is only marked as applied if all of + # its replacement targets are. + if all(applied_statuses): + self.applied_migrations.add(key) + else: + self.applied_migrations.discard(key) + # A replacing migration can be used if either all or none of its + # replacement targets have been applied. + if all(applied_statuses) or (not any(applied_statuses)): + self.graph.remove_replaced_nodes(key, migration.replaces) + else: + # This replacing migration cannot be used because it is partially applied. + # Remove it from the graph and remap dependencies to it (#25945). + self.graph.remove_replacement_node(key, migration.replaces) + # Ensure the graph is consistent. + try: + self.graph.validate_consistency() + except NodeNotFoundError as exc: + # Check if the missing node could have been replaced by any squash + # migration but wasn't because the squash migration was partially + # applied before. In that case raise a more understandable exception + # (#23556). + # Get reverse replacements. + reverse_replacements = {} + for key, migration in self.replacements.items(): + for replaced in migration.replaces: + reverse_replacements.setdefault(replaced, set()).add(key) + # Try to reraise exception with more detail. + if exc.node in reverse_replacements: + candidates = reverse_replacements.get(exc.node, set()) + is_replaced = any(candidate in self.graph.nodes for candidate in candidates) + if not is_replaced: + tries = ', '.join('%s.%s' % c for c in candidates) + raise NodeNotFoundError( + "Migration {0} depends on nonexistent node ('{1}', '{2}'). " + "Django tried to replace migration {1}.{2} with any of [{3}] " + "but wasn't able to because some of the replaced migrations " + "are already applied.".format( + exc.origin, exc.node[0], exc.node[1], tries + ), + exc.node + ) from exc + raise exc + + def check_consistent_history(self, connection): + """ + Raise InconsistentMigrationHistory if any applied migrations have + unapplied dependencies. + """ + recorder = MigrationRecorder(connection) + applied = recorder.applied_migrations() + for migration in applied: + # If the migration is unknown, skip it. + if migration not in self.graph.nodes: + continue + for parent in self.graph.node_map[migration].parents: + if parent not in applied: + # Skip unapplied squashed migrations that have all of their + # `replaces` applied. + if parent in self.replacements: + if all(m in applied for m in self.replacements[parent].replaces): + continue + raise InconsistentMigrationHistory( + "Migration {}.{} is applied before its dependency " + "{}.{} on database '{}'.".format( + migration[0], migration[1], parent[0], parent[1], + connection.alias, + ) + ) + + def detect_conflicts(self): + """ + Look through the loaded graph and detect any conflicts - apps + with more than one leaf migration. Return a dict of the app labels + that conflict with the migration names that conflict. + """ + seen_apps = {} + conflicting_apps = set() + for app_label, migration_name in self.graph.leaf_nodes(): + if app_label in seen_apps: + conflicting_apps.add(app_label) + seen_apps.setdefault(app_label, set()).add(migration_name) + return {app_label: seen_apps[app_label] for app_label in conflicting_apps} + + def project_state(self, nodes=None, at_end=True): + """ + Return a ProjectState object representing the most recent state + that the loaded migrations represent. + + See graph.make_state() for the meaning of "nodes" and "at_end". + """ + return self.graph.make_state(nodes=nodes, at_end=at_end, real_apps=list(self.unmigrated_apps)) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/migration.py b/env/lib/python3.5/site-packages/django/db/migrations/migration.py new file mode 100644 index 0000000..fe5e228 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/migration.py @@ -0,0 +1,193 @@ +from django.db.transaction import atomic + +from .exceptions import IrreversibleError + + +class Migration: + """ + The base class for all migrations. + + Migration files will import this from django.db.migrations.Migration + and subclass it as a class called Migration. It will have one or more + of the following attributes: + + - operations: A list of Operation instances, probably from django.db.migrations.operations + - dependencies: A list of tuples of (app_path, migration_name) + - run_before: A list of tuples of (app_path, migration_name) + - replaces: A list of migration_names + + Note that all migrations come out of migrations and into the Loader or + Graph as instances, having been initialized with their app label and name. + """ + + # Operations to apply during this migration, in order. + operations = [] + + # Other migrations that should be run before this migration. + # Should be a list of (app, migration_name). + dependencies = [] + + # Other migrations that should be run after this one (i.e. have + # this migration added to their dependencies). Useful to make third-party + # apps' migrations run after your AUTH_USER replacement, for example. + run_before = [] + + # Migration names in this app that this migration replaces. If this is + # non-empty, this migration will only be applied if all these migrations + # are not applied. + replaces = [] + + # Is this an initial migration? Initial migrations are skipped on + # --fake-initial if the table or fields already exist. If None, check if + # the migration has any dependencies to determine if there are dependencies + # to tell if db introspection needs to be done. If True, always perform + # introspection. If False, never perform introspection. + initial = None + + # Whether to wrap the whole migration in a transaction. Only has an effect + # on database backends which support transactional DDL. + atomic = True + + def __init__(self, name, app_label): + self.name = name + self.app_label = app_label + # Copy dependencies & other attrs as we might mutate them at runtime + self.operations = list(self.__class__.operations) + self.dependencies = list(self.__class__.dependencies) + self.run_before = list(self.__class__.run_before) + self.replaces = list(self.__class__.replaces) + + def __eq__(self, other): + return ( + isinstance(other, Migration) and + self.name == other.name and + self.app_label == other.app_label + ) + + def __repr__(self): + return "" % (self.app_label, self.name) + + def __str__(self): + return "%s.%s" % (self.app_label, self.name) + + def __hash__(self): + return hash("%s.%s" % (self.app_label, self.name)) + + def mutate_state(self, project_state, preserve=True): + """ + Take a ProjectState and return a new one with the migration's + operations applied to it. Preserve the original object state by + default and return a mutated state from a copy. + """ + new_state = project_state + if preserve: + new_state = project_state.clone() + + for operation in self.operations: + operation.state_forwards(self.app_label, new_state) + return new_state + + def apply(self, project_state, schema_editor, collect_sql=False): + """ + Take a project_state representing all migrations prior to this one + and a schema_editor for a live database and apply the migration + in a forwards order. + + Return the resulting project state for efficient reuse by following + Migrations. + """ + for operation in self.operations: + # If this operation cannot be represented as SQL, place a comment + # there instead + if collect_sql: + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + schema_editor.collected_sql.append( + "-- MIGRATION NOW PERFORMS OPERATION THAT CANNOT BE WRITTEN AS SQL:" + ) + schema_editor.collected_sql.append("-- %s" % operation.describe()) + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + continue + # Save the state before the operation has run + old_state = project_state.clone() + operation.state_forwards(self.app_label, project_state) + # Run the operation + atomic_operation = operation.atomic or (self.atomic and operation.atomic is not False) + if not schema_editor.atomic_migration and atomic_operation: + # Force a transaction on a non-transactional-DDL backend or an + # atomic operation inside a non-atomic migration. + with atomic(schema_editor.connection.alias): + operation.database_forwards(self.app_label, schema_editor, old_state, project_state) + else: + # Normal behaviour + operation.database_forwards(self.app_label, schema_editor, old_state, project_state) + return project_state + + def unapply(self, project_state, schema_editor, collect_sql=False): + """ + Take a project_state representing all migrations prior to this one + and a schema_editor for a live database and apply the migration + in a reverse order. + + The backwards migration process consists of two phases: + + 1. The intermediate states from right before the first until right + after the last operation inside this migration are preserved. + 2. The operations are applied in reverse order using the states + recorded in step 1. + """ + # Construct all the intermediate states we need for a reverse migration + to_run = [] + new_state = project_state + # Phase 1 + for operation in self.operations: + # If it's irreversible, error out + if not operation.reversible: + raise IrreversibleError("Operation %s in %s is not reversible" % (operation, self)) + # Preserve new state from previous run to not tamper the same state + # over all operations + new_state = new_state.clone() + old_state = new_state.clone() + operation.state_forwards(self.app_label, new_state) + to_run.insert(0, (operation, old_state, new_state)) + + # Phase 2 + for operation, to_state, from_state in to_run: + if collect_sql: + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + schema_editor.collected_sql.append( + "-- MIGRATION NOW PERFORMS OPERATION THAT CANNOT BE WRITTEN AS SQL:" + ) + schema_editor.collected_sql.append("-- %s" % operation.describe()) + schema_editor.collected_sql.append("--") + if not operation.reduces_to_sql: + continue + atomic_operation = operation.atomic or (self.atomic and operation.atomic is not False) + if not schema_editor.atomic_migration and atomic_operation: + # Force a transaction on a non-transactional-DDL backend or an + # atomic operation inside a non-atomic migration. + with atomic(schema_editor.connection.alias): + operation.database_backwards(self.app_label, schema_editor, from_state, to_state) + else: + # Normal behaviour + operation.database_backwards(self.app_label, schema_editor, from_state, to_state) + return project_state + + +class SwappableTuple(tuple): + """ + Subclass of tuple so Django can tell this was originally a swappable + dependency when it reads the migration file. + """ + + def __new__(cls, value, setting): + self = tuple.__new__(cls, value) + self.setting = setting + return self + + +def swappable_dependency(value): + """Turn a setting value into a dependency.""" + return SwappableTuple((value.split(".", 1)[0], "__first__"), value) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/__init__.py b/env/lib/python3.5/site-packages/django/db/migrations/operations/__init__.py new file mode 100644 index 0000000..894f2ab --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/operations/__init__.py @@ -0,0 +1,15 @@ +from .fields import AddField, AlterField, RemoveField, RenameField +from .models import ( + AddIndex, AlterIndexTogether, AlterModelManagers, AlterModelOptions, + AlterModelTable, AlterOrderWithRespectTo, AlterUniqueTogether, CreateModel, + DeleteModel, RemoveIndex, RenameModel, +) +from .special import RunPython, RunSQL, SeparateDatabaseAndState + +__all__ = [ + 'CreateModel', 'DeleteModel', 'AlterModelTable', 'AlterUniqueTogether', + 'RenameModel', 'AlterIndexTogether', 'AlterModelOptions', 'AddIndex', + 'RemoveIndex', 'AddField', 'RemoveField', 'AlterField', 'RenameField', + 'SeparateDatabaseAndState', 'RunSQL', 'RunPython', + 'AlterOrderWithRespectTo', 'AlterModelManagers', +] diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aec9e101032b4750c3bec7c191b13fbccb9266f9 GIT binary patch literal 868 zcmYk4&2G~`5Xb+{hx6flr%gF<;+8{+)EfvPDk>yUOCc#jS|M3ZXGvUkZDTu#J`(T1 z6YvOo<-{v+VrLC0mi_b0?9R;JU-IMFbAHLUspZM>ZSo@iMiXRqaZx0I49)t&7 zgQ!8*A?nZ#hz2~~QG;qi`w%{K3!(+xhG;`~AUe=ph%R&h5kU7KdeD7{KJ)-$06l~l zLXRLuRjoSI7{|iN%`bF-YB+`{L4_wB}gydHZkMvi_85QeFwPpTWxAwt3xjmb>K5ZMjVo<6Cp}_T1cC z$t=oksk5kz)=?o(6Izwl&-->h`GC=7^cW*Xi_u~Dj3L7w8{`c}ozY}W8GL^7F(Y8K zEnd%O#{bA8FRDD3;*vSf_?m}TRMlNG&Z;^(DXx;!bEna%V0og&gNq|ob#?t&iD`vl zq*NGwLw>~d7{6aFN}VmTI6GeNVnxTvP56jTK9vi)iIPpaf2|if-qh($ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9129d3e8ce07f4a5bb236758c17bc34d929ea939 GIT binary patch literal 5571 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/models.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/migrations/operations/__pycache__/models.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e97e3c5ec5d57f51de07626912ec5bcb88b3066c GIT binary patch literal 28642 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%0D{sQ$fg0tR0gyD0zf^Kp$A>GE~n39}!n>H2@3 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 XeY6wZa}(m)(Q}%5lgk&j1|j$ZDL0yG literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/base.py b/env/lib/python3.5/site-packages/django/db/migrations/operations/base.py new file mode 100644 index 0000000..b2fe1c4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/operations/base.py @@ -0,0 +1,141 @@ +from django.db import router +from django.db.models.fields.related import RECURSIVE_RELATIONSHIP_CONSTANT + + +class Operation: + """ + Base class for migration operations. + + It's responsible for both mutating the in-memory model state + (see db/migrations/state.py) to represent what it performs, as well + as actually performing it against a live database. + + Note that some operations won't modify memory state at all (e.g. data + copying operations), and some will need their modifications to be + optionally specified by the user (e.g. custom Python code snippets) + + Due to the way this class deals with deconstruction, it should be + considered immutable. + """ + + # If this migration can be run in reverse. + # Some operations are impossible to reverse, like deleting data. + reversible = True + + # Can this migration be represented as SQL? (things like RunPython cannot) + reduces_to_sql = True + + # Should this operation be forced as atomic even on backends with no + # DDL transaction support (i.e., does it have no DDL, like RunPython) + atomic = False + + # Should this operation be considered safe to elide and optimize across? + elidable = False + + serialization_expand_args = [] + + def __new__(cls, *args, **kwargs): + # We capture the arguments to make returning them trivial + self = object.__new__(cls) + self._constructor_args = (args, kwargs) + return self + + def deconstruct(self): + """ + Return a 3-tuple of class import path (or just name if it lives + under django.db.migrations), positional arguments, and keyword + arguments. + """ + return ( + self.__class__.__name__, + self._constructor_args[0], + self._constructor_args[1], + ) + + def state_forwards(self, app_label, state): + """ + Take the state from the previous migration, and mutate it + so that it matches what this migration would perform. + """ + raise NotImplementedError('subclasses of Operation must provide a state_forwards() method') + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + """ + Perform the mutation on the database schema in the normal + (forwards) direction. + """ + raise NotImplementedError('subclasses of Operation must provide a database_forwards() method') + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + """ + Perform the mutation on the database schema in the reverse + direction - e.g. if this were CreateModel, it would in fact + drop the model's table. + """ + raise NotImplementedError('subclasses of Operation must provide a database_backwards() method') + + def describe(self): + """ + Output a brief summary of what the action does. + """ + return "%s: %s" % (self.__class__.__name__, self._constructor_args) + + def references_model(self, name, app_label=None): + """ + Return True if there is a chance this operation references the given + model name (as a string), with an optional app label for accuracy. + + Used for optimization. If in doubt, return True; + returning a false positive will merely make the optimizer a little + less efficient, while returning a false negative may result in an + unusable optimized migration. + """ + return True + + def references_field(self, model_name, name, app_label=None): + """ + Return True if there is a chance this operation references the given + field name, with an optional app label for accuracy. + + Used for optimization. If in doubt, return True. + """ + return self.references_model(model_name, app_label) + + def allow_migrate_model(self, connection_alias, model): + """ + Return whether or not a model may be migrated. + + This is a thin wrapper around router.allow_migrate_model() that + preemptively rejects any proxy, swapped out, or unmanaged model. + """ + if not model._meta.can_migrate(connection_alias): + return False + + return router.allow_migrate_model(connection_alias, model) + + def reduce(self, operation, in_between, app_label=None): + """ + Return either a list of operations the actual operation should be + replaced with or a boolean that indicates whether or not the specified + operation can be optimized across. + """ + if self.elidable: + return [operation] + elif operation.elidable: + return [self] + return False + + def _get_model_tuple(self, remote_model, app_label, model_name): + if remote_model == RECURSIVE_RELATIONSHIP_CONSTANT: + return app_label, model_name.lower() + elif '.' in remote_model: + return tuple(remote_model.lower().split('.')) + else: + return app_label, remote_model.lower() + + def __repr__(self): + return "<%s %s%s>" % ( + self.__class__.__name__, + ", ".join(map(repr, self._constructor_args[0])), + ",".join(" %s=%r" % x for x in self._constructor_args[1].items()), + ) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/fields.py b/env/lib/python3.5/site-packages/django/db/migrations/operations/fields.py new file mode 100644 index 0000000..a41b344 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/operations/fields.py @@ -0,0 +1,369 @@ +from django.core.exceptions import FieldDoesNotExist +from django.db.models.fields import NOT_PROVIDED +from django.utils.functional import cached_property + +from .base import Operation +from .utils import is_referenced_by_foreign_key + + +class FieldOperation(Operation): + def __init__(self, model_name, name): + self.model_name = model_name + self.name = name + + @cached_property + def model_name_lower(self): + return self.model_name.lower() + + @cached_property + def name_lower(self): + return self.name.lower() + + def is_same_model_operation(self, operation): + return self.model_name_lower == operation.model_name_lower + + def is_same_field_operation(self, operation): + return self.is_same_model_operation(operation) and self.name_lower == operation.name_lower + + def references_model(self, name, app_label=None): + return name.lower() == self.model_name_lower + + def references_field(self, model_name, name, app_label=None): + return self.references_model(model_name) and name.lower() == self.name_lower + + def reduce(self, operation, in_between, app_label=None): + return ( + super().reduce(operation, in_between, app_label=app_label) or + not operation.references_field(self.model_name, self.name, app_label) + ) + + +class AddField(FieldOperation): + """Add a field to a model.""" + + def __init__(self, model_name, name, field, preserve_default=True): + self.field = field + self.preserve_default = preserve_default + super().__init__(model_name, name) + + def deconstruct(self): + kwargs = { + 'model_name': self.model_name, + 'name': self.name, + 'field': self.field, + } + if self.preserve_default is not True: + kwargs['preserve_default'] = self.preserve_default + return ( + self.__class__.__name__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + # If preserve default is off, don't use the default for future state + if not self.preserve_default: + field = self.field.clone() + field.default = NOT_PROVIDED + else: + field = self.field + state.models[app_label, self.model_name_lower].fields.append((self.name, field)) + # Delay rendering of relationships if it's not a relational field + delay = not field.is_relation + state.reload_model(app_label, self.model_name_lower, delay=delay) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + field = to_model._meta.get_field(self.name) + if not self.preserve_default: + field.default = self.field.default + schema_editor.add_field( + from_model, + field, + ) + if not self.preserve_default: + field.default = NOT_PROVIDED + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + from_model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, from_model): + schema_editor.remove_field(from_model, from_model._meta.get_field(self.name)) + + def describe(self): + return "Add field %s to %s" % (self.name, self.model_name) + + def reduce(self, operation, in_between, app_label=None): + if isinstance(operation, FieldOperation) and self.is_same_field_operation(operation): + if isinstance(operation, AlterField): + return [ + AddField( + model_name=self.model_name, + name=operation.name, + field=operation.field, + ), + ] + elif isinstance(operation, RemoveField): + return [] + elif isinstance(operation, RenameField): + return [ + AddField( + model_name=self.model_name, + name=operation.new_name, + field=self.field, + ), + ] + return super().reduce(operation, in_between, app_label=app_label) + + +class RemoveField(FieldOperation): + """Remove a field from a model.""" + + def deconstruct(self): + kwargs = { + 'model_name': self.model_name, + 'name': self.name, + } + return ( + self.__class__.__name__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + new_fields = [] + old_field = None + for name, instance in state.models[app_label, self.model_name_lower].fields: + if name != self.name: + new_fields.append((name, instance)) + else: + old_field = instance + state.models[app_label, self.model_name_lower].fields = new_fields + # Delay rendering of relationships if it's not a relational field + delay = not old_field.is_relation + state.reload_model(app_label, self.model_name_lower, delay=delay) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + from_model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, from_model): + schema_editor.remove_field(from_model, from_model._meta.get_field(self.name)) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + schema_editor.add_field(from_model, to_model._meta.get_field(self.name)) + + def describe(self): + return "Remove field %s from %s" % (self.name, self.model_name) + + +class AlterField(FieldOperation): + """ + Alter a field's database column (e.g. null, max_length) to the provided + new field. + """ + + def __init__(self, model_name, name, field, preserve_default=True): + self.field = field + self.preserve_default = preserve_default + super().__init__(model_name, name) + + def deconstruct(self): + kwargs = { + 'model_name': self.model_name, + 'name': self.name, + 'field': self.field, + } + if self.preserve_default is not True: + kwargs['preserve_default'] = self.preserve_default + return ( + self.__class__.__name__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + if not self.preserve_default: + field = self.field.clone() + field.default = NOT_PROVIDED + else: + field = self.field + state.models[app_label, self.model_name_lower].fields = [ + (n, field if n == self.name else f) + for n, f in + state.models[app_label, self.model_name_lower].fields + ] + # TODO: investigate if old relational fields must be reloaded or if it's + # sufficient if the new field is (#27737). + # Delay rendering of relationships if it's not a relational field and + # not referenced by a foreign key. + delay = ( + not field.is_relation and + not is_referenced_by_foreign_key(state, self.model_name_lower, self.field, self.name) + ) + state.reload_model(app_label, self.model_name_lower, delay=delay) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + from_field = from_model._meta.get_field(self.name) + to_field = to_model._meta.get_field(self.name) + if not self.preserve_default: + to_field.default = self.field.default + schema_editor.alter_field(from_model, from_field, to_field) + if not self.preserve_default: + to_field.default = NOT_PROVIDED + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self.database_forwards(app_label, schema_editor, from_state, to_state) + + def describe(self): + return "Alter field %s on %s" % (self.name, self.model_name) + + def reduce(self, operation, in_between, app_label=None): + if isinstance(operation, RemoveField) and self.is_same_field_operation(operation): + return [operation] + elif isinstance(operation, RenameField) and self.is_same_field_operation(operation): + return [ + operation, + AlterField( + model_name=self.model_name, + name=operation.new_name, + field=self.field, + ), + ] + return super().reduce(operation, in_between, app_label=app_label) + + +class RenameField(FieldOperation): + """Rename a field on the model. Might affect db_column too.""" + + def __init__(self, model_name, old_name, new_name): + self.old_name = old_name + self.new_name = new_name + super().__init__(model_name, old_name) + + @cached_property + def old_name_lower(self): + return self.old_name.lower() + + @cached_property + def new_name_lower(self): + return self.new_name.lower() + + def deconstruct(self): + kwargs = { + 'model_name': self.model_name, + 'old_name': self.old_name, + 'new_name': self.new_name, + } + return ( + self.__class__.__name__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.model_name_lower] + # Rename the field + fields = model_state.fields + found = False + delay = True + for index, (name, field) in enumerate(fields): + if not found and name == self.old_name: + fields[index] = (self.new_name, field) + found = True + # Fix from_fields to refer to the new field. + from_fields = getattr(field, 'from_fields', None) + if from_fields: + field.from_fields = tuple([ + self.new_name if from_field_name == self.old_name else from_field_name + for from_field_name in from_fields + ]) + # Delay rendering of relationships if it's not a relational + # field and not referenced by a foreign key. + delay = delay and ( + not field.is_relation and + not is_referenced_by_foreign_key(state, self.model_name_lower, field, self.name) + ) + if not found: + raise FieldDoesNotExist( + "%s.%s has no field named '%s'" % (app_label, self.model_name, self.old_name) + ) + # Fix index/unique_together to refer to the new field + options = model_state.options + for option in ('index_together', 'unique_together'): + if option in options: + options[option] = [ + [self.new_name if n == self.old_name else n for n in together] + for together in options[option] + ] + # Fix to_fields to refer to the new field. + model_tuple = app_label, self.model_name_lower + for (model_app_label, model_name), model_state in state.models.items(): + for index, (name, field) in enumerate(model_state.fields): + remote_field = field.remote_field + if remote_field: + remote_model_tuple = self._get_model_tuple( + remote_field.model, model_app_label, model_name + ) + if remote_model_tuple == model_tuple: + if getattr(remote_field, 'field_name', None) == self.old_name: + remote_field.field_name = self.new_name + to_fields = getattr(field, 'to_fields', None) + if to_fields: + field.to_fields = tuple([ + self.new_name if to_field_name == self.old_name else to_field_name + for to_field_name in to_fields + ]) + state.reload_model(app_label, self.model_name_lower, delay=delay) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + schema_editor.alter_field( + from_model, + from_model._meta.get_field(self.old_name), + to_model._meta.get_field(self.new_name), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.model_name) + schema_editor.alter_field( + from_model, + from_model._meta.get_field(self.new_name), + to_model._meta.get_field(self.old_name), + ) + + def describe(self): + return "Rename field %s on %s to %s" % (self.old_name, self.model_name, self.new_name) + + def references_field(self, model_name, name, app_label=None): + return self.references_model(model_name) and ( + name.lower() == self.old_name_lower or + name.lower() == self.new_name_lower + ) + + def reduce(self, operation, in_between, app_label=None): + if (isinstance(operation, RenameField) and + self.is_same_model_operation(operation) and + self.new_name_lower == operation.old_name_lower): + return [ + RenameField( + self.model_name, + self.old_name, + operation.new_name, + ), + ] + # Skip `FieldOperation.reduce` as we want to run `references_field` + # against self.new_name. + return ( + super(FieldOperation, self).reduce(operation, in_between, app_label=app_label) or + not operation.references_field(self.model_name, self.new_name, app_label) + ) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/models.py b/env/lib/python3.5/site-packages/django/db/migrations/operations/models.py new file mode 100644 index 0000000..97b9875 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/operations/models.py @@ -0,0 +1,825 @@ +from django.db import models +from django.db.migrations.operations.base import Operation +from django.db.migrations.state import ModelState +from django.db.models.options import normalize_together +from django.utils.functional import cached_property + +from .fields import ( + AddField, AlterField, FieldOperation, RemoveField, RenameField, +) + + +def _check_for_duplicates(arg_name, objs): + used_vals = set() + for val in objs: + if val in used_vals: + raise ValueError( + "Found duplicate value %s in CreateModel %s argument." % (val, arg_name) + ) + used_vals.add(val) + + +class ModelOperation(Operation): + def __init__(self, name): + self.name = name + + @cached_property + def name_lower(self): + return self.name.lower() + + def references_model(self, name, app_label=None): + return name.lower() == self.name_lower + + def reduce(self, operation, in_between, app_label=None): + return ( + super().reduce(operation, in_between, app_label=app_label) or + not operation.references_model(self.name, app_label) + ) + + +class CreateModel(ModelOperation): + """Create a model's table.""" + + serialization_expand_args = ['fields', 'options', 'managers'] + + def __init__(self, name, fields, options=None, bases=None, managers=None): + self.fields = fields + self.options = options or {} + self.bases = bases or (models.Model,) + self.managers = managers or [] + super().__init__(name) + # Sanity-check that there are no duplicated field names, bases, or + # manager names + _check_for_duplicates('fields', (name for name, _ in self.fields)) + _check_for_duplicates('bases', ( + base._meta.label_lower if hasattr(base, '_meta') else + base.lower() if isinstance(base, str) else base + for base in self.bases + )) + _check_for_duplicates('managers', (name for name, _ in self.managers)) + + def deconstruct(self): + kwargs = { + 'name': self.name, + 'fields': self.fields, + } + if self.options: + kwargs['options'] = self.options + if self.bases and self.bases != (models.Model,): + kwargs['bases'] = self.bases + if self.managers and self.managers != [('objects', models.Manager())]: + kwargs['managers'] = self.managers + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + state.add_model(ModelState( + app_label, + self.name, + list(self.fields), + dict(self.options), + tuple(self.bases), + list(self.managers), + )) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.create_model(model) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.delete_model(model) + + def describe(self): + return "Create %smodel %s" % ("proxy " if self.options.get("proxy", False) else "", self.name) + + def references_model(self, name, app_label=None): + name_lower = name.lower() + if name_lower == self.name_lower: + return True + + # Check we didn't inherit from the model + models_to_check = [ + base for base in self.bases + if base is not models.Model and isinstance(base, (models.base.ModelBase, str)) + ] + # Check we have no FKs/M2Ms with it + for fname, field in self.fields: + if field.remote_field: + models_to_check.append(field.remote_field.model) + # Now go over all the models and check against them + for model in models_to_check: + model_app_label, model_name = self.model_to_key(model) + if model_name.lower() == name_lower: + if app_label is None or not model_app_label or model_app_label == app_label: + return True + return False + + def model_to_key(self, model): + """ + Take either a model class or an "app_label.ModelName" string + and return (app_label, object_name). + """ + if isinstance(model, str): + return model.split(".", 1) + else: + return model._meta.app_label, model._meta.object_name + + def reduce(self, operation, in_between, app_label=None): + if (isinstance(operation, DeleteModel) and + self.name_lower == operation.name_lower and + not self.options.get("proxy", False)): + return [] + elif isinstance(operation, RenameModel) and self.name_lower == operation.old_name_lower: + return [ + CreateModel( + operation.new_name, + fields=self.fields, + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, AlterModelOptions) and self.name_lower == operation.name_lower: + return [ + CreateModel( + self.name, + fields=self.fields, + options={**self.options, **operation.options}, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, FieldOperation) and self.name_lower == operation.model_name_lower: + if isinstance(operation, AddField): + # Don't allow optimizations of FKs through models they reference + if hasattr(operation.field, "remote_field") and operation.field.remote_field: + for between in in_between: + # Check that it doesn't point to the model + app_label, object_name = self.model_to_key(operation.field.remote_field.model) + if between.references_model(object_name, app_label): + return False + # Check that it's not through the model + if getattr(operation.field.remote_field, "through", None): + app_label, object_name = self.model_to_key(operation.field.remote_field.through) + if between.references_model(object_name, app_label): + return False + return [ + CreateModel( + self.name, + fields=self.fields + [(operation.name, operation.field)], + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, AlterField): + return [ + CreateModel( + self.name, + fields=[ + (n, operation.field if n == operation.name else v) + for n, v in self.fields + ], + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, RemoveField): + return [ + CreateModel( + self.name, + fields=[ + (n, v) + for n, v in self.fields + if n.lower() != operation.name_lower + ], + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + elif isinstance(operation, RenameField): + return [ + CreateModel( + self.name, + fields=[ + (operation.new_name if n == operation.old_name else n, v) + for n, v in self.fields + ], + options=self.options, + bases=self.bases, + managers=self.managers, + ), + ] + return super().reduce(operation, in_between, app_label=app_label) + + +class DeleteModel(ModelOperation): + """Drop a model's table.""" + + def deconstruct(self): + kwargs = { + 'name': self.name, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + state.remove_model(app_label, self.name_lower) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.delete_model(model) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.create_model(model) + + def describe(self): + return "Delete model %s" % self.name + + +class RenameModel(ModelOperation): + """Rename a model.""" + + def __init__(self, old_name, new_name): + self.old_name = old_name + self.new_name = new_name + super().__init__(old_name) + + @cached_property + def old_name_lower(self): + return self.old_name.lower() + + @cached_property + def new_name_lower(self): + return self.new_name.lower() + + def deconstruct(self): + kwargs = { + 'old_name': self.old_name, + 'new_name': self.new_name, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + # Add a new model. + renamed_model = state.models[app_label, self.old_name_lower].clone() + renamed_model.name = self.new_name + state.models[app_label, self.new_name_lower] = renamed_model + # Repoint all fields pointing to the old model to the new one. + old_model_tuple = app_label, self.old_name_lower + new_remote_model = '%s.%s' % (app_label, self.new_name) + to_reload = [] + for (model_app_label, model_name), model_state in state.models.items(): + model_changed = False + for index, (name, field) in enumerate(model_state.fields): + changed_field = None + remote_field = field.remote_field + if remote_field: + remote_model_tuple = self._get_model_tuple( + remote_field.model, model_app_label, model_name + ) + if remote_model_tuple == old_model_tuple: + changed_field = field.clone() + changed_field.remote_field.model = new_remote_model + through_model = getattr(remote_field, 'through', None) + if through_model: + through_model_tuple = self._get_model_tuple( + through_model, model_app_label, model_name + ) + if through_model_tuple == old_model_tuple: + if changed_field is None: + changed_field = field.clone() + changed_field.remote_field.through = new_remote_model + if changed_field: + model_state.fields[index] = name, changed_field + model_changed = True + if model_changed: + to_reload.append((model_app_label, model_name)) + # Reload models related to old model before removing the old model. + state.reload_models(to_reload, delay=True) + # Remove the old model. + state.remove_model(app_label, self.old_name_lower) + state.reload_model(app_label, self.new_name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.new_name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.old_name) + # Move the main table + schema_editor.alter_db_table( + new_model, + old_model._meta.db_table, + new_model._meta.db_table, + ) + # Alter the fields pointing to us + for related_object in old_model._meta.related_objects: + if related_object.related_model == old_model: + model = new_model + related_key = (app_label, self.new_name_lower) + else: + model = related_object.related_model + related_key = ( + related_object.related_model._meta.app_label, + related_object.related_model._meta.model_name, + ) + to_field = to_state.apps.get_model( + *related_key + )._meta.get_field(related_object.field.name) + schema_editor.alter_field( + model, + related_object.field, + to_field, + ) + # Rename M2M fields whose name is based on this model's name. + fields = zip(old_model._meta.local_many_to_many, new_model._meta.local_many_to_many) + for (old_field, new_field) in fields: + # Skip self-referential fields as these are renamed above. + if new_field.model == new_field.related_model or not new_field.remote_field.through._meta.auto_created: + continue + # Rename the M2M table that's based on this model's name. + old_m2m_model = old_field.remote_field.through + new_m2m_model = new_field.remote_field.through + schema_editor.alter_db_table( + new_m2m_model, + old_m2m_model._meta.db_table, + new_m2m_model._meta.db_table, + ) + # Rename the column in the M2M table that's based on this + # model's name. + schema_editor.alter_field( + new_m2m_model, + old_m2m_model._meta.get_field(old_model._meta.model_name), + new_m2m_model._meta.get_field(new_model._meta.model_name), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self.new_name_lower, self.old_name_lower = self.old_name_lower, self.new_name_lower + self.new_name, self.old_name = self.old_name, self.new_name + + self.database_forwards(app_label, schema_editor, from_state, to_state) + + self.new_name_lower, self.old_name_lower = self.old_name_lower, self.new_name_lower + self.new_name, self.old_name = self.old_name, self.new_name + + def references_model(self, name, app_label=None): + return ( + name.lower() == self.old_name_lower or + name.lower() == self.new_name_lower + ) + + def describe(self): + return "Rename model %s to %s" % (self.old_name, self.new_name) + + def reduce(self, operation, in_between, app_label=None): + if (isinstance(operation, RenameModel) and + self.new_name_lower == operation.old_name_lower): + return [ + RenameModel( + self.old_name, + operation.new_name, + ), + ] + # Skip `ModelOperation.reduce` as we want to run `references_model` + # against self.new_name. + return ( + super(ModelOperation, self).reduce(operation, in_between, app_label=app_label) or + not operation.references_model(self.new_name, app_label) + ) + + +class AlterModelTable(ModelOperation): + """Rename a model's table.""" + + def __init__(self, name, table): + self.table = table + super().__init__(name) + + def deconstruct(self): + kwargs = { + 'name': self.name, + 'table': self.table, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + state.models[app_label, self.name_lower].options["db_table"] = self.table + state.reload_model(app_label, self.name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.name) + schema_editor.alter_db_table( + new_model, + old_model._meta.db_table, + new_model._meta.db_table, + ) + # Rename M2M fields whose name is based on this model's db_table + for (old_field, new_field) in zip(old_model._meta.local_many_to_many, new_model._meta.local_many_to_many): + if new_field.remote_field.through._meta.auto_created: + schema_editor.alter_db_table( + new_field.remote_field.through, + old_field.remote_field.through._meta.db_table, + new_field.remote_field.through._meta.db_table, + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + return self.database_forwards(app_label, schema_editor, from_state, to_state) + + def describe(self): + return "Rename table for %s to %s" % ( + self.name, + self.table if self.table is not None else "(default)" + ) + + def reduce(self, operation, in_between, app_label=None): + if isinstance(operation, (AlterModelTable, DeleteModel)) and self.name_lower == operation.name_lower: + return [operation] + return super().reduce(operation, in_between, app_label=app_label) + + +class ModelOptionOperation(ModelOperation): + def reduce(self, operation, in_between, app_label=None): + if isinstance(operation, (self.__class__, DeleteModel)) and self.name_lower == operation.name_lower: + return [operation] + return super().reduce(operation, in_between, app_label=app_label) + + +class FieldRelatedOptionOperation(ModelOptionOperation): + def reduce(self, operation, in_between, app_label=None): + if (isinstance(operation, FieldOperation) and + self.name_lower == operation.model_name_lower and + not self.references_field(operation.model_name, operation.name)): + return [operation, self] + return super().reduce(operation, in_between, app_label=app_label) + + +class AlterUniqueTogether(FieldRelatedOptionOperation): + """ + Change the value of unique_together to the target one. + Input value of unique_together must be a set of tuples. + """ + option_name = "unique_together" + + def __init__(self, name, unique_together): + unique_together = normalize_together(unique_together) + self.unique_together = {tuple(cons) for cons in unique_together} + super().__init__(name) + + def deconstruct(self): + kwargs = { + 'name': self.name, + 'unique_together': self.unique_together, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.name_lower] + model_state.options[self.option_name] = self.unique_together + state.reload_model(app_label, self.name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.name) + schema_editor.alter_unique_together( + new_model, + getattr(old_model._meta, self.option_name, set()), + getattr(new_model._meta, self.option_name, set()), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + return self.database_forwards(app_label, schema_editor, from_state, to_state) + + def references_field(self, model_name, name, app_label=None): + return ( + self.references_model(model_name, app_label) and + ( + not self.unique_together or + any((name in together) for together in self.unique_together) + ) + ) + + def describe(self): + return "Alter %s for %s (%s constraint(s))" % (self.option_name, self.name, len(self.unique_together or '')) + + +class AlterIndexTogether(FieldRelatedOptionOperation): + """ + Change the value of index_together to the target one. + Input value of index_together must be a set of tuples. + """ + option_name = "index_together" + + def __init__(self, name, index_together): + index_together = normalize_together(index_together) + self.index_together = {tuple(cons) for cons in index_together} + super().__init__(name) + + def deconstruct(self): + kwargs = { + 'name': self.name, + 'index_together': self.index_together, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.name_lower] + model_state.options[self.option_name] = self.index_together + state.reload_model(app_label, self.name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + new_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, new_model): + old_model = from_state.apps.get_model(app_label, self.name) + schema_editor.alter_index_together( + new_model, + getattr(old_model._meta, self.option_name, set()), + getattr(new_model._meta, self.option_name, set()), + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + return self.database_forwards(app_label, schema_editor, from_state, to_state) + + def references_field(self, model_name, name, app_label=None): + return ( + self.references_model(model_name, app_label) and + ( + not self.index_together or + any((name in together) for together in self.index_together) + ) + ) + + def describe(self): + return "Alter %s for %s (%s constraint(s))" % (self.option_name, self.name, len(self.index_together or '')) + + +class AlterOrderWithRespectTo(FieldRelatedOptionOperation): + """Represent a change with the order_with_respect_to option.""" + + def __init__(self, name, order_with_respect_to): + self.order_with_respect_to = order_with_respect_to + super().__init__(name) + + def deconstruct(self): + kwargs = { + 'name': self.name, + 'order_with_respect_to': self.order_with_respect_to, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.name_lower] + model_state.options['order_with_respect_to'] = self.order_with_respect_to + state.reload_model(app_label, self.name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + to_model = to_state.apps.get_model(app_label, self.name) + if self.allow_migrate_model(schema_editor.connection.alias, to_model): + from_model = from_state.apps.get_model(app_label, self.name) + # Remove a field if we need to + if from_model._meta.order_with_respect_to and not to_model._meta.order_with_respect_to: + schema_editor.remove_field(from_model, from_model._meta.get_field("_order")) + # Add a field if we need to (altering the column is untouched as + # it's likely a rename) + elif to_model._meta.order_with_respect_to and not from_model._meta.order_with_respect_to: + field = to_model._meta.get_field("_order") + if not field.has_default(): + field.default = 0 + schema_editor.add_field( + from_model, + field, + ) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + self.database_forwards(app_label, schema_editor, from_state, to_state) + + def references_field(self, model_name, name, app_label=None): + return ( + self.references_model(model_name, app_label) and + ( + self.order_with_respect_to is None or + name == self.order_with_respect_to + ) + ) + + def describe(self): + return "Set order_with_respect_to on %s to %s" % (self.name, self.order_with_respect_to) + + +class AlterModelOptions(ModelOptionOperation): + """ + Set new model options that don't directly affect the database schema + (like verbose_name, permissions, ordering). Python code in migrations + may still need them. + """ + + # Model options we want to compare and preserve in an AlterModelOptions op + ALTER_OPTION_KEYS = [ + "base_manager_name", + "default_manager_name", + "default_related_name", + "get_latest_by", + "managed", + "ordering", + "permissions", + "default_permissions", + "select_on_save", + "verbose_name", + "verbose_name_plural", + ] + + def __init__(self, name, options): + self.options = options + super().__init__(name) + + def deconstruct(self): + kwargs = { + 'name': self.name, + 'options': self.options, + } + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.name_lower] + model_state.options = {**model_state.options, **self.options} + for key in self.ALTER_OPTION_KEYS: + if key not in self.options: + model_state.options.pop(key, False) + state.reload_model(app_label, self.name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + pass + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + pass + + def describe(self): + return "Change Meta options on %s" % self.name + + +class AlterModelManagers(ModelOptionOperation): + """Alter the model's managers.""" + + serialization_expand_args = ['managers'] + + def __init__(self, name, managers): + self.managers = managers + super().__init__(name) + + def deconstruct(self): + return ( + self.__class__.__qualname__, + [self.name, self.managers], + {} + ) + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.name_lower] + model_state.managers = list(self.managers) + state.reload_model(app_label, self.name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + pass + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + pass + + def describe(self): + return "Change managers on %s" % self.name + + +class IndexOperation(Operation): + option_name = 'indexes' + + @cached_property + def model_name_lower(self): + return self.model_name.lower() + + +class AddIndex(IndexOperation): + """Add an index on a model.""" + + def __init__(self, model_name, index): + self.model_name = model_name + if not index.name: + raise ValueError( + "Indexes passed to AddIndex operations require a name " + "argument. %r doesn't have one." % index + ) + self.index = index + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.model_name_lower] + indexes = list(model_state.options[self.option_name]) + indexes.append(self.index.clone()) + model_state.options[self.option_name] = indexes + state.reload_model(app_label, self.model_name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.add_index(model, self.index) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + schema_editor.remove_index(model, self.index) + + def deconstruct(self): + kwargs = { + 'model_name': self.model_name, + 'index': self.index, + } + return ( + self.__class__.__qualname__, + [], + kwargs, + ) + + def describe(self): + return 'Create index %s on field(s) %s of model %s' % ( + self.index.name, + ', '.join(self.index.fields), + self.model_name, + ) + + +class RemoveIndex(IndexOperation): + """Remove an index from a model.""" + + def __init__(self, model_name, name): + self.model_name = model_name + self.name = name + + def state_forwards(self, app_label, state): + model_state = state.models[app_label, self.model_name_lower] + indexes = model_state.options[self.option_name] + model_state.options[self.option_name] = [idx for idx in indexes if idx.name != self.name] + state.reload_model(app_label, self.model_name_lower, delay=True) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + model = from_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + from_model_state = from_state.models[app_label, self.model_name_lower] + index = from_model_state.get_index_by_name(self.name) + schema_editor.remove_index(model, index) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + model = to_state.apps.get_model(app_label, self.model_name) + if self.allow_migrate_model(schema_editor.connection.alias, model): + to_model_state = to_state.models[app_label, self.model_name_lower] + index = to_model_state.get_index_by_name(self.name) + schema_editor.add_index(model, index) + + def deconstruct(self): + kwargs = { + 'model_name': self.model_name, + 'name': self.name, + } + return ( + self.__class__.__qualname__, + [], + kwargs, + ) + + def describe(self): + return 'Remove index %s from %s' % (self.name, self.model_name) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/special.py b/env/lib/python3.5/site-packages/django/db/migrations/operations/special.py new file mode 100644 index 0000000..5a8510e --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/operations/special.py @@ -0,0 +1,203 @@ +from django.db import router + +from .base import Operation + + +class SeparateDatabaseAndState(Operation): + """ + Take two lists of operations - ones that will be used for the database, + and ones that will be used for the state change. This allows operations + that don't support state change to have it applied, or have operations + that affect the state or not the database, or so on. + """ + + serialization_expand_args = ['database_operations', 'state_operations'] + + def __init__(self, database_operations=None, state_operations=None): + self.database_operations = database_operations or [] + self.state_operations = state_operations or [] + + def deconstruct(self): + kwargs = {} + if self.database_operations: + kwargs['database_operations'] = self.database_operations + if self.state_operations: + kwargs['state_operations'] = self.state_operations + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + def state_forwards(self, app_label, state): + for state_operation in self.state_operations: + state_operation.state_forwards(app_label, state) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + # We calculate state separately in here since our state functions aren't useful + for database_operation in self.database_operations: + to_state = from_state.clone() + database_operation.state_forwards(app_label, to_state) + database_operation.database_forwards(app_label, schema_editor, from_state, to_state) + from_state = to_state + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + # We calculate state separately in here since our state functions aren't useful + to_states = {} + for dbop in self.database_operations: + to_states[dbop] = to_state + to_state = to_state.clone() + dbop.state_forwards(app_label, to_state) + # to_state now has the states of all the database_operations applied + # which is the from_state for the backwards migration of the last + # operation. + for database_operation in reversed(self.database_operations): + from_state = to_state + to_state = to_states[database_operation] + database_operation.database_backwards(app_label, schema_editor, from_state, to_state) + + def describe(self): + return "Custom state/database change combination" + + +class RunSQL(Operation): + """ + Run some raw SQL. A reverse SQL statement may be provided. + + Also accept a list of operations that represent the state change effected + by this SQL change, in case it's custom column/table creation/deletion. + """ + noop = '' + + def __init__(self, sql, reverse_sql=None, state_operations=None, hints=None, elidable=False): + self.sql = sql + self.reverse_sql = reverse_sql + self.state_operations = state_operations or [] + self.hints = hints or {} + self.elidable = elidable + + def deconstruct(self): + kwargs = { + 'sql': self.sql, + } + if self.reverse_sql is not None: + kwargs['reverse_sql'] = self.reverse_sql + if self.state_operations: + kwargs['state_operations'] = self.state_operations + if self.hints: + kwargs['hints'] = self.hints + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + @property + def reversible(self): + return self.reverse_sql is not None + + def state_forwards(self, app_label, state): + for state_operation in self.state_operations: + state_operation.state_forwards(app_label, state) + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + if router.allow_migrate(schema_editor.connection.alias, app_label, **self.hints): + self._run_sql(schema_editor, self.sql) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if self.reverse_sql is None: + raise NotImplementedError("You cannot reverse this operation") + if router.allow_migrate(schema_editor.connection.alias, app_label, **self.hints): + self._run_sql(schema_editor, self.reverse_sql) + + def describe(self): + return "Raw SQL operation" + + def _run_sql(self, schema_editor, sqls): + if isinstance(sqls, (list, tuple)): + for sql in sqls: + params = None + if isinstance(sql, (list, tuple)): + elements = len(sql) + if elements == 2: + sql, params = sql + else: + raise ValueError("Expected a 2-tuple but got %d" % elements) + schema_editor.execute(sql, params=params) + elif sqls != RunSQL.noop: + statements = schema_editor.connection.ops.prepare_sql_script(sqls) + for statement in statements: + schema_editor.execute(statement, params=None) + + +class RunPython(Operation): + """ + Run Python code in a context suitable for doing versioned ORM operations. + """ + + reduces_to_sql = False + + def __init__(self, code, reverse_code=None, atomic=None, hints=None, elidable=False): + self.atomic = atomic + # Forwards code + if not callable(code): + raise ValueError("RunPython must be supplied with a callable") + self.code = code + # Reverse code + if reverse_code is None: + self.reverse_code = None + else: + if not callable(reverse_code): + raise ValueError("RunPython must be supplied with callable arguments") + self.reverse_code = reverse_code + self.hints = hints or {} + self.elidable = elidable + + def deconstruct(self): + kwargs = { + 'code': self.code, + } + if self.reverse_code is not None: + kwargs['reverse_code'] = self.reverse_code + if self.atomic is not None: + kwargs['atomic'] = self.atomic + if self.hints: + kwargs['hints'] = self.hints + return ( + self.__class__.__qualname__, + [], + kwargs + ) + + @property + def reversible(self): + return self.reverse_code is not None + + def state_forwards(self, app_label, state): + # RunPython objects have no state effect. To add some, combine this + # with SeparateDatabaseAndState. + pass + + def database_forwards(self, app_label, schema_editor, from_state, to_state): + # RunPython has access to all models. Ensure that all models are + # reloaded in case any are delayed. + from_state.clear_delayed_apps_cache() + if router.allow_migrate(schema_editor.connection.alias, app_label, **self.hints): + # We now execute the Python code in a context that contains a 'models' + # object, representing the versioned models as an app registry. + # We could try to override the global cache, but then people will still + # use direct imports, so we go with a documentation approach instead. + self.code(from_state.apps, schema_editor) + + def database_backwards(self, app_label, schema_editor, from_state, to_state): + if self.reverse_code is None: + raise NotImplementedError("You cannot reverse this operation") + if router.allow_migrate(schema_editor.connection.alias, app_label, **self.hints): + self.reverse_code(from_state.apps, schema_editor) + + def describe(self): + return "Raw Python operation" + + @staticmethod + def noop(apps, schema_editor): + return None diff --git a/env/lib/python3.5/site-packages/django/db/migrations/operations/utils.py b/env/lib/python3.5/site-packages/django/db/migrations/operations/utils.py new file mode 100644 index 0000000..af23ea9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/operations/utils.py @@ -0,0 +1,9 @@ +def is_referenced_by_foreign_key(state, model_name_lower, field, field_name): + for state_app_label, state_model in state.models: + for _, f in state.models[state_app_label, state_model].fields: + if (f.related_model and + '%s.%s' % (state_app_label, model_name_lower) == f.related_model.lower() and + hasattr(f, 'to_fields')): + if (f.to_fields[0] is None and field.primary_key) or field_name in f.to_fields: + return True + return False diff --git a/env/lib/python3.5/site-packages/django/db/migrations/optimizer.py b/env/lib/python3.5/site-packages/django/db/migrations/optimizer.py new file mode 100644 index 0000000..d31ab89 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/optimizer.py @@ -0,0 +1,61 @@ +class MigrationOptimizer: + """ + Power the optimization process, where you provide a list of Operations + and you are returned a list of equal or shorter length - operations + are merged into one if possible. + + For example, a CreateModel and an AddField can be optimized into a + new CreateModel, and CreateModel and DeleteModel can be optimized into + nothing. + """ + + def optimize(self, operations, app_label=None): + """ + Main optimization entry point. Pass in a list of Operation instances, + get out a new list of Operation instances. + + Unfortunately, due to the scope of the optimization (two combinable + operations might be separated by several hundred others), this can't be + done as a peephole optimization with checks/output implemented on + the Operations themselves; instead, the optimizer looks at each + individual operation and scans forwards in the list to see if there + are any matches, stopping at boundaries - operations which can't + be optimized over (RunSQL, operations on the same field/model, etc.) + + The inner loop is run until the starting list is the same as the result + list, and then the result is returned. This means that operation + optimization must be stable and always return an equal or shorter list. + + The app_label argument is optional, but if you pass it you'll get more + efficient optimization. + """ + # Internal tracking variable for test assertions about # of loops + self._iterations = 0 + while True: + result = self.optimize_inner(operations, app_label) + self._iterations += 1 + if result == operations: + return result + operations = result + + def optimize_inner(self, operations, app_label=None): + """Inner optimization loop.""" + new_operations = [] + for i, operation in enumerate(operations): + # Compare it to each operation after it + for j, other in enumerate(operations[i + 1:]): + in_between = operations[i + 1:i + j + 1] + result = operation.reduce(other, in_between, app_label) + if isinstance(result, list): + # Optimize! Add result, then remaining others, then return + new_operations.extend(result) + new_operations.extend(in_between) + new_operations.extend(operations[i + j + 2:]) + return new_operations + if not result: + # We can't optimize across `other`. + new_operations.append(operation) + break + else: + new_operations.append(operation) + return new_operations diff --git a/env/lib/python3.5/site-packages/django/db/migrations/questioner.py b/env/lib/python3.5/site-packages/django/db/migrations/questioner.py new file mode 100644 index 0000000..7af35c8 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/questioner.py @@ -0,0 +1,238 @@ +import importlib +import os +import sys + +from django.apps import apps +from django.db.models.fields import NOT_PROVIDED +from django.utils import datetime_safe, timezone + +from .loader import MigrationLoader + + +class MigrationQuestioner: + """ + Give the autodetector responses to questions it might have. + This base class has a built-in noninteractive mode, but the + interactive subclass is what the command-line arguments will use. + """ + + def __init__(self, defaults=None, specified_apps=None, dry_run=None): + self.defaults = defaults or {} + self.specified_apps = specified_apps or set() + self.dry_run = dry_run + + def ask_initial(self, app_label): + """Should we create an initial migration for the app?""" + # If it was specified on the command line, definitely true + if app_label in self.specified_apps: + return True + # Otherwise, we look to see if it has a migrations module + # without any Python files in it, apart from __init__.py. + # Apps from the new app template will have these; the Python + # file check will ensure we skip South ones. + try: + app_config = apps.get_app_config(app_label) + except LookupError: # It's a fake app. + return self.defaults.get("ask_initial", False) + migrations_import_path, _ = MigrationLoader.migrations_module(app_config.label) + if migrations_import_path is None: + # It's an application with migrations disabled. + return self.defaults.get("ask_initial", False) + try: + migrations_module = importlib.import_module(migrations_import_path) + except ImportError: + return self.defaults.get("ask_initial", False) + else: + # getattr() needed on PY36 and older (replace with attribute access). + if getattr(migrations_module, "__file__", None): + filenames = os.listdir(os.path.dirname(migrations_module.__file__)) + elif hasattr(migrations_module, "__path__"): + if len(migrations_module.__path__) > 1: + return False + filenames = os.listdir(list(migrations_module.__path__)[0]) + return not any(x.endswith(".py") for x in filenames if x != "__init__.py") + + def ask_not_null_addition(self, field_name, model_name): + """Adding a NOT NULL field to a model.""" + # None means quit + return None + + def ask_not_null_alteration(self, field_name, model_name): + """Changing a NULL field to NOT NULL.""" + # None means quit + return None + + def ask_rename(self, model_name, old_name, new_name, field_instance): + """Was this field really renamed?""" + return self.defaults.get("ask_rename", False) + + def ask_rename_model(self, old_model_state, new_model_state): + """Was this model really renamed?""" + return self.defaults.get("ask_rename_model", False) + + def ask_merge(self, app_label): + """Do you really want to merge these migrations?""" + return self.defaults.get("ask_merge", False) + + def ask_auto_now_add_addition(self, field_name, model_name): + """Adding an auto_now_add field to a model.""" + # None means quit + return None + + +class InteractiveMigrationQuestioner(MigrationQuestioner): + + def _boolean_input(self, question, default=None): + result = input("%s " % question) + if not result and default is not None: + return default + while not result or result[0].lower() not in "yn": + result = input("Please answer yes or no: ") + return result[0].lower() == "y" + + def _choice_input(self, question, choices): + print(question) + for i, choice in enumerate(choices): + print(" %s) %s" % (i + 1, choice)) + result = input("Select an option: ") + while True: + try: + value = int(result) + except ValueError: + pass + else: + if 0 < value <= len(choices): + return value + result = input("Please select a valid option: ") + + def _ask_default(self, default=''): + """ + Prompt for a default value. + + The ``default`` argument allows providing a custom default value (as a + string) which will be shown to the user and used as the return value + if the user doesn't provide any other input. + """ + print("Please enter the default value now, as valid Python") + if default: + print( + "You can accept the default '{}' by pressing 'Enter' or you " + "can provide another value.".format(default) + ) + print("The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now") + print("Type 'exit' to exit this prompt") + while True: + if default: + prompt = "[default: {}] >>> ".format(default) + else: + prompt = ">>> " + code = input(prompt) + if not code and default: + code = default + if not code: + print("Please enter some code, or 'exit' (with no quotes) to exit.") + elif code == "exit": + sys.exit(1) + else: + try: + return eval(code, {}, {"datetime": datetime_safe, "timezone": timezone}) + except (SyntaxError, NameError) as e: + print("Invalid input: %s" % e) + + def ask_not_null_addition(self, field_name, model_name): + """Adding a NOT NULL field to a model.""" + if not self.dry_run: + choice = self._choice_input( + "You are trying to add a non-nullable field '%s' to %s without a default; " + "we can't do that (the database needs something to populate existing rows).\n" + "Please select a fix:" % (field_name, model_name), + [ + ("Provide a one-off default now (will be set on all existing " + "rows with a null value for this column)"), + "Quit, and let me add a default in models.py", + ] + ) + if choice == 2: + sys.exit(3) + else: + return self._ask_default() + return None + + def ask_not_null_alteration(self, field_name, model_name): + """Changing a NULL field to NOT NULL.""" + if not self.dry_run: + choice = self._choice_input( + "You are trying to change the nullable field '%s' on %s to non-nullable " + "without a default; we can't do that (the database needs something to " + "populate existing rows).\n" + "Please select a fix:" % (field_name, model_name), + [ + ("Provide a one-off default now (will be set on all existing " + "rows with a null value for this column)"), + ("Ignore for now, and let me handle existing rows with NULL myself " + "(e.g. because you added a RunPython or RunSQL operation to handle " + "NULL values in a previous data migration)"), + "Quit, and let me add a default in models.py", + ] + ) + if choice == 2: + return NOT_PROVIDED + elif choice == 3: + sys.exit(3) + else: + return self._ask_default() + return None + + def ask_rename(self, model_name, old_name, new_name, field_instance): + """Was this field really renamed?""" + msg = "Did you rename %s.%s to %s.%s (a %s)? [y/N]" + return self._boolean_input(msg % (model_name, old_name, model_name, new_name, + field_instance.__class__.__name__), False) + + def ask_rename_model(self, old_model_state, new_model_state): + """Was this model really renamed?""" + msg = "Did you rename the %s.%s model to %s? [y/N]" + return self._boolean_input(msg % (old_model_state.app_label, old_model_state.name, + new_model_state.name), False) + + def ask_merge(self, app_label): + return self._boolean_input( + "\nMerging will only work if the operations printed above do not conflict\n" + + "with each other (working on different fields or models)\n" + + "Do you want to merge these migration branches? [y/N]", + False, + ) + + def ask_auto_now_add_addition(self, field_name, model_name): + """Adding an auto_now_add field to a model.""" + if not self.dry_run: + choice = self._choice_input( + "You are trying to add the field '{}' with 'auto_now_add=True' " + "to {} without a default; the database needs something to " + "populate existing rows.\n".format(field_name, model_name), + [ + "Provide a one-off default now (will be set on all " + "existing rows)", + "Quit, and let me add a default in models.py", + ] + ) + if choice == 2: + sys.exit(3) + else: + return self._ask_default(default='timezone.now') + return None + + +class NonInteractiveMigrationQuestioner(MigrationQuestioner): + + def ask_not_null_addition(self, field_name, model_name): + # We can't ask the user, so act like the user aborted. + sys.exit(3) + + def ask_not_null_alteration(self, field_name, model_name): + # We can't ask the user, so set as not provided. + return NOT_PROVIDED + + def ask_auto_now_add_addition(self, field_name, model_name): + # We can't ask the user, so act like the user aborted. + sys.exit(3) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/recorder.py b/env/lib/python3.5/site-packages/django/db/migrations/recorder.py new file mode 100644 index 0000000..3a972fe --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/recorder.py @@ -0,0 +1,80 @@ +from django.apps.registry import Apps +from django.db import models +from django.db.utils import DatabaseError +from django.utils.timezone import now + +from .exceptions import MigrationSchemaMissing + + +class MigrationRecorder: + """ + Deal with storing migration records in the database. + + Because this table is actually itself used for dealing with model + creation, it's the one thing we can't do normally via migrations. + We manually handle table creation/schema updating (using schema backend) + and then have a floating model to do queries with. + + If a migration is unapplied its row is removed from the table. Having + a row in the table always means a migration is applied. + """ + + class Migration(models.Model): + app = models.CharField(max_length=255) + name = models.CharField(max_length=255) + applied = models.DateTimeField(default=now) + + class Meta: + apps = Apps() + app_label = "migrations" + db_table = "django_migrations" + + def __str__(self): + return "Migration %s for %s" % (self.name, self.app) + + def __init__(self, connection): + self.connection = connection + + @property + def migration_qs(self): + return self.Migration.objects.using(self.connection.alias) + + def has_table(self): + """Return True if the django_migrations table exists.""" + return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()) + + def ensure_schema(self): + """Ensure the table exists and has the correct schema.""" + # If the table's there, that's fine - we've never changed its schema + # in the codebase. + if self.has_table(): + return + # Make the table + try: + with self.connection.schema_editor() as editor: + editor.create_model(self.Migration) + except DatabaseError as exc: + raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc) + + def applied_migrations(self): + """Return a set of (app, name) of applied migrations.""" + if self.has_table(): + return {tuple(x) for x in self.migration_qs.values_list('app', 'name')} + else: + # If the django_migrations table doesn't exist, then no migrations + # are applied. + return set() + + def record_applied(self, app, name): + """Record that a migration was applied.""" + self.ensure_schema() + self.migration_qs.create(app=app, name=name) + + def record_unapplied(self, app, name): + """Record that a migration was unapplied.""" + self.ensure_schema() + self.migration_qs.filter(app=app, name=name).delete() + + def flush(self): + """Delete all migration records. Useful for testing migrations.""" + self.migration_qs.all().delete() diff --git a/env/lib/python3.5/site-packages/django/db/migrations/serializer.py b/env/lib/python3.5/site-packages/django/db/migrations/serializer.py new file mode 100644 index 0000000..9b251e5 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/serializer.py @@ -0,0 +1,354 @@ +import builtins +import collections.abc +import datetime +import decimal +import enum +import functools +import math +import re +import types +import uuid + +from django.db import models +from django.db.migrations.operations.base import Operation +from django.db.migrations.utils import COMPILED_REGEX_TYPE, RegexObject +from django.utils import datetime_safe +from django.utils.functional import LazyObject, Promise +from django.utils.timezone import utc +from django.utils.version import get_docs_version + + +class BaseSerializer: + def __init__(self, value): + self.value = value + + def serialize(self): + raise NotImplementedError('Subclasses of BaseSerializer must implement the serialize() method.') + + +class BaseSequenceSerializer(BaseSerializer): + def _format(self): + raise NotImplementedError('Subclasses of BaseSequenceSerializer must implement the _format() method.') + + def serialize(self): + imports = set() + strings = [] + for item in self.value: + item_string, item_imports = serializer_factory(item).serialize() + imports.update(item_imports) + strings.append(item_string) + value = self._format() + return value % (", ".join(strings)), imports + + +class BaseSimpleSerializer(BaseSerializer): + def serialize(self): + return repr(self.value), set() + + +class DatetimeSerializer(BaseSerializer): + def serialize(self): + if self.value.tzinfo is not None and self.value.tzinfo != utc: + self.value = self.value.astimezone(utc) + value_repr = repr(self.value).replace("", "utc") + if isinstance(self.value, datetime_safe.datetime): + value_repr = "datetime.%s" % value_repr + imports = ["import datetime"] + if self.value.tzinfo is not None: + imports.append("from django.utils.timezone import utc") + return value_repr, set(imports) + + +class DateSerializer(BaseSerializer): + def serialize(self): + value_repr = repr(self.value) + if isinstance(self.value, datetime_safe.date): + value_repr = "datetime.%s" % value_repr + return value_repr, {"import datetime"} + + +class DecimalSerializer(BaseSerializer): + def serialize(self): + return repr(self.value), {"from decimal import Decimal"} + + +class DeconstructableSerializer(BaseSerializer): + @staticmethod + def serialize_deconstructed(path, args, kwargs): + name, imports = DeconstructableSerializer._serialize_path(path) + strings = [] + for arg in args: + arg_string, arg_imports = serializer_factory(arg).serialize() + strings.append(arg_string) + imports.update(arg_imports) + for kw, arg in sorted(kwargs.items()): + arg_string, arg_imports = serializer_factory(arg).serialize() + imports.update(arg_imports) + strings.append("%s=%s" % (kw, arg_string)) + return "%s(%s)" % (name, ", ".join(strings)), imports + + @staticmethod + def _serialize_path(path): + module, name = path.rsplit(".", 1) + if module == "django.db.models": + imports = {"from django.db import models"} + name = "models.%s" % name + else: + imports = {"import %s" % module} + name = path + return name, imports + + def serialize(self): + return self.serialize_deconstructed(*self.value.deconstruct()) + + +class DictionarySerializer(BaseSerializer): + def serialize(self): + imports = set() + strings = [] + for k, v in sorted(self.value.items()): + k_string, k_imports = serializer_factory(k).serialize() + v_string, v_imports = serializer_factory(v).serialize() + imports.update(k_imports) + imports.update(v_imports) + strings.append((k_string, v_string)) + return "{%s}" % (", ".join("%s: %s" % (k, v) for k, v in strings)), imports + + +class EnumSerializer(BaseSerializer): + def serialize(self): + enum_class = self.value.__class__ + module = enum_class.__module__ + v_string, v_imports = serializer_factory(self.value.value).serialize() + imports = {'import %s' % module, *v_imports} + return "%s.%s(%s)" % (module, enum_class.__name__, v_string), imports + + +class FloatSerializer(BaseSimpleSerializer): + def serialize(self): + if math.isnan(self.value) or math.isinf(self.value): + return 'float("{}")'.format(self.value), set() + return super().serialize() + + +class FrozensetSerializer(BaseSequenceSerializer): + def _format(self): + return "frozenset([%s])" + + +class FunctionTypeSerializer(BaseSerializer): + def serialize(self): + if getattr(self.value, "__self__", None) and isinstance(self.value.__self__, type): + klass = self.value.__self__ + module = klass.__module__ + return "%s.%s.%s" % (module, klass.__name__, self.value.__name__), {"import %s" % module} + # Further error checking + if self.value.__name__ == '': + raise ValueError("Cannot serialize function: lambda") + if self.value.__module__ is None: + raise ValueError("Cannot serialize function %r: No module" % self.value) + + module_name = self.value.__module__ + + if '<' not in self.value.__qualname__: # Qualname can include + return '%s.%s' % (module_name, self.value.__qualname__), {'import %s' % self.value.__module__} + + raise ValueError( + 'Could not find function %s in %s.\n' % (self.value.__name__, module_name) + ) + + +class FunctoolsPartialSerializer(BaseSerializer): + def serialize(self): + # Serialize functools.partial() arguments + func_string, func_imports = serializer_factory(self.value.func).serialize() + args_string, args_imports = serializer_factory(self.value.args).serialize() + keywords_string, keywords_imports = serializer_factory(self.value.keywords).serialize() + # Add any imports needed by arguments + imports = {'import functools', *func_imports, *args_imports, *keywords_imports} + return ( + 'functools.%s(%s, *%s, **%s)' % ( + self.value.__class__.__name__, + func_string, + args_string, + keywords_string, + ), + imports, + ) + + +class IterableSerializer(BaseSerializer): + def serialize(self): + imports = set() + strings = [] + for item in self.value: + item_string, item_imports = serializer_factory(item).serialize() + imports.update(item_imports) + strings.append(item_string) + # When len(strings)==0, the empty iterable should be serialized as + # "()", not "(,)" because (,) is invalid Python syntax. + value = "(%s)" if len(strings) != 1 else "(%s,)" + return value % (", ".join(strings)), imports + + +class ModelFieldSerializer(DeconstructableSerializer): + def serialize(self): + attr_name, path, args, kwargs = self.value.deconstruct() + return self.serialize_deconstructed(path, args, kwargs) + + +class ModelManagerSerializer(DeconstructableSerializer): + def serialize(self): + as_manager, manager_path, qs_path, args, kwargs = self.value.deconstruct() + if as_manager: + name, imports = self._serialize_path(qs_path) + return "%s.as_manager()" % name, imports + else: + return self.serialize_deconstructed(manager_path, args, kwargs) + + +class OperationSerializer(BaseSerializer): + def serialize(self): + from django.db.migrations.writer import OperationWriter + string, imports = OperationWriter(self.value, indentation=0).serialize() + # Nested operation, trailing comma is handled in upper OperationWriter._write() + return string.rstrip(','), imports + + +class RegexSerializer(BaseSerializer): + def serialize(self): + regex_pattern, pattern_imports = serializer_factory(self.value.pattern).serialize() + # Turn off default implicit flags (e.g. re.U) because regexes with the + # same implicit and explicit flags aren't equal. + flags = self.value.flags ^ re.compile('').flags + regex_flags, flag_imports = serializer_factory(flags).serialize() + imports = {'import re', *pattern_imports, *flag_imports} + args = [regex_pattern] + if flags: + args.append(regex_flags) + return "re.compile(%s)" % ', '.join(args), imports + + +class SequenceSerializer(BaseSequenceSerializer): + def _format(self): + return "[%s]" + + +class SetSerializer(BaseSequenceSerializer): + def _format(self): + # Serialize as a set literal except when value is empty because {} + # is an empty dict. + return '{%s}' if self.value else 'set(%s)' + + +class SettingsReferenceSerializer(BaseSerializer): + def serialize(self): + return "settings.%s" % self.value.setting_name, {"from django.conf import settings"} + + +class TimedeltaSerializer(BaseSerializer): + def serialize(self): + return repr(self.value), {"import datetime"} + + +class TimeSerializer(BaseSerializer): + def serialize(self): + value_repr = repr(self.value) + if isinstance(self.value, datetime_safe.time): + value_repr = "datetime.%s" % value_repr + return value_repr, {"import datetime"} + + +class TupleSerializer(BaseSequenceSerializer): + def _format(self): + # When len(value)==0, the empty tuple should be serialized as "()", + # not "(,)" because (,) is invalid Python syntax. + return "(%s)" if len(self.value) != 1 else "(%s,)" + + +class TypeSerializer(BaseSerializer): + def serialize(self): + special_cases = [ + (models.Model, "models.Model", []), + ] + for case, string, imports in special_cases: + if case is self.value: + return string, set(imports) + if hasattr(self.value, "__module__"): + module = self.value.__module__ + if module == builtins.__name__: + return self.value.__name__, set() + else: + return "%s.%s" % (module, self.value.__name__), {"import %s" % module} + + +class UUIDSerializer(BaseSerializer): + def serialize(self): + return "uuid.%s" % repr(self.value), {"import uuid"} + + +def serializer_factory(value): + from django.db.migrations.writer import SettingsReference + if isinstance(value, Promise): + value = str(value) + elif isinstance(value, LazyObject): + # The unwrapped value is returned as the first item of the arguments + # tuple. + value = value.__reduce__()[1][0] + + if isinstance(value, models.Field): + return ModelFieldSerializer(value) + if isinstance(value, models.manager.BaseManager): + return ModelManagerSerializer(value) + if isinstance(value, Operation): + return OperationSerializer(value) + if isinstance(value, type): + return TypeSerializer(value) + # Anything that knows how to deconstruct itself. + if hasattr(value, 'deconstruct'): + return DeconstructableSerializer(value) + + # Unfortunately some of these are order-dependent. + if isinstance(value, frozenset): + return FrozensetSerializer(value) + if isinstance(value, list): + return SequenceSerializer(value) + if isinstance(value, set): + return SetSerializer(value) + if isinstance(value, tuple): + return TupleSerializer(value) + if isinstance(value, dict): + return DictionarySerializer(value) + if isinstance(value, enum.Enum): + return EnumSerializer(value) + if isinstance(value, datetime.datetime): + return DatetimeSerializer(value) + if isinstance(value, datetime.date): + return DateSerializer(value) + if isinstance(value, datetime.time): + return TimeSerializer(value) + if isinstance(value, datetime.timedelta): + return TimedeltaSerializer(value) + if isinstance(value, SettingsReference): + return SettingsReferenceSerializer(value) + if isinstance(value, float): + return FloatSerializer(value) + if isinstance(value, (bool, int, type(None), bytes, str)): + return BaseSimpleSerializer(value) + if isinstance(value, decimal.Decimal): + return DecimalSerializer(value) + if isinstance(value, (functools.partial, functools.partialmethod)): + return FunctoolsPartialSerializer(value) + if isinstance(value, (types.FunctionType, types.BuiltinFunctionType, types.MethodType)): + return FunctionTypeSerializer(value) + if isinstance(value, collections.abc.Iterable): + return IterableSerializer(value) + if isinstance(value, (COMPILED_REGEX_TYPE, RegexObject)): + return RegexSerializer(value) + if isinstance(value, uuid.UUID): + return UUIDSerializer(value) + raise ValueError( + "Cannot serialize: %r\nThere are some values Django cannot serialize into " + "migration files.\nFor more, see https://docs.djangoproject.com/en/%s/" + "topics/migrations/#migration-serializing" % (value, get_docs_version()) + ) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/state.py b/env/lib/python3.5/site-packages/django/db/migrations/state.py new file mode 100644 index 0000000..f41d1ed --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/state.py @@ -0,0 +1,601 @@ +import copy +from collections import OrderedDict +from contextlib import contextmanager + +from django.apps import AppConfig +from django.apps.registry import Apps, apps as global_apps +from django.conf import settings +from django.db import models +from django.db.models.fields.proxy import OrderWrt +from django.db.models.fields.related import RECURSIVE_RELATIONSHIP_CONSTANT +from django.db.models.options import DEFAULT_NAMES, normalize_together +from django.db.models.utils import make_model_tuple +from django.utils.functional import cached_property +from django.utils.module_loading import import_string +from django.utils.version import get_docs_version + +from .exceptions import InvalidBasesError + + +def _get_app_label_and_model_name(model, app_label=''): + if isinstance(model, str): + split = model.split('.', 1) + return tuple(split) if len(split) == 2 else (app_label, split[0]) + else: + return model._meta.app_label, model._meta.model_name + + +def _get_related_models(m): + """Return all models that have a direct relationship to the given model.""" + related_models = [ + subclass for subclass in m.__subclasses__() + if issubclass(subclass, models.Model) + ] + related_fields_models = set() + for f in m._meta.get_fields(include_parents=True, include_hidden=True): + if f.is_relation and f.related_model is not None and not isinstance(f.related_model, str): + related_fields_models.add(f.model) + related_models.append(f.related_model) + # Reverse accessors of foreign keys to proxy models are attached to their + # concrete proxied model. + opts = m._meta + if opts.proxy and m in related_fields_models: + related_models.append(opts.concrete_model) + return related_models + + +def get_related_models_tuples(model): + """ + Return a list of typical (app_label, model_name) tuples for all related + models for the given model. + """ + return { + (rel_mod._meta.app_label, rel_mod._meta.model_name) + for rel_mod in _get_related_models(model) + } + + +def get_related_models_recursive(model): + """ + Return all models that have a direct or indirect relationship + to the given model. + + Relationships are either defined by explicit relational fields, like + ForeignKey, ManyToManyField or OneToOneField, or by inheriting from another + model (a superclass is related to its subclasses, but not vice versa). Note, + however, that a model inheriting from a concrete model is also related to + its superclass through the implicit *_ptr OneToOneField on the subclass. + """ + seen = set() + queue = _get_related_models(model) + for rel_mod in queue: + rel_app_label, rel_model_name = rel_mod._meta.app_label, rel_mod._meta.model_name + if (rel_app_label, rel_model_name) in seen: + continue + seen.add((rel_app_label, rel_model_name)) + queue.extend(_get_related_models(rel_mod)) + return seen - {(model._meta.app_label, model._meta.model_name)} + + +class ProjectState: + """ + Represent the entire project's overall state. This is the item that is + passed around - do it here rather than at the app level so that cross-app + FKs/etc. resolve properly. + """ + + def __init__(self, models=None, real_apps=None): + self.models = models or {} + # Apps to include from main registry, usually unmigrated ones + self.real_apps = real_apps or [] + self.is_delayed = False + + def add_model(self, model_state): + app_label, model_name = model_state.app_label, model_state.name_lower + self.models[(app_label, model_name)] = model_state + if 'apps' in self.__dict__: # hasattr would cache the property + self.reload_model(app_label, model_name) + + def remove_model(self, app_label, model_name): + del self.models[app_label, model_name] + if 'apps' in self.__dict__: # hasattr would cache the property + self.apps.unregister_model(app_label, model_name) + # Need to do this explicitly since unregister_model() doesn't clear + # the cache automatically (#24513) + self.apps.clear_cache() + + def _find_reload_model(self, app_label, model_name, delay=False): + if delay: + self.is_delayed = True + + related_models = set() + + try: + old_model = self.apps.get_model(app_label, model_name) + except LookupError: + pass + else: + # Get all relations to and from the old model before reloading, + # as _meta.apps may change + if delay: + related_models = get_related_models_tuples(old_model) + else: + related_models = get_related_models_recursive(old_model) + + # Get all outgoing references from the model to be rendered + model_state = self.models[(app_label, model_name)] + # Directly related models are the models pointed to by ForeignKeys, + # OneToOneFields, and ManyToManyFields. + direct_related_models = set() + for name, field in model_state.fields: + if field.is_relation: + if field.remote_field.model == RECURSIVE_RELATIONSHIP_CONSTANT: + continue + rel_app_label, rel_model_name = _get_app_label_and_model_name(field.related_model, app_label) + direct_related_models.add((rel_app_label, rel_model_name.lower())) + + # For all direct related models recursively get all related models. + related_models.update(direct_related_models) + for rel_app_label, rel_model_name in direct_related_models: + try: + rel_model = self.apps.get_model(rel_app_label, rel_model_name) + except LookupError: + pass + else: + if delay: + related_models.update(get_related_models_tuples(rel_model)) + else: + related_models.update(get_related_models_recursive(rel_model)) + + # Include the model itself + related_models.add((app_label, model_name)) + + return related_models + + def reload_model(self, app_label, model_name, delay=False): + if 'apps' in self.__dict__: # hasattr would cache the property + related_models = self._find_reload_model(app_label, model_name, delay) + self._reload(related_models) + + def reload_models(self, models, delay=True): + if 'apps' in self.__dict__: # hasattr would cache the property + related_models = set() + for app_label, model_name in models: + related_models.update(self._find_reload_model(app_label, model_name, delay)) + self._reload(related_models) + + def _reload(self, related_models): + # Unregister all related models + with self.apps.bulk_update(): + for rel_app_label, rel_model_name in related_models: + self.apps.unregister_model(rel_app_label, rel_model_name) + + states_to_be_rendered = [] + # Gather all models states of those models that will be rerendered. + # This includes: + # 1. All related models of unmigrated apps + for model_state in self.apps.real_models: + if (model_state.app_label, model_state.name_lower) in related_models: + states_to_be_rendered.append(model_state) + + # 2. All related models of migrated apps + for rel_app_label, rel_model_name in related_models: + try: + model_state = self.models[rel_app_label, rel_model_name] + except KeyError: + pass + else: + states_to_be_rendered.append(model_state) + + # Render all models + self.apps.render_multiple(states_to_be_rendered) + + def clone(self): + """Return an exact copy of this ProjectState.""" + new_state = ProjectState( + models={k: v.clone() for k, v in self.models.items()}, + real_apps=self.real_apps, + ) + if 'apps' in self.__dict__: + new_state.apps = self.apps.clone() + new_state.is_delayed = self.is_delayed + return new_state + + def clear_delayed_apps_cache(self): + if self.is_delayed and 'apps' in self.__dict__: + del self.__dict__['apps'] + + @cached_property + def apps(self): + return StateApps(self.real_apps, self.models) + + @property + def concrete_apps(self): + self.apps = StateApps(self.real_apps, self.models, ignore_swappable=True) + return self.apps + + @classmethod + def from_apps(cls, apps): + """Take an Apps and return a ProjectState matching it.""" + app_models = {} + for model in apps.get_models(include_swapped=True): + model_state = ModelState.from_model(model) + app_models[(model_state.app_label, model_state.name_lower)] = model_state + return cls(app_models) + + def __eq__(self, other): + return self.models == other.models and set(self.real_apps) == set(other.real_apps) + + +class AppConfigStub(AppConfig): + """Stub of an AppConfig. Only provides a label and a dict of models.""" + # Not used, but required by AppConfig.__init__ + path = '' + + def __init__(self, label): + self.label = label + # App-label and app-name are not the same thing, so technically passing + # in the label here is wrong. In practice, migrations don't care about + # the app name, but we need something unique, and the label works fine. + super().__init__(label, None) + + def import_models(self): + self.models = self.apps.all_models[self.label] + + +class StateApps(Apps): + """ + Subclass of the global Apps registry class to better handle dynamic model + additions and removals. + """ + def __init__(self, real_apps, models, ignore_swappable=False): + # Any apps in self.real_apps should have all their models included + # in the render. We don't use the original model instances as there + # are some variables that refer to the Apps object. + # FKs/M2Ms from real apps are also not included as they just + # mess things up with partial states (due to lack of dependencies) + self.real_models = [] + for app_label in real_apps: + app = global_apps.get_app_config(app_label) + for model in app.get_models(): + self.real_models.append(ModelState.from_model(model, exclude_rels=True)) + # Populate the app registry with a stub for each application. + app_labels = {model_state.app_label for model_state in models.values()} + app_configs = [AppConfigStub(label) for label in sorted(real_apps + list(app_labels))] + super().__init__(app_configs) + + # The lock gets in the way of copying as implemented in clone(), which + # is called whenever Django duplicates a StateApps before updating it. + self._lock = None + + self.render_multiple(list(models.values()) + self.real_models) + + # There shouldn't be any operations pending at this point. + from django.core.checks.model_checks import _check_lazy_references + ignore = {make_model_tuple(settings.AUTH_USER_MODEL)} if ignore_swappable else set() + errors = _check_lazy_references(self, ignore=ignore) + if errors: + raise ValueError("\n".join(error.msg for error in errors)) + + @contextmanager + def bulk_update(self): + # Avoid clearing each model's cache for each change. Instead, clear + # all caches when we're finished updating the model instances. + ready = self.ready + self.ready = False + try: + yield + finally: + self.ready = ready + self.clear_cache() + + def render_multiple(self, model_states): + # We keep trying to render the models in a loop, ignoring invalid + # base errors, until the size of the unrendered models doesn't + # decrease by at least one, meaning there's a base dependency loop/ + # missing base. + if not model_states: + return + # Prevent that all model caches are expired for each render. + with self.bulk_update(): + unrendered_models = model_states + while unrendered_models: + new_unrendered_models = [] + for model in unrendered_models: + try: + model.render(self) + except InvalidBasesError: + new_unrendered_models.append(model) + if len(new_unrendered_models) == len(unrendered_models): + raise InvalidBasesError( + "Cannot resolve bases for %r\nThis can happen if you are inheriting models from an " + "app with migrations (e.g. contrib.auth)\n in an app with no migrations; see " + "https://docs.djangoproject.com/en/%s/topics/migrations/#dependencies " + "for more" % (new_unrendered_models, get_docs_version()) + ) + unrendered_models = new_unrendered_models + + def clone(self): + """Return a clone of this registry.""" + clone = StateApps([], {}) + clone.all_models = copy.deepcopy(self.all_models) + clone.app_configs = copy.deepcopy(self.app_configs) + # Set the pointer to the correct app registry. + for app_config in clone.app_configs.values(): + app_config.apps = clone + # No need to actually clone them, they'll never change + clone.real_models = self.real_models + return clone + + def register_model(self, app_label, model): + self.all_models[app_label][model._meta.model_name] = model + if app_label not in self.app_configs: + self.app_configs[app_label] = AppConfigStub(app_label) + self.app_configs[app_label].apps = self + self.app_configs[app_label].models = OrderedDict() + self.app_configs[app_label].models[model._meta.model_name] = model + self.do_pending_operations(model) + self.clear_cache() + + def unregister_model(self, app_label, model_name): + try: + del self.all_models[app_label][model_name] + del self.app_configs[app_label].models[model_name] + except KeyError: + pass + + +class ModelState: + """ + Represent a Django Model. Don't use the actual Model class as it's not + designed to have its options changed - instead, mutate this one and then + render it into a Model as required. + + Note that while you are allowed to mutate .fields, you are not allowed + to mutate the Field instances inside there themselves - you must instead + assign new ones, as these are not detached during a clone. + """ + + def __init__(self, app_label, name, fields, options=None, bases=None, managers=None): + self.app_label = app_label + self.name = name + self.fields = fields + self.options = options or {} + self.options.setdefault('indexes', []) + self.bases = bases or (models.Model,) + self.managers = managers or [] + # Sanity-check that fields is NOT a dict. It must be ordered. + if isinstance(self.fields, dict): + raise ValueError("ModelState.fields cannot be a dict - it must be a list of 2-tuples.") + for name, field in fields: + # Sanity-check that fields are NOT already bound to a model. + if hasattr(field, 'model'): + raise ValueError( + 'ModelState.fields cannot be bound to a model - "%s" is.' % name + ) + # Sanity-check that relation fields are NOT referring to a model class. + if field.is_relation and hasattr(field.related_model, '_meta'): + raise ValueError( + 'ModelState.fields cannot refer to a model class - "%s.to" does. ' + 'Use a string reference instead.' % name + ) + if field.many_to_many and hasattr(field.remote_field.through, '_meta'): + raise ValueError( + 'ModelState.fields cannot refer to a model class - "%s.through" does. ' + 'Use a string reference instead.' % name + ) + # Sanity-check that indexes have their name set. + for index in self.options['indexes']: + if not index.name: + raise ValueError( + "Indexes passed to ModelState require a name attribute. " + "%r doesn't have one." % index + ) + + @cached_property + def name_lower(self): + return self.name.lower() + + @classmethod + def from_model(cls, model, exclude_rels=False): + """Given a model, return a ModelState representing it.""" + # Deconstruct the fields + fields = [] + for field in model._meta.local_fields: + if getattr(field, "remote_field", None) and exclude_rels: + continue + if isinstance(field, OrderWrt): + continue + name = field.name + try: + fields.append((name, field.clone())) + except TypeError as e: + raise TypeError("Couldn't reconstruct field %s on %s: %s" % ( + name, + model._meta.label, + e, + )) + if not exclude_rels: + for field in model._meta.local_many_to_many: + name = field.name + try: + fields.append((name, field.clone())) + except TypeError as e: + raise TypeError("Couldn't reconstruct m2m field %s on %s: %s" % ( + name, + model._meta.object_name, + e, + )) + # Extract the options + options = {} + for name in DEFAULT_NAMES: + # Ignore some special options + if name in ["apps", "app_label"]: + continue + elif name in model._meta.original_attrs: + if name == "unique_together": + ut = model._meta.original_attrs["unique_together"] + options[name] = set(normalize_together(ut)) + elif name == "index_together": + it = model._meta.original_attrs["index_together"] + options[name] = set(normalize_together(it)) + elif name == "indexes": + indexes = [idx.clone() for idx in model._meta.indexes] + for index in indexes: + if not index.name: + index.set_name_with_model(model) + options['indexes'] = indexes + else: + options[name] = model._meta.original_attrs[name] + # If we're ignoring relationships, remove all field-listing model + # options (that option basically just means "make a stub model") + if exclude_rels: + for key in ["unique_together", "index_together", "order_with_respect_to"]: + if key in options: + del options[key] + # Private fields are ignored, so remove options that refer to them. + elif options.get('order_with_respect_to') in {field.name for field in model._meta.private_fields}: + del options['order_with_respect_to'] + + def flatten_bases(model): + bases = [] + for base in model.__bases__: + if hasattr(base, "_meta") and base._meta.abstract: + bases.extend(flatten_bases(base)) + else: + bases.append(base) + return bases + + # We can't rely on __mro__ directly because we only want to flatten + # abstract models and not the whole tree. However by recursing on + # __bases__ we may end up with duplicates and ordering issues, we + # therefore discard any duplicates and reorder the bases according + # to their index in the MRO. + flattened_bases = sorted(set(flatten_bases(model)), key=lambda x: model.__mro__.index(x)) + + # Make our record + bases = tuple( + ( + base._meta.label_lower + if hasattr(base, "_meta") else + base + ) + for base in flattened_bases + ) + # Ensure at least one base inherits from models.Model + if not any((isinstance(base, str) or issubclass(base, models.Model)) for base in bases): + bases = (models.Model,) + + managers = [] + manager_names = set() + default_manager_shim = None + for manager in model._meta.managers: + if manager.name in manager_names: + # Skip overridden managers. + continue + elif manager.use_in_migrations: + # Copy managers usable in migrations. + new_manager = copy.copy(manager) + new_manager._set_creation_counter() + elif manager is model._base_manager or manager is model._default_manager: + # Shim custom managers used as default and base managers. + new_manager = models.Manager() + new_manager.model = manager.model + new_manager.name = manager.name + if manager is model._default_manager: + default_manager_shim = new_manager + else: + continue + manager_names.add(manager.name) + managers.append((manager.name, new_manager)) + + # Ignore a shimmed default manager called objects if it's the only one. + if managers == [('objects', default_manager_shim)]: + managers = [] + + # Construct the new ModelState + return cls( + model._meta.app_label, + model._meta.object_name, + fields, + options, + bases, + managers, + ) + + def construct_managers(self): + """Deep-clone the managers using deconstruction.""" + # Sort all managers by their creation counter + sorted_managers = sorted(self.managers, key=lambda v: v[1].creation_counter) + for mgr_name, manager in sorted_managers: + as_manager, manager_path, qs_path, args, kwargs = manager.deconstruct() + if as_manager: + qs_class = import_string(qs_path) + yield mgr_name, qs_class.as_manager() + else: + manager_class = import_string(manager_path) + yield mgr_name, manager_class(*args, **kwargs) + + def clone(self): + """Return an exact copy of this ModelState.""" + return self.__class__( + app_label=self.app_label, + name=self.name, + fields=list(self.fields), + # Since options are shallow-copied here, operations such as + # AddIndex must replace their option (e.g 'indexes') rather + # than mutating it. + options=dict(self.options), + bases=self.bases, + managers=list(self.managers), + ) + + def render(self, apps): + """Create a Model object from our current state into the given apps.""" + # First, make a Meta object + meta_contents = {'app_label': self.app_label, 'apps': apps, **self.options} + meta = type("Meta", (), meta_contents) + # Then, work out our bases + try: + bases = tuple( + (apps.get_model(base) if isinstance(base, str) else base) + for base in self.bases + ) + except LookupError: + raise InvalidBasesError("Cannot resolve one or more bases from %r" % (self.bases,)) + # Turn fields into a dict for the body, add other bits + body = {name: field.clone() for name, field in self.fields} + body['Meta'] = meta + body['__module__'] = "__fake__" + + # Restore managers + body.update(self.construct_managers()) + # Then, make a Model object (apps.register_model is called in __new__) + return type(self.name, bases, body) + + def get_field_by_name(self, name): + for fname, field in self.fields: + if fname == name: + return field + raise ValueError("No field called %s on model %s" % (name, self.name)) + + def get_index_by_name(self, name): + for index in self.options['indexes']: + if index.name == name: + return index + raise ValueError("No index named %s on model %s" % (name, self.name)) + + def __repr__(self): + return "<%s: '%s.%s'>" % (self.__class__.__name__, self.app_label, self.name) + + def __eq__(self, other): + return ( + (self.app_label == other.app_label) and + (self.name == other.name) and + (len(self.fields) == len(other.fields)) and + all((k1 == k2 and (f1.deconstruct()[1:] == f2.deconstruct()[1:])) + for (k1, f1), (k2, f2) in zip(self.fields, other.fields)) and + (self.options == other.options) and + (self.bases == other.bases) and + (self.managers == other.managers) + ) diff --git a/env/lib/python3.5/site-packages/django/db/migrations/topological_sort.py b/env/lib/python3.5/site-packages/django/db/migrations/topological_sort.py new file mode 100644 index 0000000..e0a22c9 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/topological_sort.py @@ -0,0 +1,32 @@ +def topological_sort_as_sets(dependency_graph): + """ + Variation of Kahn's algorithm (1962) that returns sets. + + Take a dependency graph as a dictionary of node => dependencies. + + Yield sets of items in topological order, where the first set contains + all nodes without dependencies, and each following set contains all + nodes that may depend on the nodes only in the previously yielded sets. + """ + todo = dependency_graph.copy() + while todo: + current = {node for node, deps in todo.items() if not deps} + + if not current: + raise ValueError('Cyclic dependency in graph: {}'.format( + ', '.join(repr(x) for x in todo.items()))) + + yield current + + # remove current from todo's nodes & dependencies + todo = {node: (dependencies - current) for node, dependencies in + todo.items() if node not in current} + + +def stable_topological_sort(l, dependency_graph): + result = [] + for layer in topological_sort_as_sets(dependency_graph): + for node in l: + if node in layer: + result.append(node) + return result diff --git a/env/lib/python3.5/site-packages/django/db/migrations/utils.py b/env/lib/python3.5/site-packages/django/db/migrations/utils.py new file mode 100644 index 0000000..8939794 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/utils.py @@ -0,0 +1,17 @@ +import datetime +import re + +COMPILED_REGEX_TYPE = type(re.compile('')) + + +class RegexObject: + def __init__(self, obj): + self.pattern = obj.pattern + self.flags = obj.flags + + def __eq__(self, other): + return self.pattern == other.pattern and self.flags == other.flags + + +def get_migration_name_timestamp(): + return datetime.datetime.now().strftime("%Y%m%d_%H%M") diff --git a/env/lib/python3.5/site-packages/django/db/migrations/writer.py b/env/lib/python3.5/site-packages/django/db/migrations/writer.py new file mode 100644 index 0000000..d056e00 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/migrations/writer.py @@ -0,0 +1,296 @@ +import os +import re +from importlib import import_module + +from django import get_version +from django.apps import apps +from django.db import migrations +from django.db.migrations.loader import MigrationLoader +from django.db.migrations.serializer import serializer_factory +from django.utils.inspect import get_func_args +from django.utils.module_loading import module_dir +from django.utils.timezone import now + + +class SettingsReference(str): + """ + Special subclass of string which actually references a current settings + value. It's treated as the value in memory, but serializes out to a + settings.NAME attribute reference. + """ + + def __new__(self, value, setting_name): + return str.__new__(self, value) + + def __init__(self, value, setting_name): + self.setting_name = setting_name + + +class OperationWriter: + def __init__(self, operation, indentation=2): + self.operation = operation + self.buff = [] + self.indentation = indentation + + def serialize(self): + + def _write(_arg_name, _arg_value): + if (_arg_name in self.operation.serialization_expand_args and + isinstance(_arg_value, (list, tuple, dict))): + if isinstance(_arg_value, dict): + self.feed('%s={' % _arg_name) + self.indent() + for key, value in _arg_value.items(): + key_string, key_imports = MigrationWriter.serialize(key) + arg_string, arg_imports = MigrationWriter.serialize(value) + args = arg_string.splitlines() + if len(args) > 1: + self.feed('%s: %s' % (key_string, args[0])) + for arg in args[1:-1]: + self.feed(arg) + self.feed('%s,' % args[-1]) + else: + self.feed('%s: %s,' % (key_string, arg_string)) + imports.update(key_imports) + imports.update(arg_imports) + self.unindent() + self.feed('},') + else: + self.feed('%s=[' % _arg_name) + self.indent() + for item in _arg_value: + arg_string, arg_imports = MigrationWriter.serialize(item) + args = arg_string.splitlines() + if len(args) > 1: + for arg in args[:-1]: + self.feed(arg) + self.feed('%s,' % args[-1]) + else: + self.feed('%s,' % arg_string) + imports.update(arg_imports) + self.unindent() + self.feed('],') + else: + arg_string, arg_imports = MigrationWriter.serialize(_arg_value) + args = arg_string.splitlines() + if len(args) > 1: + self.feed('%s=%s' % (_arg_name, args[0])) + for arg in args[1:-1]: + self.feed(arg) + self.feed('%s,' % args[-1]) + else: + self.feed('%s=%s,' % (_arg_name, arg_string)) + imports.update(arg_imports) + + imports = set() + name, args, kwargs = self.operation.deconstruct() + operation_args = get_func_args(self.operation.__init__) + + # See if this operation is in django.db.migrations. If it is, + # We can just use the fact we already have that imported, + # otherwise, we need to add an import for the operation class. + if getattr(migrations, name, None) == self.operation.__class__: + self.feed('migrations.%s(' % name) + else: + imports.add('import %s' % (self.operation.__class__.__module__)) + self.feed('%s.%s(' % (self.operation.__class__.__module__, name)) + + self.indent() + + for i, arg in enumerate(args): + arg_value = arg + arg_name = operation_args[i] + _write(arg_name, arg_value) + + i = len(args) + # Only iterate over remaining arguments + for arg_name in operation_args[i:]: + if arg_name in kwargs: # Don't sort to maintain signature order + arg_value = kwargs[arg_name] + _write(arg_name, arg_value) + + self.unindent() + self.feed('),') + return self.render(), imports + + def indent(self): + self.indentation += 1 + + def unindent(self): + self.indentation -= 1 + + def feed(self, line): + self.buff.append(' ' * (self.indentation * 4) + line) + + def render(self): + return '\n'.join(self.buff) + + +class MigrationWriter: + """ + Take a Migration instance and is able to produce the contents + of the migration file from it. + """ + + def __init__(self, migration): + self.migration = migration + self.needs_manual_porting = False + + def as_string(self): + """Return a string of the file contents.""" + items = { + "replaces_str": "", + "initial_str": "", + } + + imports = set() + + # Deconstruct operations + operations = [] + for operation in self.migration.operations: + operation_string, operation_imports = OperationWriter(operation).serialize() + imports.update(operation_imports) + operations.append(operation_string) + items["operations"] = "\n".join(operations) + "\n" if operations else "" + + # Format dependencies and write out swappable dependencies right + dependencies = [] + for dependency in self.migration.dependencies: + if dependency[0] == "__setting__": + dependencies.append(" migrations.swappable_dependency(settings.%s)," % dependency[1]) + imports.add("from django.conf import settings") + else: + dependencies.append(" %s," % self.serialize(dependency)[0]) + items["dependencies"] = "\n".join(dependencies) + "\n" if dependencies else "" + + # Format imports nicely, swapping imports of functions from migration files + # for comments + migration_imports = set() + for line in list(imports): + if re.match(r"^import (.*)\.\d+[^\s]*$", line): + migration_imports.add(line.split("import")[1].strip()) + imports.remove(line) + self.needs_manual_porting = True + + # django.db.migrations is always used, but models import may not be. + # If models import exists, merge it with migrations import. + if "from django.db import models" in imports: + imports.discard("from django.db import models") + imports.add("from django.db import migrations, models") + else: + imports.add("from django.db import migrations") + + # Sort imports by the package / module to be imported (the part after + # "from" in "from ... import ..." or after "import" in "import ..."). + sorted_imports = sorted(imports, key=lambda i: i.split()[1]) + items["imports"] = "\n".join(sorted_imports) + "\n" if imports else "" + if migration_imports: + items["imports"] += ( + "\n\n# Functions from the following migrations need manual " + "copying.\n# Move them and any dependencies into this file, " + "then update the\n# RunPython operations to refer to the local " + "versions:\n# %s" + ) % "\n# ".join(sorted(migration_imports)) + # If there's a replaces, make a string for it + if self.migration.replaces: + items['replaces_str'] = "\n replaces = %s\n" % self.serialize(self.migration.replaces)[0] + # Hinting that goes into comment + items.update( + version=get_version(), + timestamp=now().strftime("%Y-%m-%d %H:%M"), + ) + + if self.migration.initial: + items['initial_str'] = "\n initial = True\n" + + return MIGRATION_TEMPLATE % items + + @property + def basedir(self): + migrations_package_name, _ = MigrationLoader.migrations_module(self.migration.app_label) + + if migrations_package_name is None: + raise ValueError( + "Django can't create migrations for app '%s' because " + "migrations have been disabled via the MIGRATION_MODULES " + "setting." % self.migration.app_label + ) + + # See if we can import the migrations module directly + try: + migrations_module = import_module(migrations_package_name) + except ImportError: + pass + else: + try: + return module_dir(migrations_module) + except ValueError: + pass + + # Alright, see if it's a direct submodule of the app + app_config = apps.get_app_config(self.migration.app_label) + maybe_app_name, _, migrations_package_basename = migrations_package_name.rpartition(".") + if app_config.name == maybe_app_name: + return os.path.join(app_config.path, migrations_package_basename) + + # In case of using MIGRATION_MODULES setting and the custom package + # doesn't exist, create one, starting from an existing package + existing_dirs, missing_dirs = migrations_package_name.split("."), [] + while existing_dirs: + missing_dirs.insert(0, existing_dirs.pop(-1)) + try: + base_module = import_module(".".join(existing_dirs)) + except (ImportError, ValueError): + continue + else: + try: + base_dir = module_dir(base_module) + except ValueError: + continue + else: + break + else: + raise ValueError( + "Could not locate an appropriate location to create " + "migrations package %s. Make sure the toplevel " + "package exists and can be imported." % + migrations_package_name) + + final_dir = os.path.join(base_dir, *missing_dirs) + if not os.path.isdir(final_dir): + os.makedirs(final_dir) + for missing_dir in missing_dirs: + base_dir = os.path.join(base_dir, missing_dir) + with open(os.path.join(base_dir, "__init__.py"), "w"): + pass + + return final_dir + + @property + def filename(self): + return "%s.py" % self.migration.name + + @property + def path(self): + return os.path.join(self.basedir, self.filename) + + @classmethod + def serialize(cls, value): + return serializer_factory(value).serialize() + + +MIGRATION_TEMPLATE = """\ +# Generated by Django %(version)s on %(timestamp)s + +%(imports)s + +class Migration(migrations.Migration): +%(replaces_str)s%(initial_str)s + dependencies = [ +%(dependencies)s\ + ] + + operations = [ +%(operations)s\ + ] +""" diff --git a/env/lib/python3.5/site-packages/django/db/models/__init__.py b/env/lib/python3.5/site-packages/django/db/models/__init__.py new file mode 100644 index 0000000..27c67c7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/__init__.py @@ -0,0 +1,46 @@ +from django.core.exceptions import ObjectDoesNotExist +from django.db.models import signals +from django.db.models.aggregates import * # NOQA +from django.db.models.aggregates import __all__ as aggregates_all +from django.db.models.deletion import ( + CASCADE, DO_NOTHING, PROTECT, SET, SET_DEFAULT, SET_NULL, ProtectedError, +) +from django.db.models.expressions import ( + Case, Exists, Expression, ExpressionList, ExpressionWrapper, F, Func, + OuterRef, RowRange, Subquery, Value, ValueRange, When, Window, WindowFrame, +) +from django.db.models.fields import * # NOQA +from django.db.models.fields import __all__ as fields_all +from django.db.models.fields.files import FileField, ImageField +from django.db.models.fields.proxy import OrderWrt +from django.db.models.indexes import * # NOQA +from django.db.models.indexes import __all__ as indexes_all +from django.db.models.lookups import Lookup, Transform +from django.db.models.manager import Manager +from django.db.models.query import ( + Prefetch, Q, QuerySet, prefetch_related_objects, +) +from django.db.models.query_utils import FilteredRelation + +# Imports that would create circular imports if sorted +from django.db.models.base import DEFERRED, Model # isort:skip +from django.db.models.fields.related import ( # isort:skip + ForeignKey, ForeignObject, OneToOneField, ManyToManyField, + ManyToOneRel, ManyToManyRel, OneToOneRel, +) + + +__all__ = aggregates_all + fields_all + indexes_all +__all__ += [ + 'ObjectDoesNotExist', 'signals', + 'CASCADE', 'DO_NOTHING', 'PROTECT', 'SET', 'SET_DEFAULT', 'SET_NULL', + 'ProtectedError', + 'Case', 'Exists', 'Expression', 'ExpressionList', 'ExpressionWrapper', 'F', + 'Func', 'OuterRef', 'RowRange', 'Subquery', 'Value', 'ValueRange', 'When', + 'Window', 'WindowFrame', + 'FileField', 'ImageField', 'OrderWrt', 'Lookup', 'Transform', 'Manager', + 'Prefetch', 'Q', 'QuerySet', 'prefetch_related_objects', 'DEFERRED', 'Model', + 'FilteredRelation', + 'ForeignKey', 'ForeignObject', 'OneToOneField', 'ManyToManyField', + 'ManyToOneRel', 'ManyToManyRel', 'OneToOneRel', +] diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bbee978162bd05aaf3c7bfb605da4361827ceff GIT binary patch literal 2246 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 E7pc82=Kufz literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/base.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9057949ab186b724880228d45873e53b93af4396 GIT binary patch literal 47338 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/expressions.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/expressions.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69211e77f7d99d21aff25ad6512575e3a5335e6f GIT binary patch literal 54317 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/lookups.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/lookups.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba86f7307b68d994f805094f6761b681abb76a35 GIT binary patch literal 20563 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/manager.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/manager.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d950f25f75f4234e3eff031e413c0ea433c4e8aa GIT binary patch literal 6519 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/options.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/options.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea1453e47ae746a85fae363456b6f3cf40a39f70 GIT binary patch literal 24729 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 D4nQSi literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/query_utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/query_utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..473804876580bd29447d25ccb34aad243a0d25c9 GIT binary patch literal 12343 zcmd5?%X1t_Ue4;Ly4A8|X=IOV?`#e8uzS{O&&~qN46`#fwl!~gY`o}Qz*~s@hfaTvoj~)vu{`O<8_fc@^bV)l+m; zSMPaq%B!ho7_6rJdG!>XHk4Oa-aISY3uuAo1!=J$ADu$gDdjCn)uQriYIjk-Tf&Pa z<(-xnr={&_R4prSMXFY$3XjhzZ&i6`)HAGXMR{kH_dFZ4QNO0Vb8^3mFV8FQf_!;F zzC1%}Y&E|z{_pzdt`5RcWP5Jx+EJ`Wop_}E$R0($X9oj&f8^^!yAuw~yC592>h%q` z6NefN!clB@b=bGPU3ah(w!H0DKlJ=w)H2`2q3u2l1JCZed%iPCV zbYAbdddIijfp;a;b`+wK8?z;bbqDsgZ|1UnXoslO>8FwXD2N|${2f1z*>^CA!+Iys zoe?^;gZ?novF!!jZh)FN@S|4!=aiDorj^tOZr}If(Xi+9>Em0sKKkraXY1ytcq+x( z_mjC#-T1)=gKju}j|+6dVI0|UnErCcvC|Fwo)_7>VK6ZFcK;2KBG7&ZWC?n)4;nez z@3}GP*5TmUA0*Sr=o#Gj;24ArrAQ=Yk?biZjSmJ7-Cp3`CKJZ*-UamxU59Q&{(!vN zeRQd52hreSY=ePrH*11-;Gs~-G-_=&OUaz$aOsYd)E&n#0rw5Z*&n&R^i9=qys+aq zf2H(1W+%lj-nkO@hgXKdaD96e^t|=KuJfk%#$J5Ia6bRpzG4L6icHiQ#Q}t2c&IDr ziEE8YC>mD9l9~?bz`p{nA}$gsfPWjr<1#FX*^2G?6+3{fqqpB+%8=6npFT$Iv@>r;kc%jx@rm!%l#2q_d%`!DxtJ z)UvNn=@I0D(qo517c4S*Pc^k4LAm^O5D#K=+3rFY{R6iT4QWY#8=WH7%s>9}x{fPa zLji`wC<|muw?LLTBF-sSO1&V8lM)dIGF^)NUbkJ0_IpW1<`~Uzf-)Kmg4l5`aR5q& zvc{{^^lD`-Hjhk-!X%Tb;>HM$Ou^DCsAv}TbNET-I$?hp^n9JvLDm6u70Nj~hl(3H znBuqaK{kVxBQr4Xn^n!R^c;&Ci#m$-GWi9ViyU`nNBcYAiKg&tQfq1`Q7@6c(|GYB zu82J~N)@Y8XcRSTJGk;c4#vOePf&b~{K0ODr_ZX^OQIAWgDq84ot6ALylBRMLYRK+D*zIjV&K>|LwLeH| zllRs1b+eKbhv6_OM4bhHZ8(6~_s+<9v!&8Pd#=RjmBKj!8TAbz{Q9!)Q3p*3_Ui4l1>|Djiwr z>u5{y$hj*bf%T$>3s3oIsa+@)=m~lV8A^H`U+NYM&MT=H70BlIZNA9;46()ZO@aY@ zL)d`N@mfHU99psJ*0^B=*}UG|=!m^WDhEIoq^x~d(snHx_4{zL$9{VbM%9VjhkmIf1PS!_ zKDE+4@7S%>2AaX69qY5-o&5=yq6JQ29#asTA z)LLK>9tN+gxRy3Ue;9$E)TNwPdqt&xCU`5A<`Xt(DE)7=VC3tZdK(J>Z}HGAf`7Hm zaru>~^-46paB@&$eA4mK?AxEyeb7>T19x}z3n-flnqG)8@RTn2l(DPhh|xz<)&8*O zcKoE+^9TByY}jNWxK)<$!k|;t^Sdsh5QEwos1Ffh=vVo{MfO}a24hAS<~<)cW}>eS znnmnfSr?!V%aDZ2xXuEwmhoJpdMw;-O?}Z^Jjp>3MHFPxSJ7E}9wT@G{UEnzY>`0M zckoXCDvMudL5rfPT@!h2T82DgbvQ91T=YB&_%MJ{`BzvjH%>Q-_*Xe!720qe`5y)K zDz4~zC{FZgptJNsL~_?ds;cQCwX9F-$TPFy7&qXiU{UO3Fq(KL)fJSuaMKrKVbn`k*9yNOt6w+`72 z`%~8V+_AOi7JuR=AAyEH#&;MW=&(1Z^b#ksML00F8z$SphNvZU8n4;z4@5u3OQJRk z@TUrHI(jkz5z}A?R#90Nu_Nmd-I;Hox2DnC`P~{~-|>M^nqko$AFT8r`r`X_+|GkE zC^8(9^aCl+_#$Fj!VV1w4QqN~xHlRaE~LGUv}quHd4|)I2AfI61orUJ5Q-oSgBePS z2>3O*kgPbEL1)iF@PgLoQwt7gq9QsCs@$+jQ0?=@RjXm05v3omoy2PSF8A$d7O7eyXf*V*j0N8Sxd3MH z8N4lt;YJOZg!_`xw|MioEI52irOYc6(!snf2+dZrF#d;}P1i{kJLslrfz(K&GBms!A?`P?FE6oeerb%MSCtsFY}mL=icgk*;Omg$8C>Auk-@l^HG$*O4bmN632- zHc}Tcnhs!u5A8i3fFd`U5ooLtGJ2R8?w%?5lJ?Upaxz z$A$0YAk^UaC+JZIm>P5vb>6^R_;iz~vr$}J)~xN|%Ku8ZyNWCN8x+$B?TcdtU*VZ} zg+OT3ATLU*k5>$ntQ4?~+X&bOX6LXi8PhcOMACFB{Df#C0%iYM5Xzc{)W8l%910`A z%7v`*v|>zZDv?&DL0Cyv?)W=MKlu7%!GTYLgJ5t3jB_0!oDzvJQFo}5omg}7uo=E{a?Y&j;#9LdHG7PAANb^@pA=X zkgT=4+8sm)&iXHv1JUcv_6XA{V_tMG+98I;Fd>G@t>JU^M&ENvodu_Q-m3zP*&L*MuZf>*Z3g zw1WB`R!$dokc;mfzYl4&cY=oq0?q7AQbUG{Dwwh>fyZPmhd1iY#kFz9xz#4P-##pp$-gpY>$B9xt@FUfzxX%i`kvc&TS}>c!yX3x` zd#QraE=o6e#2}^;)*gLV_z3$AcZ}Uu)$W|yHHj@`rI2QWtw#zSZUC&gJA#ag$RV(0 zD0){j(Li)XsA6K42s_(|pR&DgK(gmY9UmKg%zXndVXUMJY^K2*GJDLvhn?WzNDl#} z5Yx}NLyTSXZDhj*#!YG>PbMMTgMCHMY}8!BW|!HsZ(-xQmv!iv{?RnL)NJNEjS>ju zVVT{5lrwoW)t!vhqOshgj3J%d4bcP64p29)>75a`E~B@M>b;gOdtK&fNPsnC`4a8; zUe*jDHgW+Sq*d&7+r`pCKxe~t`xyCYnV3e?hpEE92HbGH?5KcQVC2WNrm{{RD&RuX zh*we<5Cfs`WK?6B*Rus*&SmD2FI&PwCa#-vH;v8I@W{@GGd0y8fj{H10Il${T^MYZ4PMQxIrHt0&-uiyUlvLp#h)Bh|9X#^J#vBac>(L zZJ7p+86ZDyA|*y3h>}OWp1y-yIS-&e<=rNV_Pj~5nJictekf<&u1~m?)N(ep5rXAJ zW>!|_J_SP(i=8>T2q#sk|G;R`ub@ziHTbV9xGL83D9_+plBY#$)v6$7&||bZ;=mH4 zuH%YEC=MRb3j+%Akb(rfxIYWe|Hi#f=#pVO4Mr4ih!X|%8Z@nVh&_6aI4yU`Ga)U6Y#V`{~i zIuQg>;Ru|Ljp+WC-{DaJQOU^x8KzUx{vaG_f(D|)>^39^0%f3p*^lV5(O;RKkHnq0 zfx$uMN*^~4#nOVZo4g}VG8DNvj5d!uIZnhUmpB#Up z7~2$gF(!TlUvj5}TP{dio+Z=8p(?CG^T+E_OBLri@0akTV43LhGe8p8e{Gf%`HoL+rKoT@IXCb? zNXkM!P%FHdsue1sT+qR^1{6gNT;99}y8)}}_*_5F zf*mDgv9GghUc;+RuG!d|n)TvIf^SY2ZZ_*D?%s2w-E8lC#XE|j*_>zRQv>F9PUQPC zMSGr;4w{hbKPr-%m5+9IhA*>MKQ?`UKVj>`HGGXjUoilI z{|riiC4+YOg27<>E36w<+BU9 zw`Cgtw`pf%dISP7?}Io1aY*Oq7~TEhyA&YB{}{v(h$jxfF^H$+M(No5KL^D80h~>r z{Y8XKne8=PnSz%nPL}*qrpsE$GBs^eO4LPXMPBhT*=Q?7Dt!>r_5XLQKs z>#YU-6ABWDO(ZkH1R%4ReiVFSDM9#-L7D^j4Pb$uj>BIA;<(elV|6r=H6s7B>Cle8 zBb*(&+uLD`U$=;LJ9pq>bIwi7%d)=KD9c#ON=Ox(I-bk8;$n6g6-2+w)N!6{- zFu!M0|5RZgIWE6%Oi@>Q+E0$f1+VgYCgw9osGilGO%YAX!^sW{T~yleDwEd7$dj>< z3*MF{#h7(+h$*^RmqXo1#p!J2(^Y*NXjv|7w3Oz&7B-*_wy$I+iz}&Y)TP=+m)BG+ z?oKSBuF}$O(;uKFc-G&qPRz17X^Q5>ye&%cqPj>w7cVc(Nf*KW&-|nd| z+M$UMs{@)2X(H^{a)UH=^_!+HLFy6Nj&OR4Lp#hYVvpJF!FFit^Y6=%%95ydF@1u< z`!NOY#B>+1v#EFLfUKdb$GFQ5F{lmp@O|uCu+Ip!=w@2G>w@&TZ zewtR;R%vR7DHU8>k~~h+pIct8Exj}qb%r^ith#h4x}v+03TetZ2rgY4Mm2TiIEdJI z^gL3ewf*~=4_s~Tp)wh@TBaG#&awMnTVL_(By6!e@?@uN1UE9pH=-08c~laY!bUu! zey}|yvEsF~Ap)0W5;d2pmL?g}yMc*Y6uBLs$Gp~sxv`_7GT2JE7j;B<5;P^RPN$FT zV9{2Ysq0d^_Dqic)xxbQ&`69XdmH1rhix|rO$Lt^bKJrrl literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/__pycache__/utils.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/__pycache__/utils.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b17ee2e222f38657d6b14faeb9e5a68bc0cc00c4 GIT binary patch literal 909 zcmZuw&2AGh5FYPlOR}Xu5^7b!#fpT|NbN@IsUUIOXum))tEh6E z1g-#%(1_rm8xIM>el$?-qr5^fKT(~10}C((ummn6(2u-*K|sB|#iM{9dVCyv;!6U@ z5nSMmVH&|ShH(Qf0Y->m;70IFV7zc^+`HMbO_+voENT*gxdPjQuf&4~@6{$WZ0Zr@ znWUh903igC9J2tdV^(zis0e(>8+fMV{5qvL4%viLMvF4%l9n1xW3^Bxv>Z`;%IT=o z1#Ppc>Pt4@GJE44_gTT)l&PF*ZfmV53tYoeYi_Di<(^>kZ&Z7WwnGNx1H07LmE;-S z8)3R&Q(45*!jLv_W(aH9^i!K#LC}SD& zx+GNTV(g|%OeKYNi7dZxeU$VIZkcP{(YQ3^?fd4qSaRi-Ut%k?6{UKub*WwYj>(z_ zyW4O{a6ej{MTI=NiHFoJRNp}_B(( OK10S@^5=ogll=kEPV?0O literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/aggregates.py b/env/lib/python3.5/site-packages/django/db/models/aggregates.py new file mode 100644 index 0000000..8b67151 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/aggregates.py @@ -0,0 +1,185 @@ +""" +Classes to represent the definitions of aggregate functions. +""" +from django.core.exceptions import FieldError +from django.db.models.expressions import Case, Func, Star, When +from django.db.models.fields import DecimalField, FloatField, IntegerField + +__all__ = [ + 'Aggregate', 'Avg', 'Count', 'Max', 'Min', 'StdDev', 'Sum', 'Variance', +] + + +class Aggregate(Func): + contains_aggregate = True + name = None + filter_template = '%s FILTER (WHERE %%(filter)s)' + window_compatible = True + + def __init__(self, *args, filter=None, **kwargs): + self.filter = filter + super().__init__(*args, **kwargs) + + def get_source_fields(self): + # Don't return the filter expression since it's not a source field. + return [e._output_field_or_none for e in super().get_source_expressions()] + + def get_source_expressions(self): + source_expressions = super().get_source_expressions() + if self.filter: + source_expressions += [self.filter] + return source_expressions + + def set_source_expressions(self, exprs): + self.filter = self.filter and exprs.pop() + return super().set_source_expressions(exprs) + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + # Aggregates are not allowed in UPDATE queries, so ignore for_save + c = super().resolve_expression(query, allow_joins, reuse, summarize) + c.filter = c.filter and c.filter.resolve_expression(query, allow_joins, reuse, summarize) + if not summarize: + # Call Aggregate.get_source_expressions() to avoid + # returning self.filter and including that in this loop. + expressions = super(Aggregate, c).get_source_expressions() + for index, expr in enumerate(expressions): + if expr.contains_aggregate: + before_resolved = self.get_source_expressions()[index] + name = before_resolved.name if hasattr(before_resolved, 'name') else repr(before_resolved) + raise FieldError("Cannot compute %s('%s'): '%s' is an aggregate" % (c.name, name, name)) + return c + + @property + def default_alias(self): + expressions = self.get_source_expressions() + if len(expressions) == 1 and hasattr(expressions[0], 'name'): + return '%s__%s' % (expressions[0].name, self.name.lower()) + raise TypeError("Complex expressions require an alias") + + def get_group_by_cols(self): + return [] + + def as_sql(self, compiler, connection, **extra_context): + if self.filter: + if connection.features.supports_aggregate_filter_clause: + filter_sql, filter_params = self.filter.as_sql(compiler, connection) + template = self.filter_template % extra_context.get('template', self.template) + sql, params = super().as_sql(compiler, connection, template=template, filter=filter_sql) + return sql, params + filter_params + else: + copy = self.copy() + copy.filter = None + source_expressions = copy.get_source_expressions() + condition = When(self.filter, then=source_expressions[0]) + copy.set_source_expressions([Case(condition)] + source_expressions[1:]) + return super(Aggregate, copy).as_sql(compiler, connection, **extra_context) + return super().as_sql(compiler, connection, **extra_context) + + def _get_repr_options(self): + options = super()._get_repr_options() + if self.filter: + options.update({'filter': self.filter}) + return options + + +class Avg(Aggregate): + function = 'AVG' + name = 'Avg' + + def _resolve_output_field(self): + source_field = self.get_source_fields()[0] + if isinstance(source_field, (IntegerField, DecimalField)): + return FloatField() + return super()._resolve_output_field() + + def as_mysql(self, compiler, connection): + sql, params = super().as_sql(compiler, connection) + if self.output_field.get_internal_type() == 'DurationField': + sql = 'CAST(%s as SIGNED)' % sql + return sql, params + + def as_oracle(self, compiler, connection): + if self.output_field.get_internal_type() == 'DurationField': + expression = self.get_source_expressions()[0] + from django.db.backends.oracle.functions import IntervalToSeconds, SecondsToInterval + return compiler.compile( + SecondsToInterval(Avg(IntervalToSeconds(expression), filter=self.filter)) + ) + return super().as_sql(compiler, connection) + + +class Count(Aggregate): + function = 'COUNT' + name = 'Count' + template = '%(function)s(%(distinct)s%(expressions)s)' + output_field = IntegerField() + + def __init__(self, expression, distinct=False, filter=None, **extra): + if expression == '*': + expression = Star() + if isinstance(expression, Star) and filter is not None: + raise ValueError('Star cannot be used with filter. Please specify a field.') + super().__init__( + expression, distinct='DISTINCT ' if distinct else '', + filter=filter, **extra + ) + + def _get_repr_options(self): + return {**super()._get_repr_options(), 'distinct': self.extra['distinct'] != ''} + + def convert_value(self, value, expression, connection): + return 0 if value is None else value + + +class Max(Aggregate): + function = 'MAX' + name = 'Max' + + +class Min(Aggregate): + function = 'MIN' + name = 'Min' + + +class StdDev(Aggregate): + name = 'StdDev' + output_field = FloatField() + + def __init__(self, expression, sample=False, **extra): + self.function = 'STDDEV_SAMP' if sample else 'STDDEV_POP' + super().__init__(expression, **extra) + + def _get_repr_options(self): + return {**super()._get_repr_options(), 'sample': self.function == 'STDDEV_SAMP'} + + +class Sum(Aggregate): + function = 'SUM' + name = 'Sum' + + def as_mysql(self, compiler, connection): + sql, params = super().as_sql(compiler, connection) + if self.output_field.get_internal_type() == 'DurationField': + sql = 'CAST(%s as SIGNED)' % sql + return sql, params + + def as_oracle(self, compiler, connection): + if self.output_field.get_internal_type() == 'DurationField': + expression = self.get_source_expressions()[0] + from django.db.backends.oracle.functions import IntervalToSeconds, SecondsToInterval + return compiler.compile( + SecondsToInterval(Sum(IntervalToSeconds(expression))) + ) + return super().as_sql(compiler, connection) + + +class Variance(Aggregate): + name = 'Variance' + output_field = FloatField() + + def __init__(self, expression, sample=False, **extra): + self.function = 'VAR_SAMP' if sample else 'VAR_POP' + super().__init__(expression, **extra) + + def _get_repr_options(self): + return {**super()._get_repr_options(), 'sample': self.function == 'VAR_SAMP'} diff --git a/env/lib/python3.5/site-packages/django/db/models/base.py b/env/lib/python3.5/site-packages/django/db/models/base.py new file mode 100644 index 0000000..d11a479 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/base.py @@ -0,0 +1,1756 @@ +import copy +import inspect +import warnings +from functools import partialmethod +from itertools import chain + +from django.apps import apps +from django.conf import settings +from django.core import checks +from django.core.exceptions import ( + NON_FIELD_ERRORS, FieldDoesNotExist, FieldError, MultipleObjectsReturned, + ObjectDoesNotExist, ValidationError, +) +from django.db import ( + DEFAULT_DB_ALIAS, DJANGO_VERSION_PICKLE_KEY, DatabaseError, connection, + connections, router, transaction, +) +from django.db.models.constants import LOOKUP_SEP +from django.db.models.deletion import CASCADE, Collector +from django.db.models.fields.related import ( + ForeignObjectRel, OneToOneField, lazy_related_operation, resolve_relation, +) +from django.db.models.manager import Manager +from django.db.models.options import Options +from django.db.models.query import Q +from django.db.models.signals import ( + class_prepared, post_init, post_save, pre_init, pre_save, +) +from django.db.models.utils import make_model_tuple +from django.utils.encoding import force_text +from django.utils.text import capfirst, get_text_list +from django.utils.translation import gettext_lazy as _ +from django.utils.version import get_version + + +class Deferred: + def __repr__(self): + return '' + + def __str__(self): + return '' + + +DEFERRED = Deferred() + + +def subclass_exception(name, bases, module, attached_to): + """ + Create exception subclass. Used by ModelBase below. + + The exception is created in a way that allows it to be pickled, assuming + that the returned exception class will be added as an attribute to the + 'attached_to' class. + """ + return type(name, bases, { + '__module__': module, + '__qualname__': '%s.%s' % (attached_to.__qualname__, name), + }) + + +class ModelBase(type): + """Metaclass for all models.""" + def __new__(cls, name, bases, attrs, **kwargs): + super_new = super().__new__ + + # Also ensure initialization is only performed for subclasses of Model + # (excluding Model class itself). + parents = [b for b in bases if isinstance(b, ModelBase)] + if not parents: + return super_new(cls, name, bases, attrs) + + # Create the class. + module = attrs.pop('__module__') + new_attrs = {'__module__': module} + classcell = attrs.pop('__classcell__', None) + if classcell is not None: + new_attrs['__classcell__'] = classcell + new_class = super_new(cls, name, bases, new_attrs, **kwargs) + attr_meta = attrs.pop('Meta', None) + abstract = getattr(attr_meta, 'abstract', False) + meta = attr_meta or getattr(new_class, 'Meta', None) + base_meta = getattr(new_class, '_meta', None) + + app_label = None + + # Look for an application configuration to attach the model to. + app_config = apps.get_containing_app_config(module) + + if getattr(meta, 'app_label', None) is None: + if app_config is None: + if not abstract: + raise RuntimeError( + "Model class %s.%s doesn't declare an explicit " + "app_label and isn't in an application in " + "INSTALLED_APPS." % (module, name) + ) + + else: + app_label = app_config.label + + new_class.add_to_class('_meta', Options(meta, app_label)) + if not abstract: + new_class.add_to_class( + 'DoesNotExist', + subclass_exception( + 'DoesNotExist', + tuple( + x.DoesNotExist for x in parents if hasattr(x, '_meta') and not x._meta.abstract + ) or (ObjectDoesNotExist,), + module, + attached_to=new_class)) + new_class.add_to_class( + 'MultipleObjectsReturned', + subclass_exception( + 'MultipleObjectsReturned', + tuple( + x.MultipleObjectsReturned for x in parents if hasattr(x, '_meta') and not x._meta.abstract + ) or (MultipleObjectsReturned,), + module, + attached_to=new_class)) + if base_meta and not base_meta.abstract: + # Non-abstract child classes inherit some attributes from their + # non-abstract parent (unless an ABC comes before it in the + # method resolution order). + if not hasattr(meta, 'ordering'): + new_class._meta.ordering = base_meta.ordering + if not hasattr(meta, 'get_latest_by'): + new_class._meta.get_latest_by = base_meta.get_latest_by + + is_proxy = new_class._meta.proxy + + # If the model is a proxy, ensure that the base class + # hasn't been swapped out. + if is_proxy and base_meta and base_meta.swapped: + raise TypeError("%s cannot proxy the swapped model '%s'." % (name, base_meta.swapped)) + + # Add all attributes to the class. + for obj_name, obj in attrs.items(): + new_class.add_to_class(obj_name, obj) + + # All the fields of any type declared on this model + new_fields = chain( + new_class._meta.local_fields, + new_class._meta.local_many_to_many, + new_class._meta.private_fields + ) + field_names = {f.name for f in new_fields} + + # Basic setup for proxy models. + if is_proxy: + base = None + for parent in [kls for kls in parents if hasattr(kls, '_meta')]: + if parent._meta.abstract: + if parent._meta.fields: + raise TypeError( + "Abstract base class containing model fields not " + "permitted for proxy model '%s'." % name + ) + else: + continue + if base is None: + base = parent + elif parent._meta.concrete_model is not base._meta.concrete_model: + raise TypeError("Proxy model '%s' has more than one non-abstract model base class." % name) + if base is None: + raise TypeError("Proxy model '%s' has no non-abstract model base class." % name) + new_class._meta.setup_proxy(base) + new_class._meta.concrete_model = base._meta.concrete_model + else: + new_class._meta.concrete_model = new_class + + # Collect the parent links for multi-table inheritance. + parent_links = {} + for base in reversed([new_class] + parents): + # Conceptually equivalent to `if base is Model`. + if not hasattr(base, '_meta'): + continue + # Skip concrete parent classes. + if base != new_class and not base._meta.abstract: + continue + # Locate OneToOneField instances. + for field in base._meta.local_fields: + if isinstance(field, OneToOneField): + related = resolve_relation(new_class, field.remote_field.model) + parent_links[make_model_tuple(related)] = field + + # Track fields inherited from base models. + inherited_attributes = set() + # Do the appropriate setup for any model parents. + for base in new_class.mro(): + if base not in parents or not hasattr(base, '_meta'): + # Things without _meta aren't functional models, so they're + # uninteresting parents. + inherited_attributes.update(base.__dict__) + continue + + parent_fields = base._meta.local_fields + base._meta.local_many_to_many + if not base._meta.abstract: + # Check for clashes between locally declared fields and those + # on the base classes. + for field in parent_fields: + if field.name in field_names: + raise FieldError( + 'Local field %r in class %r clashes with field of ' + 'the same name from base class %r.' % ( + field.name, + name, + base.__name__, + ) + ) + else: + inherited_attributes.add(field.name) + + # Concrete classes... + base = base._meta.concrete_model + base_key = make_model_tuple(base) + if base_key in parent_links: + field = parent_links[base_key] + elif not is_proxy: + attr_name = '%s_ptr' % base._meta.model_name + field = OneToOneField( + base, + on_delete=CASCADE, + name=attr_name, + auto_created=True, + parent_link=True, + ) + + if attr_name in field_names: + raise FieldError( + "Auto-generated field '%s' in class %r for " + "parent_link to base class %r clashes with " + "declared field of the same name." % ( + attr_name, + name, + base.__name__, + ) + ) + + # Only add the ptr field if it's not already present; + # e.g. migrations will already have it specified + if not hasattr(new_class, attr_name): + new_class.add_to_class(attr_name, field) + else: + field = None + new_class._meta.parents[base] = field + else: + base_parents = base._meta.parents.copy() + + # Add fields from abstract base class if it wasn't overridden. + for field in parent_fields: + if (field.name not in field_names and + field.name not in new_class.__dict__ and + field.name not in inherited_attributes): + new_field = copy.deepcopy(field) + new_class.add_to_class(field.name, new_field) + # Replace parent links defined on this base by the new + # field. It will be appropriately resolved if required. + if field.one_to_one: + for parent, parent_link in base_parents.items(): + if field == parent_link: + base_parents[parent] = new_field + + # Pass any non-abstract parent classes onto child. + new_class._meta.parents.update(base_parents) + + # Inherit private fields (like GenericForeignKey) from the parent + # class + for field in base._meta.private_fields: + if field.name in field_names: + if not base._meta.abstract: + raise FieldError( + 'Local field %r in class %r clashes with field of ' + 'the same name from base class %r.' % ( + field.name, + name, + base.__name__, + ) + ) + else: + field = copy.deepcopy(field) + if not base._meta.abstract: + field.mti_inherited = True + new_class.add_to_class(field.name, field) + + # Copy indexes so that index names are unique when models extend an + # abstract model. + new_class._meta.indexes = [copy.deepcopy(idx) for idx in new_class._meta.indexes] + + if abstract: + # Abstract base models can't be instantiated and don't appear in + # the list of models for an app. We do the final setup for them a + # little differently from normal models. + attr_meta.abstract = False + new_class.Meta = attr_meta + return new_class + + new_class._prepare() + new_class._meta.apps.register_model(new_class._meta.app_label, new_class) + return new_class + + def add_to_class(cls, name, value): + # We should call the contribute_to_class method only if it's bound + if not inspect.isclass(value) and hasattr(value, 'contribute_to_class'): + value.contribute_to_class(cls, name) + else: + setattr(cls, name, value) + + def _prepare(cls): + """Create some methods once self._meta has been populated.""" + opts = cls._meta + opts._prepare(cls) + + if opts.order_with_respect_to: + cls.get_next_in_order = partialmethod(cls._get_next_or_previous_in_order, is_next=True) + cls.get_previous_in_order = partialmethod(cls._get_next_or_previous_in_order, is_next=False) + + # Defer creating accessors on the foreign class until it has been + # created and registered. If remote_field is None, we're ordering + # with respect to a GenericForeignKey and don't know what the + # foreign class is - we'll add those accessors later in + # contribute_to_class(). + if opts.order_with_respect_to.remote_field: + wrt = opts.order_with_respect_to + remote = wrt.remote_field.model + lazy_related_operation(make_foreign_order_accessors, cls, remote) + + # Give the class a docstring -- its definition. + if cls.__doc__ is None: + cls.__doc__ = "%s(%s)" % (cls.__name__, ", ".join(f.name for f in opts.fields)) + + get_absolute_url_override = settings.ABSOLUTE_URL_OVERRIDES.get(opts.label_lower) + if get_absolute_url_override: + setattr(cls, 'get_absolute_url', get_absolute_url_override) + + if not opts.managers: + if any(f.name == 'objects' for f in opts.fields): + raise ValueError( + "Model %s must specify a custom Manager, because it has a " + "field named 'objects'." % cls.__name__ + ) + manager = Manager() + manager.auto_created = True + cls.add_to_class('objects', manager) + + # Set the name of _meta.indexes. This can't be done in + # Options.contribute_to_class() because fields haven't been added to + # the model at that point. + for index in cls._meta.indexes: + if not index.name: + index.set_name_with_model(cls) + + class_prepared.send(sender=cls) + + @property + def _base_manager(cls): + return cls._meta.base_manager + + @property + def _default_manager(cls): + return cls._meta.default_manager + + +class ModelStateFieldsCacheDescriptor: + def __get__(self, instance, cls=None): + if instance is None: + return self + res = instance.fields_cache = {} + return res + + +class ModelState: + """Store model instance state.""" + db = None + # If true, uniqueness validation checks will consider this a new, unsaved + # object. Necessary for correct validation of new instances of objects with + # explicit (non-auto) PKs. This impacts validation only; it has no effect + # on the actual save. + adding = True + fields_cache = ModelStateFieldsCacheDescriptor() + + +class Model(metaclass=ModelBase): + + def __init__(self, *args, **kwargs): + # Alias some things as locals to avoid repeat global lookups + cls = self.__class__ + opts = self._meta + _setattr = setattr + _DEFERRED = DEFERRED + + pre_init.send(sender=cls, args=args, kwargs=kwargs) + + # Set up the storage for instance state + self._state = ModelState() + + # There is a rather weird disparity here; if kwargs, it's set, then args + # overrides it. It should be one or the other; don't duplicate the work + # The reason for the kwargs check is that standard iterator passes in by + # args, and instantiation for iteration is 33% faster. + if len(args) > len(opts.concrete_fields): + # Daft, but matches old exception sans the err msg. + raise IndexError("Number of args exceeds number of fields") + + if not kwargs: + fields_iter = iter(opts.concrete_fields) + # The ordering of the zip calls matter - zip throws StopIteration + # when an iter throws it. So if the first iter throws it, the second + # is *not* consumed. We rely on this, so don't change the order + # without changing the logic. + for val, field in zip(args, fields_iter): + if val is _DEFERRED: + continue + _setattr(self, field.attname, val) + else: + # Slower, kwargs-ready version. + fields_iter = iter(opts.fields) + for val, field in zip(args, fields_iter): + if val is _DEFERRED: + continue + _setattr(self, field.attname, val) + kwargs.pop(field.name, None) + + # Now we're left with the unprocessed fields that *must* come from + # keywords, or default. + + for field in fields_iter: + is_related_object = False + # Virtual field + if field.attname not in kwargs and field.column is None: + continue + if kwargs: + if isinstance(field.remote_field, ForeignObjectRel): + try: + # Assume object instance was passed in. + rel_obj = kwargs.pop(field.name) + is_related_object = True + except KeyError: + try: + # Object instance wasn't passed in -- must be an ID. + val = kwargs.pop(field.attname) + except KeyError: + val = field.get_default() + else: + # Object instance was passed in. Special case: You can + # pass in "None" for related objects if it's allowed. + if rel_obj is None and field.null: + val = None + else: + try: + val = kwargs.pop(field.attname) + except KeyError: + # This is done with an exception rather than the + # default argument on pop because we don't want + # get_default() to be evaluated, and then not used. + # Refs #12057. + val = field.get_default() + else: + val = field.get_default() + + if is_related_object: + # If we are passed a related instance, set it using the + # field.name instead of field.attname (e.g. "user" instead of + # "user_id") so that the object gets properly cached (and type + # checked) by the RelatedObjectDescriptor. + if rel_obj is not _DEFERRED: + _setattr(self, field.name, rel_obj) + else: + if val is not _DEFERRED: + _setattr(self, field.attname, val) + + if kwargs: + property_names = opts._property_names + for prop in tuple(kwargs): + try: + # Any remaining kwargs must correspond to properties or + # virtual fields. + if prop in property_names or opts.get_field(prop): + if kwargs[prop] is not _DEFERRED: + _setattr(self, prop, kwargs[prop]) + del kwargs[prop] + except (AttributeError, FieldDoesNotExist): + pass + for kwarg in kwargs: + raise TypeError("'%s' is an invalid keyword argument for this function" % kwarg) + super().__init__() + post_init.send(sender=cls, instance=self) + + @classmethod + def from_db(cls, db, field_names, values): + if len(values) != len(cls._meta.concrete_fields): + values_iter = iter(values) + values = [ + next(values_iter) if f.attname in field_names else DEFERRED + for f in cls._meta.concrete_fields + ] + new = cls(*values) + new._state.adding = False + new._state.db = db + return new + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self) + + def __str__(self): + return '%s object (%s)' % (self.__class__.__name__, self.pk) + + def __eq__(self, other): + if not isinstance(other, Model): + return False + if self._meta.concrete_model != other._meta.concrete_model: + return False + my_pk = self.pk + if my_pk is None: + return self is other + return my_pk == other.pk + + def __hash__(self): + if self.pk is None: + raise TypeError("Model instances without primary key value are unhashable") + return hash(self.pk) + + def __reduce__(self): + data = self.__getstate__() + data[DJANGO_VERSION_PICKLE_KEY] = get_version() + class_id = self._meta.app_label, self._meta.object_name + return model_unpickle, (class_id,), data + + def __getstate__(self): + """Hook to allow choosing the attributes to pickle.""" + return self.__dict__ + + def __setstate__(self, state): + msg = None + pickled_version = state.get(DJANGO_VERSION_PICKLE_KEY) + if pickled_version: + current_version = get_version() + if current_version != pickled_version: + msg = ( + "Pickled model instance's Django version %s does not match " + "the current version %s." % (pickled_version, current_version) + ) + else: + msg = "Pickled model instance's Django version is not specified." + + if msg: + warnings.warn(msg, RuntimeWarning, stacklevel=2) + + self.__dict__.update(state) + + def _get_pk_val(self, meta=None): + meta = meta or self._meta + return getattr(self, meta.pk.attname) + + def _set_pk_val(self, value): + return setattr(self, self._meta.pk.attname, value) + + pk = property(_get_pk_val, _set_pk_val) + + def get_deferred_fields(self): + """ + Return a set containing names of deferred fields for this instance. + """ + return { + f.attname for f in self._meta.concrete_fields + if f.attname not in self.__dict__ + } + + def refresh_from_db(self, using=None, fields=None): + """ + Reload field values from the database. + + By default, the reloading happens from the database this instance was + loaded from, or by the read router if this instance wasn't loaded from + any database. The using parameter will override the default. + + Fields can be used to specify which fields to reload. The fields + should be an iterable of field attnames. If fields is None, then + all non-deferred fields are reloaded. + + When accessing deferred fields of an instance, the deferred loading + of the field will call this method. + """ + if fields is not None: + if not fields: + return + if any(LOOKUP_SEP in f for f in fields): + raise ValueError( + 'Found "%s" in fields argument. Relations and transforms ' + 'are not allowed in fields.' % LOOKUP_SEP) + + hints = {'instance': self} + db_instance_qs = self.__class__._base_manager.db_manager(using, hints=hints).filter(pk=self.pk) + + # Use provided fields, if not set then reload all non-deferred fields. + deferred_fields = self.get_deferred_fields() + if fields is not None: + fields = list(fields) + db_instance_qs = db_instance_qs.only(*fields) + elif deferred_fields: + fields = [f.attname for f in self._meta.concrete_fields + if f.attname not in deferred_fields] + db_instance_qs = db_instance_qs.only(*fields) + + db_instance = db_instance_qs.get() + non_loaded_fields = db_instance.get_deferred_fields() + for field in self._meta.concrete_fields: + if field.attname in non_loaded_fields: + # This field wasn't refreshed - skip ahead. + continue + setattr(self, field.attname, getattr(db_instance, field.attname)) + # Clear cached foreign keys. + if field.is_relation and field.is_cached(self): + field.delete_cached_value(self) + + # Clear cached relations. + for field in self._meta.related_objects: + if field.is_cached(self): + field.delete_cached_value(self) + + self._state.db = db_instance._state.db + + def serializable_value(self, field_name): + """ + Return the value of the field name for this instance. If the field is + a foreign key, return the id value instead of the object. If there's + no Field object with this name on the model, return the model + attribute's value. + + Used to serialize a field's value (in the serializer, or form output, + for example). Normally, you would just access the attribute directly + and not use this method. + """ + try: + field = self._meta.get_field(field_name) + except FieldDoesNotExist: + return getattr(self, field_name) + return getattr(self, field.attname) + + def save(self, force_insert=False, force_update=False, using=None, + update_fields=None): + """ + Save the current instance. Override this in a subclass if you want to + control the saving process. + + The 'force_insert' and 'force_update' parameters can be used to insist + that the "save" must be an SQL insert or update (or equivalent for + non-SQL backends), respectively. Normally, they should not be set. + """ + # Ensure that a model instance without a PK hasn't been assigned to + # a ForeignKey or OneToOneField on this model. If the field is + # nullable, allowing the save() would result in silent data loss. + for field in self._meta.concrete_fields: + # If the related field isn't cached, then an instance hasn't + # been assigned and there's no need to worry about this check. + if field.is_relation and field.is_cached(self): + obj = getattr(self, field.name, None) + # A pk may have been assigned manually to a model instance not + # saved to the database (or auto-generated in a case like + # UUIDField), but we allow the save to proceed and rely on the + # database to raise an IntegrityError if applicable. If + # constraints aren't supported by the database, there's the + # unavoidable risk of data corruption. + if obj and obj.pk is None: + # Remove the object from a related instance cache. + if not field.remote_field.multiple: + field.remote_field.delete_cached_value(obj) + raise ValueError( + "save() prohibited to prevent data loss due to " + "unsaved related object '%s'." % field.name + ) + # If the relationship's pk/to_field was changed, clear the + # cached relationship. + if obj and getattr(obj, field.target_field.attname) != getattr(self, field.attname): + field.delete_cached_value(self) + + using = using or router.db_for_write(self.__class__, instance=self) + if force_insert and (force_update or update_fields): + raise ValueError("Cannot force both insert and updating in model saving.") + + deferred_fields = self.get_deferred_fields() + if update_fields is not None: + # If update_fields is empty, skip the save. We do also check for + # no-op saves later on for inheritance cases. This bailout is + # still needed for skipping signal sending. + if not update_fields: + return + + update_fields = frozenset(update_fields) + field_names = set() + + for field in self._meta.fields: + if not field.primary_key: + field_names.add(field.name) + + if field.name != field.attname: + field_names.add(field.attname) + + non_model_fields = update_fields.difference(field_names) + + if non_model_fields: + raise ValueError("The following fields do not exist in this " + "model or are m2m fields: %s" + % ', '.join(non_model_fields)) + + # If saving to the same database, and this model is deferred, then + # automatically do a "update_fields" save on the loaded fields. + elif not force_insert and deferred_fields and using == self._state.db: + field_names = set() + for field in self._meta.concrete_fields: + if not field.primary_key and not hasattr(field, 'through'): + field_names.add(field.attname) + loaded_fields = field_names.difference(deferred_fields) + if loaded_fields: + update_fields = frozenset(loaded_fields) + + self.save_base(using=using, force_insert=force_insert, + force_update=force_update, update_fields=update_fields) + save.alters_data = True + + def save_base(self, raw=False, force_insert=False, + force_update=False, using=None, update_fields=None): + """ + Handle the parts of saving which should be done only once per save, + yet need to be done in raw saves, too. This includes some sanity + checks and signal sending. + + The 'raw' argument is telling save_base not to save any parent + models and not to do any changes to the values before save. This + is used by fixture loading. + """ + using = using or router.db_for_write(self.__class__, instance=self) + assert not (force_insert and (force_update or update_fields)) + assert update_fields is None or update_fields + cls = origin = self.__class__ + # Skip proxies, but keep the origin as the proxy model. + if cls._meta.proxy: + cls = cls._meta.concrete_model + meta = cls._meta + if not meta.auto_created: + pre_save.send( + sender=origin, instance=self, raw=raw, using=using, + update_fields=update_fields, + ) + with transaction.atomic(using=using, savepoint=False): + if not raw: + self._save_parents(cls, using, update_fields) + updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) + # Store the database on which the object was saved + self._state.db = using + # Once saved, this is no longer a to-be-added instance. + self._state.adding = False + + # Signal that the save is complete + if not meta.auto_created: + post_save.send( + sender=origin, instance=self, created=(not updated), + update_fields=update_fields, raw=raw, using=using, + ) + + save_base.alters_data = True + + def _save_parents(self, cls, using, update_fields): + """Save all the parents of cls using values from self.""" + meta = cls._meta + for parent, field in meta.parents.items(): + # Make sure the link fields are synced between parent and self. + if (field and getattr(self, parent._meta.pk.attname) is None and + getattr(self, field.attname) is not None): + setattr(self, parent._meta.pk.attname, getattr(self, field.attname)) + self._save_parents(cls=parent, using=using, update_fields=update_fields) + self._save_table(cls=parent, using=using, update_fields=update_fields) + # Set the parent's PK value to self. + if field: + setattr(self, field.attname, self._get_pk_val(parent._meta)) + # Since we didn't have an instance of the parent handy set + # attname directly, bypassing the descriptor. Invalidate + # the related object cache, in case it's been accidentally + # populated. A fresh instance will be re-built from the + # database if necessary. + if field.is_cached(self): + field.delete_cached_value(self) + + def _save_table(self, raw=False, cls=None, force_insert=False, + force_update=False, using=None, update_fields=None): + """ + Do the heavy-lifting involved in saving. Update or insert the data + for a single table. + """ + meta = cls._meta + non_pks = [f for f in meta.local_concrete_fields if not f.primary_key] + + if update_fields: + non_pks = [f for f in non_pks + if f.name in update_fields or f.attname in update_fields] + + pk_val = self._get_pk_val(meta) + if pk_val is None: + pk_val = meta.pk.get_pk_value_on_save(self) + setattr(self, meta.pk.attname, pk_val) + pk_set = pk_val is not None + if not pk_set and (force_update or update_fields): + raise ValueError("Cannot force an update in save() with no primary key.") + updated = False + # If possible, try an UPDATE. If that doesn't update anything, do an INSERT. + if pk_set and not force_insert: + base_qs = cls._base_manager.using(using) + values = [(f, None, (getattr(self, f.attname) if raw else f.pre_save(self, False))) + for f in non_pks] + forced_update = update_fields or force_update + updated = self._do_update(base_qs, using, pk_val, values, update_fields, + forced_update) + if force_update and not updated: + raise DatabaseError("Forced update did not affect any rows.") + if update_fields and not updated: + raise DatabaseError("Save with update_fields did not affect any rows.") + if not updated: + if meta.order_with_respect_to: + # If this is a model with an order_with_respect_to + # autopopulate the _order field + field = meta.order_with_respect_to + filter_args = field.get_filter_kwargs_for_object(self) + order_value = cls._base_manager.using(using).filter(**filter_args).count() + self._order = order_value + + fields = meta.local_concrete_fields + if not pk_set: + fields = [f for f in fields if f is not meta.auto_field] + + update_pk = meta.auto_field and not pk_set + result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) + if update_pk: + setattr(self, meta.pk.attname, result) + return updated + + def _do_update(self, base_qs, using, pk_val, values, update_fields, forced_update): + """ + Try to update the model. Return True if the model was updated (if an + update query was done and a matching row was found in the DB). + """ + filtered = base_qs.filter(pk=pk_val) + if not values: + # We can end up here when saving a model in inheritance chain where + # update_fields doesn't target any field in current model. In that + # case we just say the update succeeded. Another case ending up here + # is a model with just PK - in that case check that the PK still + # exists. + return update_fields is not None or filtered.exists() + if self._meta.select_on_save and not forced_update: + return ( + filtered.exists() and + # It may happen that the object is deleted from the DB right after + # this check, causing the subsequent UPDATE to return zero matching + # rows. The same result can occur in some rare cases when the + # database returns zero despite the UPDATE being executed + # successfully (a row is matched and updated). In order to + # distinguish these two cases, the object's existence in the + # database is again checked for if the UPDATE query returns 0. + (filtered._update(values) > 0 or filtered.exists()) + ) + return filtered._update(values) > 0 + + def _do_insert(self, manager, using, fields, update_pk, raw): + """ + Do an INSERT. If update_pk is defined then this method should return + the new pk for the model. + """ + return manager._insert([self], fields=fields, return_id=update_pk, + using=using, raw=raw) + + def delete(self, using=None, keep_parents=False): + using = using or router.db_for_write(self.__class__, instance=self) + assert self.pk is not None, ( + "%s object can't be deleted because its %s attribute is set to None." % + (self._meta.object_name, self._meta.pk.attname) + ) + + collector = Collector(using=using) + collector.collect([self], keep_parents=keep_parents) + return collector.delete() + + delete.alters_data = True + + def _get_FIELD_display(self, field): + value = getattr(self, field.attname) + return force_text(dict(field.flatchoices).get(value, value), strings_only=True) + + def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs): + if not self.pk: + raise ValueError("get_next/get_previous cannot be used on unsaved objects.") + op = 'gt' if is_next else 'lt' + order = '' if is_next else '-' + param = getattr(self, field.attname) + q = Q(**{'%s__%s' % (field.name, op): param}) + q = q | Q(**{field.name: param, 'pk__%s' % op: self.pk}) + qs = self.__class__._default_manager.using(self._state.db).filter(**kwargs).filter(q).order_by( + '%s%s' % (order, field.name), '%spk' % order + ) + try: + return qs[0] + except IndexError: + raise self.DoesNotExist("%s matching query does not exist." % self.__class__._meta.object_name) + + def _get_next_or_previous_in_order(self, is_next): + cachename = "__%s_order_cache" % is_next + if not hasattr(self, cachename): + op = 'gt' if is_next else 'lt' + order = '_order' if is_next else '-_order' + order_field = self._meta.order_with_respect_to + filter_args = order_field.get_filter_kwargs_for_object(self) + obj = self.__class__._default_manager.filter(**filter_args).filter(**{ + '_order__%s' % op: self.__class__._default_manager.values('_order').filter(**{ + self._meta.pk.name: self.pk + }) + }).order_by(order)[:1].get() + setattr(self, cachename, obj) + return getattr(self, cachename) + + def prepare_database_save(self, field): + if self.pk is None: + raise ValueError("Unsaved model instance %r cannot be used in an ORM query." % self) + return getattr(self, field.remote_field.get_related_field().attname) + + def clean(self): + """ + Hook for doing any extra model-wide validation after clean() has been + called on every field by self.clean_fields. Any ValidationError raised + by this method will not be associated with a particular field; it will + have a special-case association with the field defined by NON_FIELD_ERRORS. + """ + pass + + def validate_unique(self, exclude=None): + """ + Check unique constraints on the model and raise ValidationError if any + failed. + """ + unique_checks, date_checks = self._get_unique_checks(exclude=exclude) + + errors = self._perform_unique_checks(unique_checks) + date_errors = self._perform_date_checks(date_checks) + + for k, v in date_errors.items(): + errors.setdefault(k, []).extend(v) + + if errors: + raise ValidationError(errors) + + def _get_unique_checks(self, exclude=None): + """ + Return a list of checks to perform. Since validate_unique() could be + called from a ModelForm, some fields may have been excluded; we can't + perform a unique check on a model that is missing fields involved + in that check. Fields that did not validate should also be excluded, + but they need to be passed in via the exclude argument. + """ + if exclude is None: + exclude = [] + unique_checks = [] + + unique_togethers = [(self.__class__, self._meta.unique_together)] + for parent_class in self._meta.get_parent_list(): + if parent_class._meta.unique_together: + unique_togethers.append((parent_class, parent_class._meta.unique_together)) + + for model_class, unique_together in unique_togethers: + for check in unique_together: + if not any(name in exclude for name in check): + # Add the check if the field isn't excluded. + unique_checks.append((model_class, tuple(check))) + + # These are checks for the unique_for_. + date_checks = [] + + # Gather a list of checks for fields declared as unique and add them to + # the list of checks. + + fields_with_class = [(self.__class__, self._meta.local_fields)] + for parent_class in self._meta.get_parent_list(): + fields_with_class.append((parent_class, parent_class._meta.local_fields)) + + for model_class, fields in fields_with_class: + for f in fields: + name = f.name + if name in exclude: + continue + if f.unique: + unique_checks.append((model_class, (name,))) + if f.unique_for_date and f.unique_for_date not in exclude: + date_checks.append((model_class, 'date', name, f.unique_for_date)) + if f.unique_for_year and f.unique_for_year not in exclude: + date_checks.append((model_class, 'year', name, f.unique_for_year)) + if f.unique_for_month and f.unique_for_month not in exclude: + date_checks.append((model_class, 'month', name, f.unique_for_month)) + return unique_checks, date_checks + + def _perform_unique_checks(self, unique_checks): + errors = {} + + for model_class, unique_check in unique_checks: + # Try to look up an existing object with the same values as this + # object's values for all the unique field. + + lookup_kwargs = {} + for field_name in unique_check: + f = self._meta.get_field(field_name) + lookup_value = getattr(self, f.attname) + # TODO: Handle multiple backends with different feature flags. + if (lookup_value is None or + (lookup_value == '' and connection.features.interprets_empty_strings_as_nulls)): + # no value, skip the lookup + continue + if f.primary_key and not self._state.adding: + # no need to check for unique primary key when editing + continue + lookup_kwargs[str(field_name)] = lookup_value + + # some fields were skipped, no reason to do the check + if len(unique_check) != len(lookup_kwargs): + continue + + qs = model_class._default_manager.filter(**lookup_kwargs) + + # Exclude the current object from the query if we are editing an + # instance (as opposed to creating a new one) + # Note that we need to use the pk as defined by model_class, not + # self.pk. These can be different fields because model inheritance + # allows single model to have effectively multiple primary keys. + # Refs #17615. + model_class_pk = self._get_pk_val(model_class._meta) + if not self._state.adding and model_class_pk is not None: + qs = qs.exclude(pk=model_class_pk) + if qs.exists(): + if len(unique_check) == 1: + key = unique_check[0] + else: + key = NON_FIELD_ERRORS + errors.setdefault(key, []).append(self.unique_error_message(model_class, unique_check)) + + return errors + + def _perform_date_checks(self, date_checks): + errors = {} + for model_class, lookup_type, field, unique_for in date_checks: + lookup_kwargs = {} + # there's a ticket to add a date lookup, we can remove this special + # case if that makes it's way in + date = getattr(self, unique_for) + if date is None: + continue + if lookup_type == 'date': + lookup_kwargs['%s__day' % unique_for] = date.day + lookup_kwargs['%s__month' % unique_for] = date.month + lookup_kwargs['%s__year' % unique_for] = date.year + else: + lookup_kwargs['%s__%s' % (unique_for, lookup_type)] = getattr(date, lookup_type) + lookup_kwargs[field] = getattr(self, field) + + qs = model_class._default_manager.filter(**lookup_kwargs) + # Exclude the current object from the query if we are editing an + # instance (as opposed to creating a new one) + if not self._state.adding and self.pk is not None: + qs = qs.exclude(pk=self.pk) + + if qs.exists(): + errors.setdefault(field, []).append( + self.date_error_message(lookup_type, field, unique_for) + ) + return errors + + def date_error_message(self, lookup_type, field_name, unique_for): + opts = self._meta + field = opts.get_field(field_name) + return ValidationError( + message=field.error_messages['unique_for_date'], + code='unique_for_date', + params={ + 'model': self, + 'model_name': capfirst(opts.verbose_name), + 'lookup_type': lookup_type, + 'field': field_name, + 'field_label': capfirst(field.verbose_name), + 'date_field': unique_for, + 'date_field_label': capfirst(opts.get_field(unique_for).verbose_name), + } + ) + + def unique_error_message(self, model_class, unique_check): + opts = model_class._meta + + params = { + 'model': self, + 'model_class': model_class, + 'model_name': capfirst(opts.verbose_name), + 'unique_check': unique_check, + } + + # A unique field + if len(unique_check) == 1: + field = opts.get_field(unique_check[0]) + params['field_label'] = capfirst(field.verbose_name) + return ValidationError( + message=field.error_messages['unique'], + code='unique', + params=params, + ) + + # unique_together + else: + field_labels = [capfirst(opts.get_field(f).verbose_name) for f in unique_check] + params['field_labels'] = get_text_list(field_labels, _('and')) + return ValidationError( + message=_("%(model_name)s with this %(field_labels)s already exists."), + code='unique_together', + params=params, + ) + + def full_clean(self, exclude=None, validate_unique=True): + """ + Call clean_fields(), clean(), and validate_unique() on the model. + Raise a ValidationError for any errors that occur. + """ + errors = {} + if exclude is None: + exclude = [] + else: + exclude = list(exclude) + + try: + self.clean_fields(exclude=exclude) + except ValidationError as e: + errors = e.update_error_dict(errors) + + # Form.clean() is run even if other validation fails, so do the + # same with Model.clean() for consistency. + try: + self.clean() + except ValidationError as e: + errors = e.update_error_dict(errors) + + # Run unique checks, but only for fields that passed validation. + if validate_unique: + for name in errors: + if name != NON_FIELD_ERRORS and name not in exclude: + exclude.append(name) + try: + self.validate_unique(exclude=exclude) + except ValidationError as e: + errors = e.update_error_dict(errors) + + if errors: + raise ValidationError(errors) + + def clean_fields(self, exclude=None): + """ + Clean all fields and raise a ValidationError containing a dict + of all validation errors if any occur. + """ + if exclude is None: + exclude = [] + + errors = {} + for f in self._meta.fields: + if f.name in exclude: + continue + # Skip validation for empty fields with blank=True. The developer + # is responsible for making sure they have a valid value. + raw_value = getattr(self, f.attname) + if f.blank and raw_value in f.empty_values: + continue + try: + setattr(self, f.attname, f.clean(raw_value, self)) + except ValidationError as e: + errors[f.name] = e.error_list + + if errors: + raise ValidationError(errors) + + @classmethod + def check(cls, **kwargs): + errors = [*cls._check_swappable(), *cls._check_model(), *cls._check_managers(**kwargs)] + if not cls._meta.swapped: + errors += [ + *cls._check_fields(**kwargs), + *cls._check_m2m_through_same_relationship(), + *cls._check_long_column_names(), + ] + clash_errors = ( + *cls._check_id_field(), + *cls._check_field_name_clashes(), + *cls._check_model_name_db_lookup_clashes(), + *cls._check_property_name_related_field_accessor_clashes(), + *cls._check_single_primary_key(), + ) + errors.extend(clash_errors) + # If there are field name clashes, hide consequent column name + # clashes. + if not clash_errors: + errors.extend(cls._check_column_name_clashes()) + errors += [ + *cls._check_index_together(), + *cls._check_unique_together(), + *cls._check_indexes(), + *cls._check_ordering(), + ] + + return errors + + @classmethod + def _check_swappable(cls): + """Check if the swapped model exists.""" + errors = [] + if cls._meta.swapped: + try: + apps.get_model(cls._meta.swapped) + except ValueError: + errors.append( + checks.Error( + "'%s' is not of the form 'app_label.app_name'." % cls._meta.swappable, + id='models.E001', + ) + ) + except LookupError: + app_label, model_name = cls._meta.swapped.split('.') + errors.append( + checks.Error( + "'%s' references '%s.%s', which has not been " + "installed, or is abstract." % ( + cls._meta.swappable, app_label, model_name + ), + id='models.E002', + ) + ) + return errors + + @classmethod + def _check_model(cls): + errors = [] + if cls._meta.proxy: + if cls._meta.local_fields or cls._meta.local_many_to_many: + errors.append( + checks.Error( + "Proxy model '%s' contains model fields." % cls.__name__, + id='models.E017', + ) + ) + return errors + + @classmethod + def _check_managers(cls, **kwargs): + """Perform all manager checks.""" + errors = [] + for manager in cls._meta.managers: + errors.extend(manager.check(**kwargs)) + return errors + + @classmethod + def _check_fields(cls, **kwargs): + """Perform all field checks.""" + errors = [] + for field in cls._meta.local_fields: + errors.extend(field.check(**kwargs)) + for field in cls._meta.local_many_to_many: + errors.extend(field.check(from_model=cls, **kwargs)) + return errors + + @classmethod + def _check_m2m_through_same_relationship(cls): + """ Check if no relationship model is used by more than one m2m field. + """ + + errors = [] + seen_intermediary_signatures = [] + + fields = cls._meta.local_many_to_many + + # Skip when the target model wasn't found. + fields = (f for f in fields if isinstance(f.remote_field.model, ModelBase)) + + # Skip when the relationship model wasn't found. + fields = (f for f in fields if isinstance(f.remote_field.through, ModelBase)) + + for f in fields: + signature = (f.remote_field.model, cls, f.remote_field.through) + if signature in seen_intermediary_signatures: + errors.append( + checks.Error( + "The model has two many-to-many relations through " + "the intermediate model '%s'." % f.remote_field.through._meta.label, + obj=cls, + id='models.E003', + ) + ) + else: + seen_intermediary_signatures.append(signature) + return errors + + @classmethod + def _check_id_field(cls): + """Check if `id` field is a primary key.""" + fields = [f for f in cls._meta.local_fields if f.name == 'id' and f != cls._meta.pk] + # fields is empty or consists of the invalid "id" field + if fields and not fields[0].primary_key and cls._meta.pk.name == 'id': + return [ + checks.Error( + "'id' can only be used as a field name if the field also " + "sets 'primary_key=True'.", + obj=cls, + id='models.E004', + ) + ] + else: + return [] + + @classmethod + def _check_field_name_clashes(cls): + """Forbid field shadowing in multi-table inheritance.""" + errors = [] + used_fields = {} # name or attname -> field + + # Check that multi-inheritance doesn't cause field name shadowing. + for parent in cls._meta.get_parent_list(): + for f in parent._meta.local_fields: + clash = used_fields.get(f.name) or used_fields.get(f.attname) or None + if clash: + errors.append( + checks.Error( + "The field '%s' from parent model " + "'%s' clashes with the field '%s' " + "from parent model '%s'." % ( + clash.name, clash.model._meta, + f.name, f.model._meta + ), + obj=cls, + id='models.E005', + ) + ) + used_fields[f.name] = f + used_fields[f.attname] = f + + # Check that fields defined in the model don't clash with fields from + # parents, including auto-generated fields like multi-table inheritance + # child accessors. + for parent in cls._meta.get_parent_list(): + for f in parent._meta.get_fields(): + if f not in used_fields: + used_fields[f.name] = f + + for f in cls._meta.local_fields: + clash = used_fields.get(f.name) or used_fields.get(f.attname) or None + # Note that we may detect clash between user-defined non-unique + # field "id" and automatically added unique field "id", both + # defined at the same model. This special case is considered in + # _check_id_field and here we ignore it. + id_conflict = f.name == "id" and clash and clash.name == "id" and clash.model == cls + if clash and not id_conflict: + errors.append( + checks.Error( + "The field '%s' clashes with the field '%s' " + "from model '%s'." % ( + f.name, clash.name, clash.model._meta + ), + obj=f, + id='models.E006', + ) + ) + used_fields[f.name] = f + used_fields[f.attname] = f + + return errors + + @classmethod + def _check_column_name_clashes(cls): + # Store a list of column names which have already been used by other fields. + used_column_names = [] + errors = [] + + for f in cls._meta.local_fields: + _, column_name = f.get_attname_column() + + # Ensure the column name is not already in use. + if column_name and column_name in used_column_names: + errors.append( + checks.Error( + "Field '%s' has column name '%s' that is used by " + "another field." % (f.name, column_name), + hint="Specify a 'db_column' for the field.", + obj=cls, + id='models.E007' + ) + ) + else: + used_column_names.append(column_name) + + return errors + + @classmethod + def _check_model_name_db_lookup_clashes(cls): + errors = [] + model_name = cls.__name__ + if model_name.startswith('_') or model_name.endswith('_'): + errors.append( + checks.Error( + "The model name '%s' cannot start or end with an underscore " + "as it collides with the query lookup syntax." % model_name, + obj=cls, + id='models.E023' + ) + ) + elif LOOKUP_SEP in model_name: + errors.append( + checks.Error( + "The model name '%s' cannot contain double underscores as " + "it collides with the query lookup syntax." % model_name, + obj=cls, + id='models.E024' + ) + ) + return errors + + @classmethod + def _check_property_name_related_field_accessor_clashes(cls): + errors = [] + property_names = cls._meta._property_names + related_field_accessors = ( + f.get_attname() for f in cls._meta._get_fields(reverse=False) + if f.is_relation and f.related_model is not None + ) + for accessor in related_field_accessors: + if accessor in property_names: + errors.append( + checks.Error( + "The property '%s' clashes with a related field " + "accessor." % accessor, + obj=cls, + id='models.E025', + ) + ) + return errors + + @classmethod + def _check_single_primary_key(cls): + errors = [] + if sum(1 for f in cls._meta.local_fields if f.primary_key) > 1: + errors.append( + checks.Error( + "The model cannot have more than one field with " + "'primary_key=True'.", + obj=cls, + id='models.E026', + ) + ) + return errors + + @classmethod + def _check_index_together(cls): + """Check the value of "index_together" option.""" + if not isinstance(cls._meta.index_together, (tuple, list)): + return [ + checks.Error( + "'index_together' must be a list or tuple.", + obj=cls, + id='models.E008', + ) + ] + + elif any(not isinstance(fields, (tuple, list)) for fields in cls._meta.index_together): + return [ + checks.Error( + "All 'index_together' elements must be lists or tuples.", + obj=cls, + id='models.E009', + ) + ] + + else: + errors = [] + for fields in cls._meta.index_together: + errors.extend(cls._check_local_fields(fields, "index_together")) + return errors + + @classmethod + def _check_unique_together(cls): + """Check the value of "unique_together" option.""" + if not isinstance(cls._meta.unique_together, (tuple, list)): + return [ + checks.Error( + "'unique_together' must be a list or tuple.", + obj=cls, + id='models.E010', + ) + ] + + elif any(not isinstance(fields, (tuple, list)) for fields in cls._meta.unique_together): + return [ + checks.Error( + "All 'unique_together' elements must be lists or tuples.", + obj=cls, + id='models.E011', + ) + ] + + else: + errors = [] + for fields in cls._meta.unique_together: + errors.extend(cls._check_local_fields(fields, "unique_together")) + return errors + + @classmethod + def _check_indexes(cls): + """Check the fields of indexes.""" + fields = [field for index in cls._meta.indexes for field, _ in index.fields_orders] + return cls._check_local_fields(fields, 'indexes') + + @classmethod + def _check_local_fields(cls, fields, option): + from django.db import models + + # In order to avoid hitting the relation tree prematurely, we use our + # own fields_map instead of using get_field() + forward_fields_map = { + field.name: field for field in cls._meta._get_fields(reverse=False) + } + + errors = [] + for field_name in fields: + try: + field = forward_fields_map[field_name] + except KeyError: + errors.append( + checks.Error( + "'%s' refers to the nonexistent field '%s'." % ( + option, field_name, + ), + obj=cls, + id='models.E012', + ) + ) + else: + if isinstance(field.remote_field, models.ManyToManyRel): + errors.append( + checks.Error( + "'%s' refers to a ManyToManyField '%s', but " + "ManyToManyFields are not permitted in '%s'." % ( + option, field_name, option, + ), + obj=cls, + id='models.E013', + ) + ) + elif field not in cls._meta.local_fields: + errors.append( + checks.Error( + "'%s' refers to field '%s' which is not local to model '%s'." + % (option, field_name, cls._meta.object_name), + hint="This issue may be caused by multi-table inheritance.", + obj=cls, + id='models.E016', + ) + ) + return errors + + @classmethod + def _check_ordering(cls): + """ + Check "ordering" option -- is it a list of strings and do all fields + exist? + """ + if cls._meta._ordering_clash: + return [ + checks.Error( + "'ordering' and 'order_with_respect_to' cannot be used together.", + obj=cls, + id='models.E021', + ), + ] + + if cls._meta.order_with_respect_to or not cls._meta.ordering: + return [] + + if not isinstance(cls._meta.ordering, (list, tuple)): + return [ + checks.Error( + "'ordering' must be a tuple or list (even if you want to order by only one field).", + obj=cls, + id='models.E014', + ) + ] + + errors = [] + fields = cls._meta.ordering + + # Skip expressions and '?' fields. + fields = (f for f in fields if isinstance(f, str) and f != '?') + + # Convert "-field" to "field". + fields = ((f[1:] if f.startswith('-') else f) for f in fields) + + # Skip ordering in the format field1__field2 (FIXME: checking + # this format would be nice, but it's a little fiddly). + fields = (f for f in fields if LOOKUP_SEP not in f) + + # Skip ordering on pk. This is always a valid order_by field + # but is an alias and therefore won't be found by opts.get_field. + fields = {f for f in fields if f != 'pk'} + + # Check for invalid or nonexistent fields in ordering. + invalid_fields = [] + + # Any field name that is not present in field_names does not exist. + # Also, ordering by m2m fields is not allowed. + opts = cls._meta + valid_fields = set(chain.from_iterable( + (f.name, f.attname) if not (f.auto_created and not f.concrete) else (f.field.related_query_name(),) + for f in chain(opts.fields, opts.related_objects) + )) + + invalid_fields.extend(fields - valid_fields) + + for invalid_field in invalid_fields: + errors.append( + checks.Error( + "'ordering' refers to the nonexistent field '%s'." % invalid_field, + obj=cls, + id='models.E015', + ) + ) + return errors + + @classmethod + def _check_long_column_names(cls): + """ + Check that any auto-generated column names are shorter than the limits + for each database in which the model will be created. + """ + errors = [] + allowed_len = None + db_alias = None + + # Find the minimum max allowed length among all specified db_aliases. + for db in settings.DATABASES: + # skip databases where the model won't be created + if not router.allow_migrate_model(db, cls): + continue + connection = connections[db] + max_name_length = connection.ops.max_name_length() + if max_name_length is None or connection.features.truncates_names: + continue + else: + if allowed_len is None: + allowed_len = max_name_length + db_alias = db + elif max_name_length < allowed_len: + allowed_len = max_name_length + db_alias = db + + if allowed_len is None: + return errors + + for f in cls._meta.local_fields: + _, column_name = f.get_attname_column() + + # Check if auto-generated name for the field is too long + # for the database. + if f.db_column is None and column_name is not None and len(column_name) > allowed_len: + errors.append( + checks.Error( + 'Autogenerated column name too long for field "%s". ' + 'Maximum length is "%s" for database "%s".' + % (column_name, allowed_len, db_alias), + hint="Set the column name manually using 'db_column'.", + obj=cls, + id='models.E018', + ) + ) + + for f in cls._meta.local_many_to_many: + # Skip nonexistent models. + if isinstance(f.remote_field.through, str): + continue + + # Check if auto-generated name for the M2M field is too long + # for the database. + for m2m in f.remote_field.through._meta.local_fields: + _, rel_name = m2m.get_attname_column() + if m2m.db_column is None and rel_name is not None and len(rel_name) > allowed_len: + errors.append( + checks.Error( + 'Autogenerated column name too long for M2M field ' + '"%s". Maximum length is "%s" for database "%s".' + % (rel_name, allowed_len, db_alias), + hint=( + "Use 'through' to create a separate model for " + "M2M and then set column_name using 'db_column'." + ), + obj=cls, + id='models.E019', + ) + ) + + return errors + + +############################################ +# HELPER FUNCTIONS (CURRIED MODEL METHODS) # +############################################ + +# ORDERING METHODS ######################### + +def method_set_order(self, ordered_obj, id_list, using=None): + if using is None: + using = DEFAULT_DB_ALIAS + order_wrt = ordered_obj._meta.order_with_respect_to + filter_args = order_wrt.get_forward_related_filter(self) + # FIXME: It would be nice if there was an "update many" version of update + # for situations like this. + with transaction.atomic(using=using, savepoint=False): + for i, j in enumerate(id_list): + ordered_obj.objects.filter(pk=j, **filter_args).update(_order=i) + + +def method_get_order(self, ordered_obj): + order_wrt = ordered_obj._meta.order_with_respect_to + filter_args = order_wrt.get_forward_related_filter(self) + pk_name = ordered_obj._meta.pk.name + return ordered_obj.objects.filter(**filter_args).values_list(pk_name, flat=True) + + +def make_foreign_order_accessors(model, related_model): + setattr( + related_model, + 'get_%s_order' % model.__name__.lower(), + partialmethod(method_get_order, model) + ) + setattr( + related_model, + 'set_%s_order' % model.__name__.lower(), + partialmethod(method_set_order, model) + ) + +######## +# MISC # +######## + + +def model_unpickle(model_id): + """Used to unpickle Model subclasses with deferred fields.""" + if isinstance(model_id, tuple): + model = apps.get_model(*model_id) + else: + # Backwards compat - the model was cached directly in earlier versions. + model = model_id + return model.__new__(model) + + +model_unpickle.__safe_for_unpickle__ = True diff --git a/env/lib/python3.5/site-packages/django/db/models/constants.py b/env/lib/python3.5/site-packages/django/db/models/constants.py new file mode 100644 index 0000000..a7e6c25 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/constants.py @@ -0,0 +1,6 @@ +""" +Constants used across the ORM in general. +""" + +# Separator used to split filter strings apart. +LOOKUP_SEP = '__' diff --git a/env/lib/python3.5/site-packages/django/db/models/deletion.py b/env/lib/python3.5/site-packages/django/db/models/deletion.py new file mode 100644 index 0000000..c5145c4 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/deletion.py @@ -0,0 +1,317 @@ +from collections import Counter, OrderedDict +from operator import attrgetter + +from django.db import IntegrityError, connections, transaction +from django.db.models import signals, sql + + +class ProtectedError(IntegrityError): + def __init__(self, msg, protected_objects): + self.protected_objects = protected_objects + super().__init__(msg, protected_objects) + + +def CASCADE(collector, field, sub_objs, using): + collector.collect(sub_objs, source=field.remote_field.model, + source_attr=field.name, nullable=field.null) + if field.null and not connections[using].features.can_defer_constraint_checks: + collector.add_field_update(field, None, sub_objs) + + +def PROTECT(collector, field, sub_objs, using): + raise ProtectedError( + "Cannot delete some instances of model '%s' because they are " + "referenced through a protected foreign key: '%s.%s'" % ( + field.remote_field.model.__name__, sub_objs[0].__class__.__name__, field.name + ), + sub_objs + ) + + +def SET(value): + if callable(value): + def set_on_delete(collector, field, sub_objs, using): + collector.add_field_update(field, value(), sub_objs) + else: + def set_on_delete(collector, field, sub_objs, using): + collector.add_field_update(field, value, sub_objs) + set_on_delete.deconstruct = lambda: ('django.db.models.SET', (value,), {}) + return set_on_delete + + +def SET_NULL(collector, field, sub_objs, using): + collector.add_field_update(field, None, sub_objs) + + +def SET_DEFAULT(collector, field, sub_objs, using): + collector.add_field_update(field, field.get_default(), sub_objs) + + +def DO_NOTHING(collector, field, sub_objs, using): + pass + + +def get_candidate_relations_to_delete(opts): + # The candidate relations are the ones that come from N-1 and 1-1 relations. + # N-N (i.e., many-to-many) relations aren't candidates for deletion. + return ( + f for f in opts.get_fields(include_hidden=True) + if f.auto_created and not f.concrete and (f.one_to_one or f.one_to_many) + ) + + +class Collector: + def __init__(self, using): + self.using = using + # Initially, {model: {instances}}, later values become lists. + self.data = OrderedDict() + self.field_updates = {} # {model: {(field, value): {instances}}} + # fast_deletes is a list of queryset-likes that can be deleted without + # fetching the objects into memory. + self.fast_deletes = [] + + # Tracks deletion-order dependency for databases without transactions + # or ability to defer constraint checks. Only concrete model classes + # should be included, as the dependencies exist only between actual + # database tables; proxy models are represented here by their concrete + # parent. + self.dependencies = {} # {model: {models}} + + def add(self, objs, source=None, nullable=False, reverse_dependency=False): + """ + Add 'objs' to the collection of objects to be deleted. If the call is + the result of a cascade, 'source' should be the model that caused it, + and 'nullable' should be set to True if the relation can be null. + + Return a list of all objects that were not already collected. + """ + if not objs: + return [] + new_objs = [] + model = objs[0].__class__ + instances = self.data.setdefault(model, set()) + for obj in objs: + if obj not in instances: + new_objs.append(obj) + instances.update(new_objs) + # Nullable relationships can be ignored -- they are nulled out before + # deleting, and therefore do not affect the order in which objects have + # to be deleted. + if source is not None and not nullable: + if reverse_dependency: + source, model = model, source + self.dependencies.setdefault( + source._meta.concrete_model, set()).add(model._meta.concrete_model) + return new_objs + + def add_field_update(self, field, value, objs): + """ + Schedule a field update. 'objs' must be a homogeneous iterable + collection of model instances (e.g. a QuerySet). + """ + if not objs: + return + model = objs[0].__class__ + self.field_updates.setdefault( + model, {}).setdefault( + (field, value), set()).update(objs) + + def can_fast_delete(self, objs, from_field=None): + """ + Determine if the objects in the given queryset-like can be + fast-deleted. This can be done if there are no cascades, no + parents and no signal listeners for the object class. + + The 'from_field' tells where we are coming from - we need this to + determine if the objects are in fact to be deleted. Allow also + skipping parent -> child -> parent chain preventing fast delete of + the child. + """ + if from_field and from_field.remote_field.on_delete is not CASCADE: + return False + if not (hasattr(objs, 'model') and hasattr(objs, '_raw_delete')): + return False + model = objs.model + if (signals.pre_delete.has_listeners(model) or + signals.post_delete.has_listeners(model) or + signals.m2m_changed.has_listeners(model)): + return False + # The use of from_field comes from the need to avoid cascade back to + # parent when parent delete is cascading to child. + opts = model._meta + return ( + all(link == from_field for link in opts.concrete_model._meta.parents.values()) and + # Foreign keys pointing to this model. + all( + related.field.remote_field.on_delete is DO_NOTHING + for related in get_candidate_relations_to_delete(opts) + ) and ( + # Something like generic foreign key. + not any(hasattr(field, 'bulk_related_objects') for field in model._meta.private_fields) + ) + ) + + def get_del_batches(self, objs, field): + """ + Return the objs in suitably sized batches for the used connection. + """ + conn_batch_size = max( + connections[self.using].ops.bulk_batch_size([field.name], objs), 1) + if len(objs) > conn_batch_size: + return [objs[i:i + conn_batch_size] + for i in range(0, len(objs), conn_batch_size)] + else: + return [objs] + + def collect(self, objs, source=None, nullable=False, collect_related=True, + source_attr=None, reverse_dependency=False, keep_parents=False): + """ + Add 'objs' to the collection of objects to be deleted as well as all + parent instances. 'objs' must be a homogeneous iterable collection of + model instances (e.g. a QuerySet). If 'collect_related' is True, + related objects will be handled by their respective on_delete handler. + + If the call is the result of a cascade, 'source' should be the model + that caused it and 'nullable' should be set to True, if the relation + can be null. + + If 'reverse_dependency' is True, 'source' will be deleted before the + current model, rather than after. (Needed for cascading to parent + models, the one case in which the cascade follows the forwards + direction of an FK rather than the reverse direction.) + + If 'keep_parents' is True, data of parent model's will be not deleted. + """ + if self.can_fast_delete(objs): + self.fast_deletes.append(objs) + return + new_objs = self.add(objs, source, nullable, + reverse_dependency=reverse_dependency) + if not new_objs: + return + + model = new_objs[0].__class__ + + if not keep_parents: + # Recursively collect concrete model's parent models, but not their + # related objects. These will be found by meta.get_fields() + concrete_model = model._meta.concrete_model + for ptr in concrete_model._meta.parents.values(): + if ptr: + parent_objs = [getattr(obj, ptr.name) for obj in new_objs] + self.collect(parent_objs, source=model, + source_attr=ptr.remote_field.related_name, + collect_related=False, + reverse_dependency=True) + if collect_related: + parents = model._meta.parents + for related in get_candidate_relations_to_delete(model._meta): + # Preserve parent reverse relationships if keep_parents=True. + if keep_parents and related.model in parents: + continue + field = related.field + if field.remote_field.on_delete == DO_NOTHING: + continue + batches = self.get_del_batches(new_objs, field) + for batch in batches: + sub_objs = self.related_objects(related, batch) + if self.can_fast_delete(sub_objs, from_field=field): + self.fast_deletes.append(sub_objs) + elif sub_objs: + field.remote_field.on_delete(self, field, sub_objs, self.using) + for field in model._meta.private_fields: + if hasattr(field, 'bulk_related_objects'): + # It's something like generic foreign key. + sub_objs = field.bulk_related_objects(new_objs, self.using) + self.collect(sub_objs, source=model, nullable=True) + + def related_objects(self, related, objs): + """ + Get a QuerySet of objects related to `objs` via the relation `related`. + """ + return related.related_model._base_manager.using(self.using).filter( + **{"%s__in" % related.field.name: objs} + ) + + def instances_with_model(self): + for model, instances in self.data.items(): + for obj in instances: + yield model, obj + + def sort(self): + sorted_models = [] + concrete_models = set() + models = list(self.data) + while len(sorted_models) < len(models): + found = False + for model in models: + if model in sorted_models: + continue + dependencies = self.dependencies.get(model._meta.concrete_model) + if not (dependencies and dependencies.difference(concrete_models)): + sorted_models.append(model) + concrete_models.add(model._meta.concrete_model) + found = True + if not found: + return + self.data = OrderedDict((model, self.data[model]) + for model in sorted_models) + + def delete(self): + # sort instance collections + for model, instances in self.data.items(): + self.data[model] = sorted(instances, key=attrgetter("pk")) + + # if possible, bring the models in an order suitable for databases that + # don't support transactions or cannot defer constraint checks until the + # end of a transaction. + self.sort() + # number of objects deleted for each model label + deleted_counter = Counter() + + with transaction.atomic(using=self.using, savepoint=False): + # send pre_delete signals + for model, obj in self.instances_with_model(): + if not model._meta.auto_created: + signals.pre_delete.send( + sender=model, instance=obj, using=self.using + ) + + # fast deletes + for qs in self.fast_deletes: + count = qs._raw_delete(using=self.using) + deleted_counter[qs.model._meta.label] += count + + # update fields + for model, instances_for_fieldvalues in self.field_updates.items(): + for (field, value), instances in instances_for_fieldvalues.items(): + query = sql.UpdateQuery(model) + query.update_batch([obj.pk for obj in instances], + {field.name: value}, self.using) + + # reverse instance collections + for instances in self.data.values(): + instances.reverse() + + # delete instances + for model, instances in self.data.items(): + query = sql.DeleteQuery(model) + pk_list = [obj.pk for obj in instances] + count = query.delete_batch(pk_list, self.using) + deleted_counter[model._meta.label] += count + + if not model._meta.auto_created: + for obj in instances: + signals.post_delete.send( + sender=model, instance=obj, using=self.using + ) + + # update collected instances + for instances_for_fieldvalues in self.field_updates.values(): + for (field, value), instances in instances_for_fieldvalues.items(): + for obj in instances: + setattr(obj, field.attname, value) + for model, instances in self.data.items(): + for instance in instances: + setattr(instance, model._meta.pk.attname, None) + return sum(deleted_counter.values()), dict(deleted_counter) diff --git a/env/lib/python3.5/site-packages/django/db/models/expressions.py b/env/lib/python3.5/site-packages/django/db/models/expressions.py new file mode 100644 index 0000000..2194857 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/expressions.py @@ -0,0 +1,1321 @@ +import copy +import datetime +from decimal import Decimal + +from django.core.exceptions import EmptyResultSet, FieldError +from django.db import connection +from django.db.models import fields +from django.db.models.query_utils import Q +from django.utils.deconstruct import deconstructible +from django.utils.functional import cached_property + + +class SQLiteNumericMixin: + """ + Some expressions with output_field=DecimalField() must be cast to + numeric to be properly filtered. + """ + def as_sqlite(self, compiler, connection, **extra_context): + sql, params = self.as_sql(compiler, connection, **extra_context) + try: + if self.output_field.get_internal_type() == 'DecimalField': + sql = 'CAST(%s AS NUMERIC)' % sql + except FieldError: + pass + return sql, params + + +class Combinable: + """ + Provide the ability to combine one or two objects with + some connector. For example F('foo') + F('bar'). + """ + + # Arithmetic connectors + ADD = '+' + SUB = '-' + MUL = '*' + DIV = '/' + POW = '^' + # The following is a quoted % operator - it is quoted because it can be + # used in strings that also have parameter substitution. + MOD = '%%' + + # Bitwise operators - note that these are generated by .bitand() + # and .bitor(), the '&' and '|' are reserved for boolean operator + # usage. + BITAND = '&' + BITOR = '|' + BITLEFTSHIFT = '<<' + BITRIGHTSHIFT = '>>' + + def _combine(self, other, connector, reversed): + if not hasattr(other, 'resolve_expression'): + # everything must be resolvable to an expression + if isinstance(other, datetime.timedelta): + other = DurationValue(other, output_field=fields.DurationField()) + else: + other = Value(other) + + if reversed: + return CombinedExpression(other, connector, self) + return CombinedExpression(self, connector, other) + + ############# + # OPERATORS # + ############# + + def __neg__(self): + return self._combine(-1, self.MUL, False) + + def __add__(self, other): + return self._combine(other, self.ADD, False) + + def __sub__(self, other): + return self._combine(other, self.SUB, False) + + def __mul__(self, other): + return self._combine(other, self.MUL, False) + + def __truediv__(self, other): + return self._combine(other, self.DIV, False) + + def __mod__(self, other): + return self._combine(other, self.MOD, False) + + def __pow__(self, other): + return self._combine(other, self.POW, False) + + def __and__(self, other): + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + def bitand(self, other): + return self._combine(other, self.BITAND, False) + + def bitleftshift(self, other): + return self._combine(other, self.BITLEFTSHIFT, False) + + def bitrightshift(self, other): + return self._combine(other, self.BITRIGHTSHIFT, False) + + def __or__(self, other): + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + def bitor(self, other): + return self._combine(other, self.BITOR, False) + + def __radd__(self, other): + return self._combine(other, self.ADD, True) + + def __rsub__(self, other): + return self._combine(other, self.SUB, True) + + def __rmul__(self, other): + return self._combine(other, self.MUL, True) + + def __rtruediv__(self, other): + return self._combine(other, self.DIV, True) + + def __rmod__(self, other): + return self._combine(other, self.MOD, True) + + def __rpow__(self, other): + return self._combine(other, self.POW, True) + + def __rand__(self, other): + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + def __ror__(self, other): + raise NotImplementedError( + "Use .bitand() and .bitor() for bitwise logical operations." + ) + + +@deconstructible +class BaseExpression: + """Base class for all query expressions.""" + + # aggregate specific fields + is_summary = False + _output_field_resolved_to_none = False + # Can the expression be used in a WHERE clause? + filterable = True + # Can the expression can be used as a source expression in Window? + window_compatible = False + + def __init__(self, output_field=None): + if output_field is not None: + self.output_field = output_field + + def __getstate__(self): + state = self.__dict__.copy() + state.pop('convert_value', None) + return state + + def get_db_converters(self, connection): + return ( + [] + if self.convert_value is self._convert_value_noop else + [self.convert_value] + ) + self.output_field.get_db_converters(connection) + + def get_source_expressions(self): + return [] + + def set_source_expressions(self, exprs): + assert not exprs + + def _parse_expressions(self, *expressions): + return [ + arg if hasattr(arg, 'resolve_expression') else ( + F(arg) if isinstance(arg, str) else Value(arg) + ) for arg in expressions + ] + + def as_sql(self, compiler, connection): + """ + Responsible for returning a (sql, [params]) tuple to be included + in the current query. + + Different backends can provide their own implementation, by + providing an `as_{vendor}` method and patching the Expression: + + ``` + def override_as_sql(self, compiler, connection): + # custom logic + return super().as_sql(compiler, connection) + setattr(Expression, 'as_' + connection.vendor, override_as_sql) + ``` + + Arguments: + * compiler: the query compiler responsible for generating the query. + Must have a compile method, returning a (sql, [params]) tuple. + Calling compiler(value) will return a quoted `value`. + + * connection: the database connection used for the current query. + + Return: (sql, params) + Where `sql` is a string containing ordered sql parameters to be + replaced with the elements of the list `params`. + """ + raise NotImplementedError("Subclasses must implement as_sql()") + + @cached_property + def contains_aggregate(self): + return any(expr and expr.contains_aggregate for expr in self.get_source_expressions()) + + @cached_property + def contains_over_clause(self): + return any(expr and expr.contains_over_clause for expr in self.get_source_expressions()) + + @cached_property + def contains_column_references(self): + return any(expr and expr.contains_column_references for expr in self.get_source_expressions()) + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + """ + Provide the chance to do any preprocessing or validation before being + added to the query. + + Arguments: + * query: the backend query implementation + * allow_joins: boolean allowing or denying use of joins + in this query + * reuse: a set of reusable joins for multijoins + * summarize: a terminal aggregate clause + * for_save: whether this expression about to be used in a save or update + + Return: an Expression to be added to the query. + """ + c = self.copy() + c.is_summary = summarize + c.set_source_expressions([ + expr.resolve_expression(query, allow_joins, reuse, summarize) + if expr else None + for expr in c.get_source_expressions() + ]) + return c + + def _prepare(self, field): + """Hook used by Lookup.get_prep_lookup() to do custom preparation.""" + return self + + @property + def field(self): + return self.output_field + + @cached_property + def output_field(self): + """Return the output type of this expressions.""" + output_field = self._resolve_output_field() + if output_field is None: + self._output_field_resolved_to_none = True + raise FieldError('Cannot resolve expression type, unknown output_field') + return output_field + + @cached_property + def _output_field_or_none(self): + """ + Return the output field of this expression, or None if + _resolve_output_field() didn't return an output type. + """ + try: + return self.output_field + except FieldError: + if not self._output_field_resolved_to_none: + raise + + def _resolve_output_field(self): + """ + Attempt to infer the output type of the expression. If the output + fields of all source fields match then, simply infer the same type + here. This isn't always correct, but it makes sense most of the time. + + Consider the difference between `2 + 2` and `2 / 3`. Inferring + the type here is a convenience for the common case. The user should + supply their own output_field with more complex computations. + + If a source's output field resolves to None, exclude it from this check. + If all sources are None, then an error is raised higher up the stack in + the output_field property. + """ + sources_iter = (source for source in self.get_source_fields() if source is not None) + for output_field in sources_iter: + if any(not isinstance(output_field, source.__class__) for source in sources_iter): + raise FieldError('Expression contains mixed types. You must set output_field.') + return output_field + + @staticmethod + def _convert_value_noop(value, expression, connection): + return value + + @cached_property + def convert_value(self): + """ + Expressions provide their own converters because users have the option + of manually specifying the output_field which may be a different type + from the one the database returns. + """ + field = self.output_field + internal_type = field.get_internal_type() + if internal_type == 'FloatField': + return lambda value, expression, connection: None if value is None else float(value) + elif internal_type.endswith('IntegerField'): + return lambda value, expression, connection: None if value is None else int(value) + elif internal_type == 'DecimalField': + return lambda value, expression, connection: None if value is None else Decimal(value) + return self._convert_value_noop + + def get_lookup(self, lookup): + return self.output_field.get_lookup(lookup) + + def get_transform(self, name): + return self.output_field.get_transform(name) + + def relabeled_clone(self, change_map): + clone = self.copy() + clone.set_source_expressions([ + e.relabeled_clone(change_map) if e is not None else None + for e in self.get_source_expressions() + ]) + return clone + + def copy(self): + return copy.copy(self) + + def get_group_by_cols(self): + if not self.contains_aggregate: + return [self] + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + def get_source_fields(self): + """Return the underlying field types used by this aggregate.""" + return [e._output_field_or_none for e in self.get_source_expressions()] + + def asc(self, **kwargs): + return OrderBy(self, **kwargs) + + def desc(self, **kwargs): + return OrderBy(self, descending=True, **kwargs) + + def reverse_ordering(self): + return self + + def flatten(self): + """ + Recursively yield this expression and all subexpressions, in + depth-first order. + """ + yield self + for expr in self.get_source_expressions(): + if expr: + yield from expr.flatten() + + def __eq__(self, other): + if self.__class__ != other.__class__: + return False + path, args, kwargs = self.deconstruct() + other_path, other_args, other_kwargs = other.deconstruct() + if (path, args) == (other_path, other_args): + kwargs = kwargs.copy() + other_kwargs = other_kwargs.copy() + output_field = type(kwargs.pop('output_field', None)) + other_output_field = type(other_kwargs.pop('output_field', None)) + if output_field == other_output_field: + return kwargs == other_kwargs + return False + + def __hash__(self): + path, args, kwargs = self.deconstruct() + kwargs = kwargs.copy() + output_field = type(kwargs.pop('output_field', None)) + return hash((path, output_field) + args + tuple([ + (key, tuple(value)) if isinstance(value, list) else (key, value) + for key, value in kwargs.items() + ])) + + +class Expression(BaseExpression, Combinable): + """An expression that can be combined with other expressions.""" + pass + + +class CombinedExpression(SQLiteNumericMixin, Expression): + + def __init__(self, lhs, connector, rhs, output_field=None): + super().__init__(output_field=output_field) + self.connector = connector + self.lhs = lhs + self.rhs = rhs + + def __repr__(self): + return "<{}: {}>".format(self.__class__.__name__, self) + + def __str__(self): + return "{} {} {}".format(self.lhs, self.connector, self.rhs) + + def get_source_expressions(self): + return [self.lhs, self.rhs] + + def set_source_expressions(self, exprs): + self.lhs, self.rhs = exprs + + def as_sql(self, compiler, connection): + try: + lhs_output = self.lhs.output_field + except FieldError: + lhs_output = None + try: + rhs_output = self.rhs.output_field + except FieldError: + rhs_output = None + if (not connection.features.has_native_duration_field and + ((lhs_output and lhs_output.get_internal_type() == 'DurationField') or + (rhs_output and rhs_output.get_internal_type() == 'DurationField'))): + return DurationExpression(self.lhs, self.connector, self.rhs).as_sql(compiler, connection) + if (lhs_output and rhs_output and self.connector == self.SUB and + lhs_output.get_internal_type() in {'DateField', 'DateTimeField', 'TimeField'} and + lhs_output.get_internal_type() == rhs_output.get_internal_type()): + return TemporalSubtraction(self.lhs, self.rhs).as_sql(compiler, connection) + expressions = [] + expression_params = [] + sql, params = compiler.compile(self.lhs) + expressions.append(sql) + expression_params.extend(params) + sql, params = compiler.compile(self.rhs) + expressions.append(sql) + expression_params.extend(params) + # order of precedence + expression_wrapper = '(%s)' + sql = connection.ops.combine_expression(self.connector, expressions) + return expression_wrapper % sql, expression_params + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + c = self.copy() + c.is_summary = summarize + c.lhs = c.lhs.resolve_expression(query, allow_joins, reuse, summarize, for_save) + c.rhs = c.rhs.resolve_expression(query, allow_joins, reuse, summarize, for_save) + return c + + +class DurationExpression(CombinedExpression): + def compile(self, side, compiler, connection): + if not isinstance(side, DurationValue): + try: + output = side.output_field + except FieldError: + pass + else: + if output.get_internal_type() == 'DurationField': + sql, params = compiler.compile(side) + return connection.ops.format_for_duration_arithmetic(sql), params + return compiler.compile(side) + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + expressions = [] + expression_params = [] + sql, params = self.compile(self.lhs, compiler, connection) + expressions.append(sql) + expression_params.extend(params) + sql, params = self.compile(self.rhs, compiler, connection) + expressions.append(sql) + expression_params.extend(params) + # order of precedence + expression_wrapper = '(%s)' + sql = connection.ops.combine_duration_expression(self.connector, expressions) + return expression_wrapper % sql, expression_params + + +class TemporalSubtraction(CombinedExpression): + output_field = fields.DurationField() + + def __init__(self, lhs, rhs): + super().__init__(lhs, self.SUB, rhs) + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + lhs = compiler.compile(self.lhs, connection) + rhs = compiler.compile(self.rhs, connection) + return connection.ops.subtract_temporals(self.lhs.output_field.get_internal_type(), lhs, rhs) + + +@deconstructible +class F(Combinable): + """An object capable of resolving references to existing query objects.""" + # Can the expression be used in a WHERE clause? + filterable = True + + def __init__(self, name): + """ + Arguments: + * name: the name of the field this expression references + """ + self.name = name + + def __repr__(self): + return "{}({})".format(self.__class__.__name__, self.name) + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + return query.resolve_ref(self.name, allow_joins, reuse, summarize) + + def asc(self, **kwargs): + return OrderBy(self, **kwargs) + + def desc(self, **kwargs): + return OrderBy(self, descending=True, **kwargs) + + def __eq__(self, other): + return self.__class__ == other.__class__ and self.name == other.name + + def __hash__(self): + return hash(self.name) + + +class ResolvedOuterRef(F): + """ + An object that contains a reference to an outer query. + + In this case, the reference to the outer query has been resolved because + the inner query has been used as a subquery. + """ + def as_sql(self, *args, **kwargs): + raise ValueError( + 'This queryset contains a reference to an outer query and may ' + 'only be used in a subquery.' + ) + + def _prepare(self, output_field=None): + return self + + def relabeled_clone(self, relabels): + return self + + +class OuterRef(F): + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + if isinstance(self.name, self.__class__): + return self.name + return ResolvedOuterRef(self.name) + + def _prepare(self, output_field=None): + return self + + +class Func(SQLiteNumericMixin, Expression): + """An SQL function call.""" + function = None + template = '%(function)s(%(expressions)s)' + arg_joiner = ', ' + arity = None # The number of arguments the function accepts. + + def __init__(self, *expressions, output_field=None, **extra): + if self.arity is not None and len(expressions) != self.arity: + raise TypeError( + "'%s' takes exactly %s %s (%s given)" % ( + self.__class__.__name__, + self.arity, + "argument" if self.arity == 1 else "arguments", + len(expressions), + ) + ) + super().__init__(output_field=output_field) + self.source_expressions = self._parse_expressions(*expressions) + self.extra = extra + + def __repr__(self): + args = self.arg_joiner.join(str(arg) for arg in self.source_expressions) + extra = {**self.extra, **self._get_repr_options()} + if extra: + extra = ', '.join(str(key) + '=' + str(val) for key, val in sorted(extra.items())) + return "{}({}, {})".format(self.__class__.__name__, args, extra) + return "{}({})".format(self.__class__.__name__, args) + + def _get_repr_options(self): + """Return a dict of extra __init__() options to include in the repr.""" + return {} + + def get_source_expressions(self): + return self.source_expressions + + def set_source_expressions(self, exprs): + self.source_expressions = exprs + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + c = self.copy() + c.is_summary = summarize + for pos, arg in enumerate(c.source_expressions): + c.source_expressions[pos] = arg.resolve_expression(query, allow_joins, reuse, summarize, for_save) + return c + + def as_sql(self, compiler, connection, function=None, template=None, arg_joiner=None, **extra_context): + connection.ops.check_expression_support(self) + sql_parts = [] + params = [] + for arg in self.source_expressions: + arg_sql, arg_params = compiler.compile(arg) + sql_parts.append(arg_sql) + params.extend(arg_params) + data = {**self.extra, **extra_context} + # Use the first supplied value in this order: the parameter to this + # method, a value supplied in __init__()'s **extra (the value in + # `data`), or the value defined on the class. + if function is not None: + data['function'] = function + else: + data.setdefault('function', self.function) + template = template or data.get('template', self.template) + arg_joiner = arg_joiner or data.get('arg_joiner', self.arg_joiner) + data['expressions'] = data['field'] = arg_joiner.join(sql_parts) + return template % data, params + + def copy(self): + copy = super().copy() + copy.source_expressions = self.source_expressions[:] + copy.extra = self.extra.copy() + return copy + + +class Value(Expression): + """Represent a wrapped value as a node within an expression.""" + def __init__(self, value, output_field=None): + """ + Arguments: + * value: the value this expression represents. The value will be + added into the sql parameter list and properly quoted. + + * output_field: an instance of the model field type that this + expression will return, such as IntegerField() or CharField(). + """ + super().__init__(output_field=output_field) + self.value = value + + def __repr__(self): + return "{}({})".format(self.__class__.__name__, self.value) + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + val = self.value + output_field = self._output_field_or_none + if output_field is not None: + if self.for_save: + val = output_field.get_db_prep_save(val, connection=connection) + else: + val = output_field.get_db_prep_value(val, connection=connection) + if hasattr(output_field, 'get_placeholder'): + return output_field.get_placeholder(val, compiler, connection), [val] + if val is None: + # cx_Oracle does not always convert None to the appropriate + # NULL type (like in case expressions using numbers), so we + # use a literal SQL NULL + return 'NULL', [] + return '%s', [val] + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + c = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + c.for_save = for_save + return c + + def get_group_by_cols(self): + return [] + + +class DurationValue(Value): + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + if connection.features.has_native_duration_field: + return super().as_sql(compiler, connection) + return connection.ops.date_interval_sql(self.value), [] + + +class RawSQL(Expression): + def __init__(self, sql, params, output_field=None): + if output_field is None: + output_field = fields.Field() + self.sql, self.params = sql, params + super().__init__(output_field=output_field) + + def __repr__(self): + return "{}({}, {})".format(self.__class__.__name__, self.sql, self.params) + + def as_sql(self, compiler, connection): + return '(%s)' % self.sql, self.params + + def get_group_by_cols(self): + return [self] + + def __hash__(self): + return hash((self.sql, self.output_field) + tuple(self.params)) + + +class Star(Expression): + def __repr__(self): + return "'*'" + + def as_sql(self, compiler, connection): + return '*', [] + + +class Random(Expression): + output_field = fields.FloatField() + + def __repr__(self): + return "Random()" + + def as_sql(self, compiler, connection): + return connection.ops.random_function_sql(), [] + + +class Col(Expression): + + contains_column_references = True + + def __init__(self, alias, target, output_field=None): + if output_field is None: + output_field = target + super().__init__(output_field=output_field) + self.alias, self.target = alias, target + + def __repr__(self): + return "{}({}, {})".format( + self.__class__.__name__, self.alias, self.target) + + def as_sql(self, compiler, connection): + qn = compiler.quote_name_unless_alias + return "%s.%s" % (qn(self.alias), qn(self.target.column)), [] + + def relabeled_clone(self, relabels): + return self.__class__(relabels.get(self.alias, self.alias), self.target, self.output_field) + + def get_group_by_cols(self): + return [self] + + def get_db_converters(self, connection): + if self.target == self.output_field: + return self.output_field.get_db_converters(connection) + return (self.output_field.get_db_converters(connection) + + self.target.get_db_converters(connection)) + + +class Ref(Expression): + """ + Reference to column alias of the query. For example, Ref('sum_cost') in + qs.annotate(sum_cost=Sum('cost')) query. + """ + def __init__(self, refs, source): + super().__init__() + self.refs, self.source = refs, source + + def __repr__(self): + return "{}({}, {})".format(self.__class__.__name__, self.refs, self.source) + + def get_source_expressions(self): + return [self.source] + + def set_source_expressions(self, exprs): + self.source, = exprs + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + # The sub-expression `source` has already been resolved, as this is + # just a reference to the name of `source`. + return self + + def relabeled_clone(self, relabels): + return self + + def as_sql(self, compiler, connection): + return "%s" % connection.ops.quote_name(self.refs), [] + + def get_group_by_cols(self): + return [self] + + +class ExpressionList(Func): + """ + An expression containing multiple expressions. Can be used to provide a + list of expressions as an argument to another expression, like an + ordering clause. + """ + template = '%(expressions)s' + + def __init__(self, *expressions, **extra): + if not expressions: + raise ValueError('%s requires at least one expression.' % self.__class__.__name__) + super().__init__(*expressions, **extra) + + def __str__(self): + return self.arg_joiner.join(str(arg) for arg in self.source_expressions) + + +class ExpressionWrapper(Expression): + """ + An expression that can wrap another expression so that it can provide + extra context to the inner expression, such as the output_field. + """ + + def __init__(self, expression, output_field): + super().__init__(output_field=output_field) + self.expression = expression + + def set_source_expressions(self, exprs): + self.expression = exprs[0] + + def get_source_expressions(self): + return [self.expression] + + def as_sql(self, compiler, connection): + return self.expression.as_sql(compiler, connection) + + def __repr__(self): + return "{}({})".format(self.__class__.__name__, self.expression) + + +class When(Expression): + template = 'WHEN %(condition)s THEN %(result)s' + + def __init__(self, condition=None, then=None, **lookups): + if lookups and condition is None: + condition, lookups = Q(**lookups), None + if condition is None or not getattr(condition, 'conditional', False) or lookups: + raise TypeError("__init__() takes either a Q object or lookups as keyword arguments") + if isinstance(condition, Q) and not condition: + raise ValueError("An empty Q() can't be used as a When() condition.") + super().__init__(output_field=None) + self.condition = condition + self.result = self._parse_expressions(then)[0] + + def __str__(self): + return "WHEN %r THEN %r" % (self.condition, self.result) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def get_source_expressions(self): + return [self.condition, self.result] + + def set_source_expressions(self, exprs): + self.condition, self.result = exprs + + def get_source_fields(self): + # We're only interested in the fields of the result expressions. + return [self.result._output_field_or_none] + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + c = self.copy() + c.is_summary = summarize + if hasattr(c.condition, 'resolve_expression'): + c.condition = c.condition.resolve_expression(query, allow_joins, reuse, summarize, False) + c.result = c.result.resolve_expression(query, allow_joins, reuse, summarize, for_save) + return c + + def as_sql(self, compiler, connection, template=None, **extra_context): + connection.ops.check_expression_support(self) + template_params = extra_context + sql_params = [] + condition_sql, condition_params = compiler.compile(self.condition) + template_params['condition'] = condition_sql + sql_params.extend(condition_params) + result_sql, result_params = compiler.compile(self.result) + template_params['result'] = result_sql + sql_params.extend(result_params) + template = template or self.template + return template % template_params, sql_params + + def get_group_by_cols(self): + # This is not a complete expression and cannot be used in GROUP BY. + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + +class Case(Expression): + """ + An SQL searched CASE expression: + + CASE + WHEN n > 0 + THEN 'positive' + WHEN n < 0 + THEN 'negative' + ELSE 'zero' + END + """ + template = 'CASE %(cases)s ELSE %(default)s END' + case_joiner = ' ' + + def __init__(self, *cases, default=None, output_field=None, **extra): + if not all(isinstance(case, When) for case in cases): + raise TypeError("Positional arguments must all be When objects.") + super().__init__(output_field) + self.cases = list(cases) + self.default = self._parse_expressions(default)[0] + self.extra = extra + + def __str__(self): + return "CASE %s, ELSE %r" % (', '.join(str(c) for c in self.cases), self.default) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + def get_source_expressions(self): + return self.cases + [self.default] + + def set_source_expressions(self, exprs): + self.cases = exprs[:-1] + self.default = exprs[-1] + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + c = self.copy() + c.is_summary = summarize + for pos, case in enumerate(c.cases): + c.cases[pos] = case.resolve_expression(query, allow_joins, reuse, summarize, for_save) + c.default = c.default.resolve_expression(query, allow_joins, reuse, summarize, for_save) + return c + + def copy(self): + c = super().copy() + c.cases = c.cases[:] + return c + + def as_sql(self, compiler, connection, template=None, case_joiner=None, **extra_context): + connection.ops.check_expression_support(self) + if not self.cases: + return compiler.compile(self.default) + template_params = {**self.extra, **extra_context} + case_parts = [] + sql_params = [] + for case in self.cases: + try: + case_sql, case_params = compiler.compile(case) + except EmptyResultSet: + continue + case_parts.append(case_sql) + sql_params.extend(case_params) + default_sql, default_params = compiler.compile(self.default) + if not case_parts: + return default_sql, default_params + case_joiner = case_joiner or self.case_joiner + template_params['cases'] = case_joiner.join(case_parts) + template_params['default'] = default_sql + sql_params.extend(default_params) + template = template or template_params.get('template', self.template) + sql = template % template_params + if self._output_field_or_none is not None: + sql = connection.ops.unification_cast_sql(self.output_field) % sql + return sql, sql_params + + +class Subquery(Expression): + """ + An explicit subquery. It may contain OuterRef() references to the outer + query which will be resolved when it is applied to that query. + """ + template = '(%(subquery)s)' + + def __init__(self, queryset, output_field=None, **extra): + self.queryset = queryset + self.extra = extra + super().__init__(output_field) + + def _resolve_output_field(self): + if len(self.queryset.query.select) == 1: + return self.queryset.query.select[0].field + return super()._resolve_output_field() + + def copy(self): + clone = super().copy() + clone.queryset = clone.queryset.all() + return clone + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + clone = self.copy() + clone.is_summary = summarize + clone.queryset.query.bump_prefix(query) + + # Need to recursively resolve these. + def resolve_all(child): + if hasattr(child, 'children'): + [resolve_all(_child) for _child in child.children] + if hasattr(child, 'rhs'): + child.rhs = resolve(child.rhs) + + def resolve(child): + if hasattr(child, 'resolve_expression'): + resolved = child.resolve_expression( + query=query, allow_joins=allow_joins, reuse=reuse, + summarize=summarize, for_save=for_save, + ) + # Add table alias to the parent query's aliases to prevent + # quoting. + if hasattr(resolved, 'alias') and resolved.alias != resolved.target.model._meta.db_table: + clone.queryset.query.external_aliases.add(resolved.alias) + return resolved + return child + + resolve_all(clone.queryset.query.where) + + for key, value in clone.queryset.query.annotations.items(): + if isinstance(value, Subquery): + clone.queryset.query.annotations[key] = resolve(value) + + return clone + + def get_source_expressions(self): + return [ + x for x in [ + getattr(expr, 'lhs', None) + for expr in self.queryset.query.where.children + ] if x + ] + + def relabeled_clone(self, change_map): + clone = self.copy() + clone.queryset.query = clone.queryset.query.relabeled_clone(change_map) + clone.queryset.query.external_aliases.update( + alias for alias in change_map.values() + if alias not in clone.queryset.query.alias_map + ) + return clone + + def as_sql(self, compiler, connection, template=None, **extra_context): + connection.ops.check_expression_support(self) + template_params = {**self.extra, **extra_context} + template_params['subquery'], sql_params = self.queryset.query.get_compiler(connection=connection).as_sql() + + template = template or template_params.get('template', self.template) + sql = template % template_params + return sql, sql_params + + def _prepare(self, output_field): + # This method will only be called if this instance is the "rhs" in an + # expression: the wrapping () must be removed (as the expression that + # contains this will provide them). SQLite evaluates ((subquery)) + # differently than the other databases. + if self.template == '(%(subquery)s)': + clone = self.copy() + clone.template = '%(subquery)s' + return clone + return self + + +class Exists(Subquery): + template = 'EXISTS(%(subquery)s)' + output_field = fields.BooleanField() + + def __init__(self, *args, negated=False, **kwargs): + self.negated = negated + super().__init__(*args, **kwargs) + + def __invert__(self): + return type(self)(self.queryset, negated=(not self.negated), **self.extra) + + def resolve_expression(self, query=None, *args, **kwargs): + # As a performance optimization, remove ordering since EXISTS doesn't + # care about it, just whether or not a row matches. + self.queryset = self.queryset.order_by() + return super().resolve_expression(query, *args, **kwargs) + + def as_sql(self, compiler, connection, template=None, **extra_context): + sql, params = super().as_sql(compiler, connection, template, **extra_context) + if self.negated: + sql = 'NOT {}'.format(sql) + return sql, params + + def as_oracle(self, compiler, connection, template=None, **extra_context): + # Oracle doesn't allow EXISTS() in the SELECT list, so wrap it with a + # CASE WHEN expression. Change the template since the When expression + # requires a left hand side (column) to compare against. + sql, params = self.as_sql(compiler, connection, template, **extra_context) + sql = 'CASE WHEN {} THEN 1 ELSE 0 END'.format(sql) + return sql, params + + +class OrderBy(BaseExpression): + template = '%(expression)s %(ordering)s' + + def __init__(self, expression, descending=False, nulls_first=False, nulls_last=False): + if nulls_first and nulls_last: + raise ValueError('nulls_first and nulls_last are mutually exclusive') + self.nulls_first = nulls_first + self.nulls_last = nulls_last + self.descending = descending + if not hasattr(expression, 'resolve_expression'): + raise ValueError('expression must be an expression type') + self.expression = expression + + def __repr__(self): + return "{}({}, descending={})".format( + self.__class__.__name__, self.expression, self.descending) + + def set_source_expressions(self, exprs): + self.expression = exprs[0] + + def get_source_expressions(self): + return [self.expression] + + def as_sql(self, compiler, connection, template=None, **extra_context): + if not template: + if self.nulls_last: + template = '%s NULLS LAST' % self.template + elif self.nulls_first: + template = '%s NULLS FIRST' % self.template + connection.ops.check_expression_support(self) + expression_sql, params = compiler.compile(self.expression) + placeholders = { + 'expression': expression_sql, + 'ordering': 'DESC' if self.descending else 'ASC', + **extra_context, + } + template = template or self.template + params *= template.count('%(expression)s') + return (template % placeholders).rstrip(), params + + def as_sqlite(self, compiler, connection): + template = None + if self.nulls_last: + template = '%(expression)s IS NULL, %(expression)s %(ordering)s' + elif self.nulls_first: + template = '%(expression)s IS NOT NULL, %(expression)s %(ordering)s' + return self.as_sql(compiler, connection, template=template) + + def as_mysql(self, compiler, connection): + template = None + if self.nulls_last: + template = 'IF(ISNULL(%(expression)s),1,0), %(expression)s %(ordering)s ' + elif self.nulls_first: + template = 'IF(ISNULL(%(expression)s),0,1), %(expression)s %(ordering)s ' + return self.as_sql(compiler, connection, template=template) + + def get_group_by_cols(self): + cols = [] + for source in self.get_source_expressions(): + cols.extend(source.get_group_by_cols()) + return cols + + def reverse_ordering(self): + self.descending = not self.descending + if self.nulls_first or self.nulls_last: + self.nulls_first = not self.nulls_first + self.nulls_last = not self.nulls_last + return self + + def asc(self): + self.descending = False + + def desc(self): + self.descending = True + + +class Window(Expression): + template = '%(expression)s OVER (%(window)s)' + # Although the main expression may either be an aggregate or an + # expression with an aggregate function, the GROUP BY that will + # be introduced in the query as a result is not desired. + contains_aggregate = False + contains_over_clause = True + filterable = False + + def __init__(self, expression, partition_by=None, order_by=None, frame=None, output_field=None): + self.partition_by = partition_by + self.order_by = order_by + self.frame = frame + + if not getattr(expression, 'window_compatible', False): + raise ValueError( + "Expression '%s' isn't compatible with OVER clauses." % + expression.__class__.__name__ + ) + + if self.partition_by is not None: + if not isinstance(self.partition_by, (tuple, list)): + self.partition_by = (self.partition_by,) + self.partition_by = ExpressionList(*self.partition_by) + + if self.order_by is not None: + if isinstance(self.order_by, (list, tuple)): + self.order_by = ExpressionList(*self.order_by) + elif not isinstance(self.order_by, BaseExpression): + raise ValueError( + 'order_by must be either an Expression or a sequence of ' + 'expressions.' + ) + super().__init__(output_field=output_field) + self.source_expression = self._parse_expressions(expression)[0] + + def _resolve_output_field(self): + return self.source_expression.output_field + + def get_source_expressions(self): + return [self.source_expression, self.partition_by, self.order_by, self.frame] + + def set_source_expressions(self, exprs): + self.source_expression, self.partition_by, self.order_by, self.frame = exprs + + def as_sql(self, compiler, connection, function=None, template=None): + connection.ops.check_expression_support(self) + expr_sql, params = compiler.compile(self.source_expression) + window_sql, window_params = [], [] + + if self.partition_by is not None: + sql_expr, sql_params = self.partition_by.as_sql( + compiler=compiler, connection=connection, + template='PARTITION BY %(expressions)s', + ) + window_sql.extend(sql_expr) + window_params.extend(sql_params) + + if self.order_by is not None: + window_sql.append(' ORDER BY ') + order_sql, order_params = compiler.compile(self.order_by) + window_sql.extend(''.join(order_sql)) + window_params.extend(order_params) + + if self.frame: + frame_sql, frame_params = compiler.compile(self.frame) + window_sql.extend(' ' + frame_sql) + window_params.extend(frame_params) + + params.extend(window_params) + template = template or self.template + + return template % { + 'expression': expr_sql, + 'window': ''.join(window_sql).strip() + }, params + + def __str__(self): + return '{} OVER ({}{}{})'.format( + str(self.source_expression), + 'PARTITION BY ' + str(self.partition_by) if self.partition_by else '', + 'ORDER BY ' + str(self.order_by) if self.order_by else '', + str(self.frame or ''), + ) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self) + + def get_group_by_cols(self): + return [] + + +class WindowFrame(Expression): + """ + Model the frame clause in window expressions. There are two types of frame + clauses which are subclasses, however, all processing and validation (by no + means intended to be complete) is done here. Thus, providing an end for a + frame is optional (the default is UNBOUNDED FOLLOWING, which is the last + row in the frame). + """ + template = '%(frame_type)s BETWEEN %(start)s AND %(end)s' + + def __init__(self, start=None, end=None): + self.start = start + self.end = end + + def set_source_expressions(self, exprs): + self.start, self.end = exprs + + def get_source_expressions(self): + return [Value(self.start), Value(self.end)] + + def as_sql(self, compiler, connection): + connection.ops.check_expression_support(self) + start, end = self.window_frame_start_end(connection, self.start.value, self.end.value) + return self.template % { + 'frame_type': self.frame_type, + 'start': start, + 'end': end, + }, [] + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self) + + def get_group_by_cols(self): + return [] + + def __str__(self): + if self.start is not None and self.start < 0: + start = '%d %s' % (abs(self.start), connection.ops.PRECEDING) + elif self.start is not None and self.start == 0: + start = connection.ops.CURRENT_ROW + else: + start = connection.ops.UNBOUNDED_PRECEDING + + if self.end is not None and self.end > 0: + end = '%d %s' % (self.end, connection.ops.FOLLOWING) + elif self.end is not None and self.end == 0: + end = connection.ops.CURRENT_ROW + else: + end = connection.ops.UNBOUNDED_FOLLOWING + return self.template % { + 'frame_type': self.frame_type, + 'start': start, + 'end': end, + } + + def window_frame_start_end(self, connection, start, end): + raise NotImplementedError('Subclasses must implement window_frame_start_end().') + + +class RowRange(WindowFrame): + frame_type = 'ROWS' + + def window_frame_start_end(self, connection, start, end): + return connection.ops.window_frame_rows_start_end(start, end) + + +class ValueRange(WindowFrame): + frame_type = 'RANGE' + + def window_frame_start_end(self, connection, start, end): + return connection.ops.window_frame_range_start_end(start, end) diff --git a/env/lib/python3.5/site-packages/django/db/models/fields/__init__.py b/env/lib/python3.5/site-packages/django/db/models/fields/__init__.py new file mode 100644 index 0000000..50d22be --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/fields/__init__.py @@ -0,0 +1,2338 @@ +import collections.abc +import copy +import datetime +import decimal +import operator +import uuid +import warnings +from base64 import b64decode, b64encode +from functools import partialmethod, total_ordering + +from django import forms +from django.apps import apps +from django.conf import settings +from django.core import checks, exceptions, validators +# When the _meta object was formalized, this exception was moved to +# django.core.exceptions. It is retained here for backwards compatibility +# purposes. +from django.core.exceptions import FieldDoesNotExist # NOQA +from django.db import connection, connections, router +from django.db.models.constants import LOOKUP_SEP +from django.db.models.query_utils import DeferredAttribute, RegisterLookupMixin +from django.utils import timezone +from django.utils.datastructures import DictWrapper +from django.utils.dateparse import ( + parse_date, parse_datetime, parse_duration, parse_time, +) +from django.utils.duration import duration_microseconds, duration_string +from django.utils.encoding import force_bytes, smart_text +from django.utils.functional import Promise, cached_property +from django.utils.ipv6 import clean_ipv6_address +from django.utils.itercompat import is_iterable +from django.utils.text import capfirst +from django.utils.translation import gettext_lazy as _ + +__all__ = [ + 'AutoField', 'BLANK_CHOICE_DASH', 'BigAutoField', 'BigIntegerField', + 'BinaryField', 'BooleanField', 'CharField', 'CommaSeparatedIntegerField', + 'DateField', 'DateTimeField', 'DecimalField', 'DurationField', + 'EmailField', 'Empty', 'Field', 'FieldDoesNotExist', 'FilePathField', + 'FloatField', 'GenericIPAddressField', 'IPAddressField', 'IntegerField', + 'NOT_PROVIDED', 'NullBooleanField', 'PositiveIntegerField', + 'PositiveSmallIntegerField', 'SlugField', 'SmallIntegerField', 'TextField', + 'TimeField', 'URLField', 'UUIDField', +] + + +class Empty: + pass + + +class NOT_PROVIDED: + pass + + +# The values to use for "blank" in SelectFields. Will be appended to the start +# of most "choices" lists. +BLANK_CHOICE_DASH = [("", "---------")] + + +def _load_field(app_label, model_name, field_name): + return apps.get_model(app_label, model_name)._meta.get_field(field_name) + + +# A guide to Field parameters: +# +# * name: The name of the field specified in the model. +# * attname: The attribute to use on the model object. This is the same as +# "name", except in the case of ForeignKeys, where "_id" is +# appended. +# * db_column: The db_column specified in the model (or None). +# * column: The database column for this field. This is the same as +# "attname", except if db_column is specified. +# +# Code that introspects values, or does other dynamic things, should use +# attname. For example, this gets the primary key value of object "obj": +# +# getattr(obj, opts.pk.attname) + +def _empty(of_cls): + new = Empty() + new.__class__ = of_cls + return new + + +def return_None(): + return None + + +@total_ordering +class Field(RegisterLookupMixin): + """Base class for all field types""" + + # Designates whether empty strings fundamentally are allowed at the + # database level. + empty_strings_allowed = True + empty_values = list(validators.EMPTY_VALUES) + + # These track each time a Field instance is created. Used to retain order. + # The auto_creation_counter is used for fields that Django implicitly + # creates, creation_counter is used for all user-specified fields. + creation_counter = 0 + auto_creation_counter = -1 + default_validators = [] # Default set of validators + default_error_messages = { + 'invalid_choice': _('Value %(value)r is not a valid choice.'), + 'null': _('This field cannot be null.'), + 'blank': _('This field cannot be blank.'), + 'unique': _('%(model_name)s with this %(field_label)s ' + 'already exists.'), + # Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. + # Eg: "Title must be unique for pub_date year" + 'unique_for_date': _("%(field_label)s must be unique for " + "%(date_field_label)s %(lookup_type)s."), + } + system_check_deprecated_details = None + system_check_removed_details = None + + # Field flags + hidden = False + + many_to_many = None + many_to_one = None + one_to_many = None + one_to_one = None + related_model = None + + # Generic field type description, usually overridden by subclasses + def _description(self): + return _('Field of type: %(field_type)s') % { + 'field_type': self.__class__.__name__ + } + description = property(_description) + + def __init__(self, verbose_name=None, name=None, primary_key=False, + max_length=None, unique=False, blank=False, null=False, + db_index=False, rel=None, default=NOT_PROVIDED, editable=True, + serialize=True, unique_for_date=None, unique_for_month=None, + unique_for_year=None, choices=None, help_text='', db_column=None, + db_tablespace=None, auto_created=False, validators=(), + error_messages=None): + self.name = name + self.verbose_name = verbose_name # May be set by set_attributes_from_name + self._verbose_name = verbose_name # Store original for deconstruction + self.primary_key = primary_key + self.max_length, self._unique = max_length, unique + self.blank, self.null = blank, null + self.remote_field = rel + self.is_relation = self.remote_field is not None + self.default = default + self.editable = editable + self.serialize = serialize + self.unique_for_date = unique_for_date + self.unique_for_month = unique_for_month + self.unique_for_year = unique_for_year + if isinstance(choices, collections.abc.Iterator): + choices = list(choices) + self.choices = choices or [] + self.help_text = help_text + self.db_index = db_index + self.db_column = db_column + self._db_tablespace = db_tablespace + self.auto_created = auto_created + + # Adjust the appropriate creation counter, and save our local copy. + if auto_created: + self.creation_counter = Field.auto_creation_counter + Field.auto_creation_counter -= 1 + else: + self.creation_counter = Field.creation_counter + Field.creation_counter += 1 + + self._validators = list(validators) # Store for deconstruction later + + messages = {} + for c in reversed(self.__class__.__mro__): + messages.update(getattr(c, 'default_error_messages', {})) + messages.update(error_messages or {}) + self._error_messages = error_messages # Store for deconstruction later + self.error_messages = messages + + def __str__(self): + """ + Return "app_label.model_label.field_name" for fields attached to + models. + """ + if not hasattr(self, 'model'): + return super().__str__() + model = self.model + app = model._meta.app_label + return '%s.%s.%s' % (app, model._meta.object_name, self.name) + + def __repr__(self): + """Display the module, class, and name of the field.""" + path = '%s.%s' % (self.__class__.__module__, self.__class__.__qualname__) + name = getattr(self, 'name', None) + if name is not None: + return '<%s: %s>' % (path, name) + return '<%s>' % path + + def check(self, **kwargs): + return [ + *self._check_field_name(), + *self._check_choices(), + *self._check_db_index(), + *self._check_null_allowed_for_primary_keys(), + *self._check_backend_specific_checks(**kwargs), + *self._check_validators(), + *self._check_deprecation_details(), + ] + + def _check_field_name(self): + """ + Check if field name is valid, i.e. 1) does not end with an + underscore, 2) does not contain "__" and 3) is not "pk". + """ + if self.name.endswith('_'): + return [ + checks.Error( + 'Field names must not end with an underscore.', + obj=self, + id='fields.E001', + ) + ] + elif LOOKUP_SEP in self.name: + return [ + checks.Error( + 'Field names must not contain "%s".' % (LOOKUP_SEP,), + obj=self, + id='fields.E002', + ) + ] + elif self.name == 'pk': + return [ + checks.Error( + "'pk' is a reserved word that cannot be used as a field name.", + obj=self, + id='fields.E003', + ) + ] + else: + return [] + + def _check_choices(self): + if not self.choices: + return [] + + def is_value(value, accept_promise=True): + return isinstance(value, (str, Promise) if accept_promise else str) or not is_iterable(value) + + if is_value(self.choices, accept_promise=False): + return [ + checks.Error( + "'choices' must be an iterable (e.g., a list or tuple).", + obj=self, + id='fields.E004', + ) + ] + + # Expect [group_name, [value, display]] + for choices_group in self.choices: + try: + group_name, group_choices = choices_group + except ValueError: + # Containing non-pairs + break + try: + if not all( + is_value(value) and is_value(human_name) + for value, human_name in group_choices + ): + break + except (TypeError, ValueError): + # No groups, choices in the form [value, display] + value, human_name = group_name, group_choices + if not is_value(value) or not is_value(human_name): + break + + # Special case: choices=['ab'] + if isinstance(choices_group, str): + break + else: + return [] + + return [ + checks.Error( + "'choices' must be an iterable containing " + "(actual value, human readable name) tuples.", + obj=self, + id='fields.E005', + ) + ] + + def _check_db_index(self): + if self.db_index not in (None, True, False): + return [ + checks.Error( + "'db_index' must be None, True or False.", + obj=self, + id='fields.E006', + ) + ] + else: + return [] + + def _check_null_allowed_for_primary_keys(self): + if (self.primary_key and self.null and + not connection.features.interprets_empty_strings_as_nulls): + # We cannot reliably check this for backends like Oracle which + # consider NULL and '' to be equal (and thus set up + # character-based fields a little differently). + return [ + checks.Error( + 'Primary keys must not have null=True.', + hint=('Set null=False on the field, or ' + 'remove primary_key=True argument.'), + obj=self, + id='fields.E007', + ) + ] + else: + return [] + + def _check_backend_specific_checks(self, **kwargs): + app_label = self.model._meta.app_label + for db in connections: + if router.allow_migrate(db, app_label, model_name=self.model._meta.model_name): + return connections[db].validation.check_field(self, **kwargs) + return [] + + def _check_validators(self): + errors = [] + for i, validator in enumerate(self.validators): + if not callable(validator): + errors.append( + checks.Error( + "All 'validators' must be callable.", + hint=( + "validators[{i}] ({repr}) isn't a function or " + "instance of a validator class.".format( + i=i, repr=repr(validator), + ) + ), + obj=self, + id='fields.E008', + ) + ) + return errors + + def _check_deprecation_details(self): + if self.system_check_removed_details is not None: + return [ + checks.Error( + self.system_check_removed_details.get( + 'msg', + '%s has been removed except for support in historical ' + 'migrations.' % self.__class__.__name__ + ), + hint=self.system_check_removed_details.get('hint'), + obj=self, + id=self.system_check_removed_details.get('id', 'fields.EXXX'), + ) + ] + elif self.system_check_deprecated_details is not None: + return [ + checks.Warning( + self.system_check_deprecated_details.get( + 'msg', + '%s has been deprecated.' % self.__class__.__name__ + ), + hint=self.system_check_deprecated_details.get('hint'), + obj=self, + id=self.system_check_deprecated_details.get('id', 'fields.WXXX'), + ) + ] + return [] + + def get_col(self, alias, output_field=None): + if output_field is None: + output_field = self + if alias != self.model._meta.db_table or output_field != self: + from django.db.models.expressions import Col + return Col(alias, self, output_field) + else: + return self.cached_col + + @cached_property + def cached_col(self): + from django.db.models.expressions import Col + return Col(self.model._meta.db_table, self) + + def select_format(self, compiler, sql, params): + """ + Custom format for select clauses. For example, GIS columns need to be + selected as AsText(table.col) on MySQL as the table.col data can't be + used by Django. + """ + return sql, params + + def deconstruct(self): + """ + Return enough information to recreate the field as a 4-tuple: + + * The name of the field on the model, if contribute_to_class() has + been run. + * The import path of the field, including the class:e.g. + django.db.models.IntegerField This should be the most portable + version, so less specific may be better. + * A list of positional arguments. + * A dict of keyword arguments. + + Note that the positional or keyword arguments must contain values of + the following types (including inner values of collection types): + + * None, bool, str, int, float, complex, set, frozenset, list, tuple, + dict + * UUID + * datetime.datetime (naive), datetime.date + * top-level classes, top-level functions - will be referenced by their + full import path + * Storage instances - these have their own deconstruct() method + + This is because the values here must be serialized into a text format + (possibly new Python code, possibly JSON) and these are the only types + with encoding handlers defined. + + There's no need to return the exact way the field was instantiated this + time, just ensure that the resulting field is the same - prefer keyword + arguments over positional ones, and omit parameters with their default + values. + """ + # Short-form way of fetching all the default parameters + keywords = {} + possibles = { + "verbose_name": None, + "primary_key": False, + "max_length": None, + "unique": False, + "blank": False, + "null": False, + "db_index": False, + "default": NOT_PROVIDED, + "editable": True, + "serialize": True, + "unique_for_date": None, + "unique_for_month": None, + "unique_for_year": None, + "choices": [], + "help_text": '', + "db_column": None, + "db_tablespace": None, + "auto_created": False, + "validators": [], + "error_messages": None, + } + attr_overrides = { + "unique": "_unique", + "error_messages": "_error_messages", + "validators": "_validators", + "verbose_name": "_verbose_name", + "db_tablespace": "_db_tablespace", + } + equals_comparison = {"choices", "validators"} + for name, default in possibles.items(): + value = getattr(self, attr_overrides.get(name, name)) + # Unroll anything iterable for choices into a concrete list + if name == "choices" and isinstance(value, collections.abc.Iterable): + value = list(value) + # Do correct kind of comparison + if name in equals_comparison: + if value != default: + keywords[name] = value + else: + if value is not default: + keywords[name] = value + # Work out path - we shorten it for known Django core fields + path = "%s.%s" % (self.__class__.__module__, self.__class__.__qualname__) + if path.startswith("django.db.models.fields.related"): + path = path.replace("django.db.models.fields.related", "django.db.models") + if path.startswith("django.db.models.fields.files"): + path = path.replace("django.db.models.fields.files", "django.db.models") + if path.startswith("django.db.models.fields.proxy"): + path = path.replace("django.db.models.fields.proxy", "django.db.models") + if path.startswith("django.db.models.fields"): + path = path.replace("django.db.models.fields", "django.db.models") + # Return basic info - other fields should override this. + return (self.name, path, [], keywords) + + def clone(self): + """ + Uses deconstruct() to clone a new copy of this Field. + Will not preserve any class attachments/attribute names. + """ + name, path, args, kwargs = self.deconstruct() + return self.__class__(*args, **kwargs) + + def __eq__(self, other): + # Needed for @total_ordering + if isinstance(other, Field): + return self.creation_counter == other.creation_counter + return NotImplemented + + def __lt__(self, other): + # This is needed because bisect does not take a comparison function. + if isinstance(other, Field): + return self.creation_counter < other.creation_counter + return NotImplemented + + def __hash__(self): + return hash(self.creation_counter) + + def __deepcopy__(self, memodict): + # We don't have to deepcopy very much here, since most things are not + # intended to be altered after initial creation. + obj = copy.copy(self) + if self.remote_field: + obj.remote_field = copy.copy(self.remote_field) + if hasattr(self.remote_field, 'field') and self.remote_field.field is self: + obj.remote_field.field = obj + memodict[id(self)] = obj + return obj + + def __copy__(self): + # We need to avoid hitting __reduce__, so define this + # slightly weird copy construct. + obj = Empty() + obj.__class__ = self.__class__ + obj.__dict__ = self.__dict__.copy() + return obj + + def __reduce__(self): + """ + Pickling should return the model._meta.fields instance of the field, + not a new copy of that field. So, use the app registry to load the + model and then the field back. + """ + if not hasattr(self, 'model'): + # Fields are sometimes used without attaching them to models (for + # example in aggregation). In this case give back a plain field + # instance. The code below will create a new empty instance of + # class self.__class__, then update its dict with self.__dict__ + # values - so, this is very close to normal pickle. + state = self.__dict__.copy() + # The _get_default cached_property can't be pickled due to lambda + # usage. + state.pop('_get_default', None) + return _empty, (self.__class__,), state + return _load_field, (self.model._meta.app_label, self.model._meta.object_name, + self.name) + + def get_pk_value_on_save(self, instance): + """ + Hook to generate new PK values on save. This method is called when + saving instances with no primary key value set. If this method returns + something else than None, then the returned value is used when saving + the new instance. + """ + if self.default: + return self.get_default() + return None + + def to_python(self, value): + """ + Convert the input value into the expected Python data type, raising + django.core.exceptions.ValidationError if the data can't be converted. + Return the converted value. Subclasses should override this. + """ + return value + + @cached_property + def validators(self): + """ + Some validators can't be created at field initialization time. + This method provides a way to delay their creation until required. + """ + return [*self.default_validators, *self._validators] + + def run_validators(self, value): + if value in self.empty_values: + return + + errors = [] + for v in self.validators: + try: + v(value) + except exceptions.ValidationError as e: + if hasattr(e, 'code') and e.code in self.error_messages: + e.message = self.error_messages[e.code] + errors.extend(e.error_list) + + if errors: + raise exceptions.ValidationError(errors) + + def validate(self, value, model_instance): + """ + Validate value and raise ValidationError if necessary. Subclasses + should override this to provide validation logic. + """ + if not self.editable: + # Skip validation for non-editable fields. + return + + if self.choices and value not in self.empty_values: + for option_key, option_value in self.choices: + if isinstance(option_value, (list, tuple)): + # This is an optgroup, so look inside the group for + # options. + for optgroup_key, optgroup_value in option_value: + if value == optgroup_key: + return + elif value == option_key: + return + raise exceptions.ValidationError( + self.error_messages['invalid_choice'], + code='invalid_choice', + params={'value': value}, + ) + + if value is None and not self.null: + raise exceptions.ValidationError(self.error_messages['null'], code='null') + + if not self.blank and value in self.empty_values: + raise exceptions.ValidationError(self.error_messages['blank'], code='blank') + + def clean(self, value, model_instance): + """ + Convert the value's type and run validation. Validation errors + from to_python() and validate() are propagated. Return the correct + value if no error is raised. + """ + value = self.to_python(value) + self.validate(value, model_instance) + self.run_validators(value) + return value + + def db_type_parameters(self, connection): + return DictWrapper(self.__dict__, connection.ops.quote_name, 'qn_') + + def db_check(self, connection): + """ + Return the database column check constraint for this field, for the + provided connection. Works the same way as db_type() for the case that + get_internal_type() does not map to a preexisting model field. + """ + data = self.db_type_parameters(connection) + try: + return connection.data_type_check_constraints[self.get_internal_type()] % data + except KeyError: + return None + + def db_type(self, connection): + """ + Return the database column data type for this field, for the provided + connection. + """ + # The default implementation of this method looks at the + # backend-specific data_types dictionary, looking up the field by its + # "internal type". + # + # A Field class can implement the get_internal_type() method to specify + # which *preexisting* Django Field class it's most similar to -- i.e., + # a custom field might be represented by a TEXT column type, which is + # the same as the TextField Django field type, which means the custom + # field's get_internal_type() returns 'TextField'. + # + # But the limitation of the get_internal_type() / data_types approach + # is that it cannot handle database column types that aren't already + # mapped to one of the built-in Django field types. In this case, you + # can implement db_type() instead of get_internal_type() to specify + # exactly which wacky database column type you want to use. + data = self.db_type_parameters(connection) + try: + return connection.data_types[self.get_internal_type()] % data + except KeyError: + return None + + def rel_db_type(self, connection): + """ + Return the data type that a related field pointing to this field should + use. For example, this method is called by ForeignKey and OneToOneField + to determine its data type. + """ + return self.db_type(connection) + + def cast_db_type(self, connection): + """Return the data type to use in the Cast() function.""" + db_type = connection.ops.cast_data_types.get(self.get_internal_type()) + if db_type: + return db_type % self.db_type_parameters(connection) + return self.db_type(connection) + + def db_parameters(self, connection): + """ + Extension of db_type(), providing a range of different return values + (type, checks). This will look at db_type(), allowing custom model + fields to override it. + """ + type_string = self.db_type(connection) + check_string = self.db_check(connection) + return { + "type": type_string, + "check": check_string, + } + + def db_type_suffix(self, connection): + return connection.data_types_suffix.get(self.get_internal_type()) + + def get_db_converters(self, connection): + if hasattr(self, 'from_db_value'): + return [self.from_db_value] + return [] + + @property + def unique(self): + return self._unique or self.primary_key + + @property + def db_tablespace(self): + return self._db_tablespace or settings.DEFAULT_INDEX_TABLESPACE + + def set_attributes_from_name(self, name): + self.name = self.name or name + self.attname, self.column = self.get_attname_column() + self.concrete = self.column is not None + if self.verbose_name is None and self.name: + self.verbose_name = self.name.replace('_', ' ') + + def contribute_to_class(self, cls, name, private_only=False): + """ + Register the field with the model class it belongs to. + + If private_only is True, create a separate instance of this field + for every subclass of cls, even if cls is not an abstract model. + """ + self.set_attributes_from_name(name) + self.model = cls + if private_only: + cls._meta.add_field(self, private=True) + else: + cls._meta.add_field(self) + if self.column: + # Don't override classmethods with the descriptor. This means that + # if you have a classmethod and a field with the same name, then + # such fields can't be deferred (we don't have a check for this). + if not getattr(cls, self.attname, None): + setattr(cls, self.attname, DeferredAttribute(self.attname)) + if self.choices: + setattr(cls, 'get_%s_display' % self.name, + partialmethod(cls._get_FIELD_display, field=self)) + + def get_filter_kwargs_for_object(self, obj): + """ + Return a dict that when passed as kwargs to self.model.filter(), would + yield all instances having the same value for this field as obj has. + """ + return {self.name: getattr(obj, self.attname)} + + def get_attname(self): + return self.name + + def get_attname_column(self): + attname = self.get_attname() + column = self.db_column or attname + return attname, column + + def get_internal_type(self): + return self.__class__.__name__ + + def pre_save(self, model_instance, add): + """Return field's value just before saving.""" + return getattr(model_instance, self.attname) + + def get_prep_value(self, value): + """Perform preliminary non-db specific value checks and conversions.""" + if isinstance(value, Promise): + value = value._proxy____cast() + return value + + def get_db_prep_value(self, value, connection, prepared=False): + """ + Return field's value prepared for interacting with the database backend. + + Used by the default implementations of get_db_prep_save(). + """ + if not prepared: + value = self.get_prep_value(value) + return value + + def get_db_prep_save(self, value, connection): + """Return field's value prepared for saving into a database.""" + return self.get_db_prep_value(value, connection=connection, prepared=False) + + def has_default(self): + """Return a boolean of whether this field has a default value.""" + return self.default is not NOT_PROVIDED + + def get_default(self): + """Return the default value for this field.""" + return self._get_default() + + @cached_property + def _get_default(self): + if self.has_default(): + if callable(self.default): + return self.default + return lambda: self.default + + if not self.empty_strings_allowed or self.null and not connection.features.interprets_empty_strings_as_nulls: + return return_None + return str # return empty string + + def get_choices(self, include_blank=True, blank_choice=BLANK_CHOICE_DASH, limit_choices_to=None): + """ + Return choices with a default blank choices included, for use + as choices for this field. + + Analog of django.db.models.fields.Field.get_choices(), provided + initially for utilization by RelatedFieldListFilter. + """ + return (blank_choice if include_blank else []) + [ + (x.pk, str(x)) for x in self.related_model._default_manager.all() + ] + + def is_hidden(self): + """Should the related object be hidden?""" + return bool(self.related_name) and self.related_name[-1] == '+' + + def get_joining_columns(self): + return self.field.get_reverse_joining_columns() + + def get_extra_restriction(self, where_class, alias, related_alias): + return self.field.get_extra_restriction(where_class, related_alias, alias) + + def set_field_name(self): + """ + Set the related field's name, this is not available until later stages + of app loading, so set_field_name is called from + set_attributes_from_rel() + """ + # By default foreign object doesn't relate to any remote field (for + # example custom multicolumn joins currently have no remote field). + self.field_name = None + + def get_accessor_name(self, model=None): + # This method encapsulates the logic that decides what name to give an + # accessor descriptor that retrieves related many-to-one or + # many-to-many objects. It uses the lower-cased object_name + "_set", + # but this can be overridden with the "related_name" option. + # Due to backwards compatibility ModelForms need to be able to provide + # an alternate model. See BaseInlineFormSet.get_default_prefix(). + opts = model._meta if model else self.related_model._meta + model = model or self.related_model + if self.multiple: + # If this is a symmetrical m2m relation on self, there is no reverse accessor. + if self.symmetrical and model == self.model: + return None + if self.related_name: + return self.related_name + return opts.model_name + ('_set' if self.multiple else '') + + def get_path_info(self, filtered_relation=None): + return self.field.get_reverse_path_info(filtered_relation) + + def get_cache_name(self): + """ + Return the name of the cache key to use for storing an instance of the + forward model on the reverse model. + """ + return self.get_accessor_name() + + +class ManyToOneRel(ForeignObjectRel): + """ + Used by the ForeignKey field to store information about the relation. + + ``_meta.get_fields()`` returns this class to provide access to the field + flags for the reverse relation. + + Note: Because we somewhat abuse the Rel objects by using them as reverse + fields we get the funny situation where + ``ManyToOneRel.many_to_one == False`` and + ``ManyToOneRel.one_to_many == True``. This is unfortunate but the actual + ManyToOneRel class is a private API and there is work underway to turn + reverse relations into actual fields. + """ + + def __init__(self, field, to, field_name, related_name=None, related_query_name=None, + limit_choices_to=None, parent_link=False, on_delete=None): + super().__init__( + field, to, + related_name=related_name, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + parent_link=parent_link, + on_delete=on_delete, + ) + + self.field_name = field_name + + def __getstate__(self): + state = self.__dict__.copy() + state.pop('related_model', None) + return state + + def get_related_field(self): + """ + Return the Field in the 'to' object to which this relationship is tied. + """ + field = self.model._meta.get_field(self.field_name) + if not field.concrete: + raise exceptions.FieldDoesNotExist("No related field named '%s'" % self.field_name) + return field + + def set_field_name(self): + self.field_name = self.field_name or self.model._meta.pk.name + + +class OneToOneRel(ManyToOneRel): + """ + Used by OneToOneField to store information about the relation. + + ``_meta.get_fields()`` returns this class to provide access to the field + flags for the reverse relation. + """ + + def __init__(self, field, to, field_name, related_name=None, related_query_name=None, + limit_choices_to=None, parent_link=False, on_delete=None): + super().__init__( + field, to, field_name, + related_name=related_name, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + parent_link=parent_link, + on_delete=on_delete, + ) + + self.multiple = False + + +class ManyToManyRel(ForeignObjectRel): + """ + Used by ManyToManyField to store information about the relation. + + ``_meta.get_fields()`` returns this class to provide access to the field + flags for the reverse relation. + """ + + def __init__(self, field, to, related_name=None, related_query_name=None, + limit_choices_to=None, symmetrical=True, through=None, + through_fields=None, db_constraint=True): + super().__init__( + field, to, + related_name=related_name, + related_query_name=related_query_name, + limit_choices_to=limit_choices_to, + ) + + if through and not db_constraint: + raise ValueError("Can't supply a through model and db_constraint=False") + self.through = through + + if through_fields and not through: + raise ValueError("Cannot specify through_fields without a through model") + self.through_fields = through_fields + + self.symmetrical = symmetrical + self.db_constraint = db_constraint + + def get_related_field(self): + """ + Return the field in the 'to' object to which this relationship is tied. + Provided for symmetry with ManyToOneRel. + """ + opts = self.through._meta + if self.through_fields: + field = opts.get_field(self.through_fields[0]) + else: + for field in opts.fields: + rel = getattr(field, 'remote_field', None) + if rel and rel.model == self.model: + break + return field.foreign_related_fields[0] diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/__init__.py b/env/lib/python3.5/site-packages/django/db/models/functions/__init__.py new file mode 100644 index 0000000..7515cc6 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/functions/__init__.py @@ -0,0 +1,33 @@ +from .comparison import Cast, Coalesce, Greatest, Least +from .datetime import ( + Extract, ExtractDay, ExtractHour, ExtractMinute, ExtractMonth, + ExtractQuarter, ExtractSecond, ExtractWeek, ExtractWeekDay, ExtractYear, + Now, Trunc, TruncDate, TruncDay, TruncHour, TruncMinute, TruncMonth, + TruncQuarter, TruncSecond, TruncTime, TruncWeek, TruncYear, +) +from .text import ( + Chr, Concat, ConcatPair, Left, Length, Lower, LPad, LTrim, Ord, Repeat, + Replace, Right, RPad, RTrim, StrIndex, Substr, Trim, Upper, +) +from .window import ( + CumeDist, DenseRank, FirstValue, Lag, LastValue, Lead, NthValue, Ntile, + PercentRank, Rank, RowNumber, +) + +__all__ = [ + # comparison and conversion + 'Cast', 'Coalesce', 'Greatest', 'Least', + # datetime + 'Extract', 'ExtractDay', 'ExtractHour', 'ExtractMinute', 'ExtractMonth', + 'ExtractQuarter', 'ExtractSecond', 'ExtractWeek', 'ExtractWeekDay', + 'ExtractYear', 'Now', 'Trunc', 'TruncDate', 'TruncDay', 'TruncHour', + 'TruncMinute', 'TruncMonth', 'TruncQuarter', 'TruncSecond', 'TruncTime', + 'TruncWeek', 'TruncYear', + # text + 'Chr', 'Concat', 'ConcatPair', 'Left', 'Length', 'Lower', 'LPad', 'LTrim', + 'Ord', 'Repeat', 'Replace', 'Right', 'RPad', 'RTrim', 'StrIndex', 'Substr', + 'Trim', 'Upper', + # window + 'CumeDist', 'DenseRank', 'FirstValue', 'Lag', 'LastValue', 'Lead', + 'NthValue', 'Ntile', 'PercentRank', 'Rank', 'RowNumber', +] diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f77de6ef8941b71ded2881b7316619f87ed70df1 GIT binary patch literal 1858 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 abZ?Yj0ypV&B1zQR#zkxJ^5F8|h5rEEmaqc= literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/datetime.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/functions/__pycache__/datetime.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d11197c782e4010836544c991e0eda988208d43 GIT binary patch literal 10586 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 CEzi*a literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/comparison.py b/env/lib/python3.5/site-packages/django/db/models/functions/comparison.py new file mode 100644 index 0000000..69e9d09 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/functions/comparison.py @@ -0,0 +1,91 @@ +"""Database functions that do comparisons or type conversions.""" +from django.db.models import Func + + +class Cast(Func): + """Coerce an expression to a new field type.""" + function = 'CAST' + template = '%(function)s(%(expressions)s AS %(db_type)s)' + + def __init__(self, expression, output_field): + super().__init__(expression, output_field=output_field) + + def as_sql(self, compiler, connection, **extra_context): + extra_context['db_type'] = self.output_field.cast_db_type(connection) + return super().as_sql(compiler, connection, **extra_context) + + def as_mysql(self, compiler, connection): + # MySQL doesn't support explicit cast to float. + template = '(%(expressions)s + 0.0)' if self.output_field.get_internal_type() == 'FloatField' else None + return self.as_sql(compiler, connection, template=template) + + def as_postgresql(self, compiler, connection): + # CAST would be valid too, but the :: shortcut syntax is more readable. + # 'expressions' is wrapped in parentheses in case it's a complex + # expression. + return self.as_sql(compiler, connection, template='(%(expressions)s)::%(db_type)s') + + +class Coalesce(Func): + """Return, from left to right, the first non-null expression.""" + function = 'COALESCE' + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError('Coalesce must take at least two expressions') + super().__init__(*expressions, **extra) + + def as_oracle(self, compiler, connection): + # Oracle prohibits mixing TextField (NCLOB) and CharField (NVARCHAR2), + # so convert all fields to NCLOB when that type is expected. + if self.output_field.get_internal_type() == 'TextField': + class ToNCLOB(Func): + function = 'TO_NCLOB' + + expressions = [ + ToNCLOB(expression) for expression in self.get_source_expressions() + ] + clone = self.copy() + clone.set_source_expressions(expressions) + return super(Coalesce, clone).as_sql(compiler, connection) + return self.as_sql(compiler, connection) + + +class Greatest(Func): + """ + Return the maximum expression. + + If any expression is null the return value is database-specific: + On PostgreSQL, the maximum not-null expression is returned. + On MySQL, Oracle, and SQLite, if any expression is null, null is returned. + """ + function = 'GREATEST' + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError('Greatest must take at least two expressions') + super().__init__(*expressions, **extra) + + def as_sqlite(self, compiler, connection): + """Use the MAX function on SQLite.""" + return super().as_sqlite(compiler, connection, function='MAX') + + +class Least(Func): + """ + Return the minimum expression. + + If any expression is null the return value is database-specific: + On PostgreSQL, return the minimum not-null expression. + On MySQL, Oracle, and SQLite, if any expression is null, return null. + """ + function = 'LEAST' + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError('Least must take at least two expressions') + super().__init__(*expressions, **extra) + + def as_sqlite(self, compiler, connection): + """Use the MIN function on SQLite.""" + return super().as_sqlite(compiler, connection, function='MIN') diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/datetime.py b/env/lib/python3.5/site-packages/django/db/models/functions/datetime.py new file mode 100644 index 0000000..74b88b7 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/functions/datetime.py @@ -0,0 +1,294 @@ +from datetime import datetime + +from django.conf import settings +from django.db.models import ( + DateField, DateTimeField, DurationField, Field, Func, IntegerField, + TimeField, Transform, fields, +) +from django.db.models.lookups import ( + YearExact, YearGt, YearGte, YearLt, YearLte, +) +from django.utils import timezone + + +class TimezoneMixin: + tzinfo = None + + def get_tzname(self): + # Timezone conversions must happen to the input datetime *before* + # applying a function. 2015-12-31 23:00:00 -02:00 is stored in the + # database as 2016-01-01 01:00:00 +00:00. Any results should be + # based on the input datetime not the stored datetime. + tzname = None + if settings.USE_TZ: + if self.tzinfo is None: + tzname = timezone.get_current_timezone_name() + else: + tzname = timezone._get_timezone_name(self.tzinfo) + return tzname + + +class Extract(TimezoneMixin, Transform): + lookup_name = None + output_field = IntegerField() + + def __init__(self, expression, lookup_name=None, tzinfo=None, **extra): + if self.lookup_name is None: + self.lookup_name = lookup_name + if self.lookup_name is None: + raise ValueError('lookup_name must be provided') + self.tzinfo = tzinfo + super().__init__(expression, **extra) + + def as_sql(self, compiler, connection): + sql, params = compiler.compile(self.lhs) + lhs_output_field = self.lhs.output_field + if isinstance(lhs_output_field, DateTimeField): + tzname = self.get_tzname() + sql = connection.ops.datetime_extract_sql(self.lookup_name, sql, tzname) + elif isinstance(lhs_output_field, DateField): + sql = connection.ops.date_extract_sql(self.lookup_name, sql) + elif isinstance(lhs_output_field, TimeField): + sql = connection.ops.time_extract_sql(self.lookup_name, sql) + elif isinstance(lhs_output_field, DurationField): + if not connection.features.has_native_duration_field: + raise ValueError('Extract requires native DurationField database support.') + sql = connection.ops.time_extract_sql(self.lookup_name, sql) + else: + # resolve_expression has already validated the output_field so this + # assert should never be hit. + assert False, "Tried to Extract from an invalid type." + return sql, params + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + copy = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + field = copy.lhs.output_field + if not isinstance(field, (DateField, DateTimeField, TimeField, DurationField)): + raise ValueError( + 'Extract input expression must be DateField, DateTimeField, ' + 'TimeField, or DurationField.' + ) + # Passing dates to functions expecting datetimes is most likely a mistake. + if type(field) == DateField and copy.lookup_name in ('hour', 'minute', 'second'): + raise ValueError( + "Cannot extract time component '%s' from DateField '%s'. " % (copy.lookup_name, field.name) + ) + return copy + + +class ExtractYear(Extract): + lookup_name = 'year' + + +class ExtractMonth(Extract): + lookup_name = 'month' + + +class ExtractDay(Extract): + lookup_name = 'day' + + +class ExtractWeek(Extract): + """ + Return 1-52 or 53, based on ISO-8601, i.e., Monday is the first of the + week. + """ + lookup_name = 'week' + + +class ExtractWeekDay(Extract): + """ + Return Sunday=1 through Saturday=7. + + To replicate this in Python: (mydatetime.isoweekday() % 7) + 1 + """ + lookup_name = 'week_day' + + +class ExtractQuarter(Extract): + lookup_name = 'quarter' + + +class ExtractHour(Extract): + lookup_name = 'hour' + + +class ExtractMinute(Extract): + lookup_name = 'minute' + + +class ExtractSecond(Extract): + lookup_name = 'second' + + +DateField.register_lookup(ExtractYear) +DateField.register_lookup(ExtractMonth) +DateField.register_lookup(ExtractDay) +DateField.register_lookup(ExtractWeekDay) +DateField.register_lookup(ExtractWeek) +DateField.register_lookup(ExtractQuarter) + +TimeField.register_lookup(ExtractHour) +TimeField.register_lookup(ExtractMinute) +TimeField.register_lookup(ExtractSecond) + +DateTimeField.register_lookup(ExtractHour) +DateTimeField.register_lookup(ExtractMinute) +DateTimeField.register_lookup(ExtractSecond) + +ExtractYear.register_lookup(YearExact) +ExtractYear.register_lookup(YearGt) +ExtractYear.register_lookup(YearGte) +ExtractYear.register_lookup(YearLt) +ExtractYear.register_lookup(YearLte) + + +class Now(Func): + template = 'CURRENT_TIMESTAMP' + output_field = fields.DateTimeField() + + def as_postgresql(self, compiler, connection): + # PostgreSQL's CURRENT_TIMESTAMP means "the time at the start of the + # transaction". Use STATEMENT_TIMESTAMP to be cross-compatible with + # other databases. + return self.as_sql(compiler, connection, template='STATEMENT_TIMESTAMP()') + + +class TruncBase(TimezoneMixin, Transform): + kind = None + tzinfo = None + + def __init__(self, expression, output_field=None, tzinfo=None, **extra): + self.tzinfo = tzinfo + super().__init__(expression, output_field=output_field, **extra) + + def as_sql(self, compiler, connection): + inner_sql, inner_params = compiler.compile(self.lhs) + # Escape any params because trunc_sql will format the string. + inner_sql = inner_sql.replace('%s', '%%s') + if isinstance(self.output_field, DateTimeField): + tzname = self.get_tzname() + sql = connection.ops.datetime_trunc_sql(self.kind, inner_sql, tzname) + elif isinstance(self.output_field, DateField): + sql = connection.ops.date_trunc_sql(self.kind, inner_sql) + elif isinstance(self.output_field, TimeField): + sql = connection.ops.time_trunc_sql(self.kind, inner_sql) + else: + raise ValueError('Trunc only valid on DateField, TimeField, or DateTimeField.') + return sql, inner_params + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + copy = super().resolve_expression(query, allow_joins, reuse, summarize, for_save) + field = copy.lhs.output_field + # DateTimeField is a subclass of DateField so this works for both. + assert isinstance(field, (DateField, TimeField)), ( + "%r isn't a DateField, TimeField, or DateTimeField." % field.name + ) + # If self.output_field was None, then accessing the field will trigger + # the resolver to assign it to self.lhs.output_field. + if not isinstance(copy.output_field, (DateField, DateTimeField, TimeField)): + raise ValueError('output_field must be either DateField, TimeField, or DateTimeField') + # Passing dates or times to functions expecting datetimes is most + # likely a mistake. + class_output_field = self.__class__.output_field if isinstance(self.__class__.output_field, Field) else None + output_field = class_output_field or copy.output_field + has_explicit_output_field = class_output_field or field.__class__ is not copy.output_field.__class__ + if type(field) == DateField and ( + isinstance(output_field, DateTimeField) or copy.kind in ('hour', 'minute', 'second', 'time')): + raise ValueError("Cannot truncate DateField '%s' to %s. " % ( + field.name, output_field.__class__.__name__ if has_explicit_output_field else 'DateTimeField' + )) + elif isinstance(field, TimeField) and ( + isinstance(output_field, DateTimeField) or + copy.kind in ('year', 'quarter', 'month', 'week', 'day', 'date')): + raise ValueError("Cannot truncate TimeField '%s' to %s. " % ( + field.name, output_field.__class__.__name__ if has_explicit_output_field else 'DateTimeField' + )) + return copy + + def convert_value(self, value, expression, connection): + if isinstance(self.output_field, DateTimeField): + if settings.USE_TZ: + if value is None: + raise ValueError( + "Database returned an invalid datetime value. " + "Are time zone definitions for your database installed?" + ) + value = value.replace(tzinfo=None) + value = timezone.make_aware(value, self.tzinfo) + elif isinstance(value, datetime): + if isinstance(self.output_field, DateField): + value = value.date() + elif isinstance(self.output_field, TimeField): + value = value.time() + return value + + +class Trunc(TruncBase): + + def __init__(self, expression, kind, output_field=None, tzinfo=None, **extra): + self.kind = kind + super().__init__(expression, output_field=output_field, tzinfo=tzinfo, **extra) + + +class TruncYear(TruncBase): + kind = 'year' + + +class TruncQuarter(TruncBase): + kind = 'quarter' + + +class TruncMonth(TruncBase): + kind = 'month' + + +class TruncWeek(TruncBase): + """Truncate to midnight on the Monday of the week.""" + kind = 'week' + + +class TruncDay(TruncBase): + kind = 'day' + + +class TruncDate(TruncBase): + kind = 'date' + lookup_name = 'date' + output_field = DateField() + + def as_sql(self, compiler, connection): + # Cast to date rather than truncate to date. + lhs, lhs_params = compiler.compile(self.lhs) + tzname = timezone.get_current_timezone_name() if settings.USE_TZ else None + sql = connection.ops.datetime_cast_date_sql(lhs, tzname) + return sql, lhs_params + + +class TruncTime(TruncBase): + kind = 'time' + lookup_name = 'time' + output_field = TimeField() + + def as_sql(self, compiler, connection): + # Cast to date rather than truncate to date. + lhs, lhs_params = compiler.compile(self.lhs) + tzname = timezone.get_current_timezone_name() if settings.USE_TZ else None + sql = connection.ops.datetime_cast_time_sql(lhs, tzname) + return sql, lhs_params + + +class TruncHour(TruncBase): + kind = 'hour' + + +class TruncMinute(TruncBase): + kind = 'minute' + + +class TruncSecond(TruncBase): + kind = 'second' + + +DateTimeField.register_lookup(TruncDate) +DateTimeField.register_lookup(TruncTime) diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/text.py b/env/lib/python3.5/site-packages/django/db/models/functions/text.py new file mode 100644 index 0000000..1f04842 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/functions/text.py @@ -0,0 +1,237 @@ +from django.db.models import Func, IntegerField, Transform, Value, fields +from django.db.models.functions import Coalesce + + +class BytesToCharFieldConversionMixin: + """ + Convert CharField results from bytes to str. + + MySQL returns long data types (bytes) instead of chars when it can't + determine the length of the result string. For example: + LPAD(column1, CHAR_LENGTH(column2), ' ') + returns the LONGTEXT (bytes) instead of VARCHAR. + """ + def convert_value(self, value, expression, connection): + if connection.features.db_functions_convert_bytes_to_str: + if self.output_field.get_internal_type() == 'CharField' and isinstance(value, bytes): + return value.decode() + return super().convert_value(value, expression, connection) + + +class Chr(Transform): + function = 'CHR' + lookup_name = 'chr' + + def as_mysql(self, compiler, connection): + return super().as_sql( + compiler, connection, function='CHAR', template='%(function)s(%(expressions)s USING utf16)' + ) + + def as_oracle(self, compiler, connection): + return super().as_sql(compiler, connection, template='%(function)s(%(expressions)s USING NCHAR_CS)') + + def as_sqlite(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function='CHAR', **extra_context) + + +class ConcatPair(Func): + """ + Concatenate two arguments together. This is used by `Concat` because not + all backend databases support more than two arguments. + """ + function = 'CONCAT' + + def as_sqlite(self, compiler, connection): + coalesced = self.coalesce() + return super(ConcatPair, coalesced).as_sql( + compiler, connection, template='%(expressions)s', arg_joiner=' || ' + ) + + def as_mysql(self, compiler, connection): + # Use CONCAT_WS with an empty separator so that NULLs are ignored. + return super().as_sql( + compiler, connection, function='CONCAT_WS', template="%(function)s('', %(expressions)s)" + ) + + def coalesce(self): + # null on either side results in null for expression, wrap with coalesce + c = self.copy() + expressions = [ + Coalesce(expression, Value('')) for expression in c.get_source_expressions() + ] + c.set_source_expressions(expressions) + return c + + +class Concat(Func): + """ + Concatenate text fields together. Backends that result in an entire + null expression when any arguments are null will wrap each argument in + coalesce functions to ensure a non-null result. + """ + function = None + template = "%(expressions)s" + + def __init__(self, *expressions, **extra): + if len(expressions) < 2: + raise ValueError('Concat must take at least two expressions') + paired = self._paired(expressions) + super().__init__(paired, **extra) + + def _paired(self, expressions): + # wrap pairs of expressions in successive concat functions + # exp = [a, b, c, d] + # -> ConcatPair(a, ConcatPair(b, ConcatPair(c, d)))) + if len(expressions) == 2: + return ConcatPair(*expressions) + return ConcatPair(expressions[0], self._paired(expressions[1:])) + + +class Left(Func): + function = 'LEFT' + arity = 2 + + def __init__(self, expression, length, **extra): + """ + expression: the name of a field, or an expression returning a string + length: the number of characters to return from the start of the string + """ + if not hasattr(length, 'resolve_expression'): + if length < 1: + raise ValueError("'length' must be greater than 0.") + super().__init__(expression, length, **extra) + + def get_substr(self): + return Substr(self.source_expressions[0], Value(1), self.source_expressions[1]) + + def use_substr(self, compiler, connection, **extra_context): + return self.get_substr().as_oracle(compiler, connection, **extra_context) + + as_oracle = use_substr + as_sqlite = use_substr + + +class Length(Transform): + """Return the number of characters in the expression.""" + function = 'LENGTH' + lookup_name = 'length' + output_field = fields.IntegerField() + + def as_mysql(self, compiler, connection): + return super().as_sql(compiler, connection, function='CHAR_LENGTH') + + +class Lower(Transform): + function = 'LOWER' + lookup_name = 'lower' + + +class LPad(BytesToCharFieldConversionMixin, Func): + function = 'LPAD' + + def __init__(self, expression, length, fill_text=Value(' '), **extra): + if not hasattr(length, 'resolve_expression') and length < 0: + raise ValueError("'length' must be greater or equal to 0.") + super().__init__(expression, length, fill_text, **extra) + + +class LTrim(Transform): + function = 'LTRIM' + lookup_name = 'ltrim' + + +class Ord(Transform): + function = 'ASCII' + lookup_name = 'ord' + output_field = IntegerField() + + def as_mysql(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function='ORD', **extra_context) + + def as_sqlite(self, compiler, connection, **extra_context): + return super().as_sql(compiler, connection, function='UNICODE', **extra_context) + + +class Repeat(BytesToCharFieldConversionMixin, Func): + function = 'REPEAT' + + def __init__(self, expression, number, **extra): + if not hasattr(number, 'resolve_expression') and number < 0: + raise ValueError("'number' must be greater or equal to 0.") + super().__init__(expression, number, **extra) + + def as_oracle(self, compiler, connection, **extra_context): + expression, number = self.source_expressions + rpad = RPad(expression, Length(expression) * number, expression) + return rpad.as_sql(compiler, connection, **extra_context) + + +class Replace(Func): + function = 'REPLACE' + + def __init__(self, expression, text, replacement=Value(''), **extra): + super().__init__(expression, text, replacement, **extra) + + +class Right(Left): + function = 'RIGHT' + + def get_substr(self): + return Substr(self.source_expressions[0], self.source_expressions[1] * Value(-1)) + + +class RPad(LPad): + function = 'RPAD' + + +class RTrim(Transform): + function = 'RTRIM' + lookup_name = 'rtrim' + + +class StrIndex(Func): + """ + Return a positive integer corresponding to the 1-indexed position of the + first occurrence of a substring inside another string, or 0 if the + substring is not found. + """ + function = 'INSTR' + arity = 2 + output_field = fields.IntegerField() + + def as_postgresql(self, compiler, connection): + return super().as_sql(compiler, connection, function='STRPOS') + + +class Substr(Func): + function = 'SUBSTRING' + + def __init__(self, expression, pos, length=None, **extra): + """ + expression: the name of a field, or an expression returning a string + pos: an integer > 0, or an expression returning an integer + length: an optional number of characters to return + """ + if not hasattr(pos, 'resolve_expression'): + if pos < 1: + raise ValueError("'pos' must be greater than 0") + expressions = [expression, pos] + if length is not None: + expressions.append(length) + super().__init__(*expressions, **extra) + + def as_sqlite(self, compiler, connection): + return super().as_sql(compiler, connection, function='SUBSTR') + + def as_oracle(self, compiler, connection): + return super().as_sql(compiler, connection, function='SUBSTR') + + +class Trim(Transform): + function = 'TRIM' + lookup_name = 'trim' + + +class Upper(Transform): + function = 'UPPER' + lookup_name = 'upper' diff --git a/env/lib/python3.5/site-packages/django/db/models/functions/window.py b/env/lib/python3.5/site-packages/django/db/models/functions/window.py new file mode 100644 index 0000000..3719dfc --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/functions/window.py @@ -0,0 +1,118 @@ +from django.db.models import FloatField, Func, IntegerField + +__all__ = [ + 'CumeDist', 'DenseRank', 'FirstValue', 'Lag', 'LastValue', 'Lead', + 'NthValue', 'Ntile', 'PercentRank', 'Rank', 'RowNumber', +] + + +class CumeDist(Func): + function = 'CUME_DIST' + name = 'CumeDist' + output_field = FloatField() + window_compatible = True + + +class DenseRank(Func): + function = 'DENSE_RANK' + name = 'DenseRank' + output_field = IntegerField() + window_compatible = True + + +class FirstValue(Func): + arity = 1 + function = 'FIRST_VALUE' + name = 'FirstValue' + window_compatible = True + + +class LagLeadFunction(Func): + window_compatible = True + + def __init__(self, expression, offset=1, default=None, **extra): + if expression is None: + raise ValueError( + '%s requires a non-null source expression.' % + self.__class__.__name__ + ) + if offset is None or offset <= 0: + raise ValueError( + '%s requires a positive integer for the offset.' % + self.__class__.__name__ + ) + args = (expression, offset) + if default is not None: + args += (default,) + super().__init__(*args, **extra) + + def _resolve_output_field(self): + sources = self.get_source_expressions() + return sources[0].output_field + + +class Lag(LagLeadFunction): + function = 'LAG' + name = 'Lag' + + +class LastValue(Func): + arity = 1 + function = 'LAST_VALUE' + name = 'LastValue' + window_compatible = True + + +class Lead(LagLeadFunction): + function = 'LEAD' + name = 'Lead' + + +class NthValue(Func): + function = 'NTH_VALUE' + name = 'NthValue' + window_compatible = True + + def __init__(self, expression, nth=1, **extra): + if expression is None: + raise ValueError('%s requires a non-null source expression.' % self.__class__.__name__) + if nth is None or nth <= 0: + raise ValueError('%s requires a positive integer as for nth.' % self.__class__.__name__) + super().__init__(expression, nth, **extra) + + def _resolve_output_field(self): + sources = self.get_source_expressions() + return sources[0].output_field + + +class Ntile(Func): + function = 'NTILE' + name = 'Ntile' + output_field = IntegerField() + window_compatible = True + + def __init__(self, num_buckets=1, **extra): + if num_buckets <= 0: + raise ValueError('num_buckets must be greater than 0.') + super().__init__(num_buckets, **extra) + + +class PercentRank(Func): + function = 'PERCENT_RANK' + name = 'PercentRank' + output_field = FloatField() + window_compatible = True + + +class Rank(Func): + function = 'RANK' + name = 'Rank' + output_field = IntegerField() + window_compatible = True + + +class RowNumber(Func): + function = 'ROW_NUMBER' + name = 'RowNumber' + output_field = IntegerField() + window_compatible = True diff --git a/env/lib/python3.5/site-packages/django/db/models/indexes.py b/env/lib/python3.5/site-packages/django/db/models/indexes.py new file mode 100644 index 0000000..9bfb9e0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/indexes.py @@ -0,0 +1,118 @@ +import hashlib + +from django.db.backends.utils import split_identifier +from django.utils.encoding import force_bytes + +__all__ = ['Index'] + + +class Index: + suffix = 'idx' + # The max length of the name of the index (restricted to 30 for + # cross-database compatibility with Oracle) + max_name_length = 30 + + def __init__(self, *, fields=(), name=None, db_tablespace=None): + if not isinstance(fields, (list, tuple)): + raise ValueError('Index.fields must be a list or tuple.') + if not fields: + raise ValueError('At least one field is required to define an index.') + self.fields = list(fields) + # A list of 2-tuple with the field name and ordering ('' or 'DESC'). + self.fields_orders = [ + (field_name[1:], 'DESC') if field_name.startswith('-') else (field_name, '') + for field_name in self.fields + ] + self.name = name or '' + if self.name: + errors = self.check_name() + if len(self.name) > self.max_name_length: + errors.append('Index names cannot be longer than %s characters.' % self.max_name_length) + if errors: + raise ValueError(errors) + self.db_tablespace = db_tablespace + + def check_name(self): + errors = [] + # Name can't start with an underscore on Oracle; prepend D if needed. + if self.name[0] == '_': + errors.append('Index names cannot start with an underscore (_).') + self.name = 'D%s' % self.name[1:] + # Name can't start with a number on Oracle; prepend D if needed. + elif self.name[0].isdigit(): + errors.append('Index names cannot start with a number (0-9).') + self.name = 'D%s' % self.name[1:] + return errors + + def create_sql(self, model, schema_editor, using=''): + fields = [model._meta.get_field(field_name) for field_name, _ in self.fields_orders] + col_suffixes = [order[1] for order in self.fields_orders] + return schema_editor._create_index_sql( + model, fields, name=self.name, using=using, db_tablespace=self.db_tablespace, + col_suffixes=col_suffixes, + ) + + def remove_sql(self, model, schema_editor): + quote_name = schema_editor.quote_name + return schema_editor.sql_delete_index % { + 'table': quote_name(model._meta.db_table), + 'name': quote_name(self.name), + } + + def deconstruct(self): + path = '%s.%s' % (self.__class__.__module__, self.__class__.__name__) + path = path.replace('django.db.models.indexes', 'django.db.models') + kwargs = {'fields': self.fields, 'name': self.name} + if self.db_tablespace is not None: + kwargs['db_tablespace'] = self.db_tablespace + return (path, (), kwargs) + + def clone(self): + """Create a copy of this Index.""" + _, _, kwargs = self.deconstruct() + return self.__class__(**kwargs) + + @staticmethod + def _hash_generator(*args): + """ + Generate a 32-bit digest of a set of arguments that can be used to + shorten identifying names. + """ + h = hashlib.md5() + for arg in args: + h.update(force_bytes(arg)) + return h.hexdigest()[:6] + + def set_name_with_model(self, model): + """ + Generate a unique name for the index. + + The name is divided into 3 parts - table name (12 chars), field name + (8 chars) and unique hash + suffix (10 chars). Each part is made to + fit its size by truncating the excess length. + """ + _, table_name = split_identifier(model._meta.db_table) + column_names = [model._meta.get_field(field_name).column for field_name, order in self.fields_orders] + column_names_with_order = [ + (('-%s' if order else '%s') % column_name) + for column_name, (field_name, order) in zip(column_names, self.fields_orders) + ] + # The length of the parts of the name is based on the default max + # length of 30 characters. + hash_data = [table_name] + column_names_with_order + [self.suffix] + self.name = '%s_%s_%s' % ( + table_name[:11], + column_names[0][:7], + '%s_%s' % (self._hash_generator(*hash_data), self.suffix), + ) + assert len(self.name) <= self.max_name_length, ( + 'Index too long for multiple database support. Is self.suffix ' + 'longer than 3 characters?' + ) + self.check_name() + + def __repr__(self): + return "<%s: fields='%s'>" % (self.__class__.__name__, ', '.join(self.fields)) + + def __eq__(self, other): + return (self.__class__ == other.__class__) and (self.deconstruct() == other.deconstruct()) diff --git a/env/lib/python3.5/site-packages/django/db/models/lookups.py b/env/lib/python3.5/site-packages/django/db/models/lookups.py new file mode 100644 index 0000000..fa4561d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/lookups.py @@ -0,0 +1,556 @@ +import itertools +import math +from copy import copy + +from django.core.exceptions import EmptyResultSet +from django.db.models.expressions import Func, Value +from django.db.models.fields import DateTimeField, Field, IntegerField +from django.db.models.query_utils import RegisterLookupMixin +from django.utils.datastructures import OrderedSet +from django.utils.functional import cached_property + + +class Lookup: + lookup_name = None + prepare_rhs = True + can_use_none_as_rhs = False + + def __init__(self, lhs, rhs): + self.lhs, self.rhs = lhs, rhs + self.rhs = self.get_prep_lookup() + if hasattr(self.lhs, 'get_bilateral_transforms'): + bilateral_transforms = self.lhs.get_bilateral_transforms() + else: + bilateral_transforms = [] + if bilateral_transforms: + # Warn the user as soon as possible if they are trying to apply + # a bilateral transformation on a nested QuerySet: that won't work. + from django.db.models.sql.query import Query # avoid circular import + if isinstance(rhs, Query): + raise NotImplementedError("Bilateral transformations on nested querysets are not implemented.") + self.bilateral_transforms = bilateral_transforms + + def apply_bilateral_transforms(self, value): + for transform in self.bilateral_transforms: + value = transform(value) + return value + + def batch_process_rhs(self, compiler, connection, rhs=None): + if rhs is None: + rhs = self.rhs + if self.bilateral_transforms: + sqls, sqls_params = [], [] + for p in rhs: + value = Value(p, output_field=self.lhs.output_field) + value = self.apply_bilateral_transforms(value) + value = value.resolve_expression(compiler.query) + sql, sql_params = compiler.compile(value) + sqls.append(sql) + sqls_params.extend(sql_params) + else: + _, params = self.get_db_prep_lookup(rhs, connection) + sqls, sqls_params = ['%s'] * len(params), params + return sqls, sqls_params + + def get_source_expressions(self): + if self.rhs_is_direct_value(): + return [self.lhs] + return [self.lhs, self.rhs] + + def set_source_expressions(self, new_exprs): + if len(new_exprs) == 1: + self.lhs = new_exprs[0] + else: + self.lhs, self.rhs = new_exprs + + def get_prep_lookup(self): + if hasattr(self.rhs, '_prepare'): + return self.rhs._prepare(self.lhs.output_field) + if self.prepare_rhs and hasattr(self.lhs.output_field, 'get_prep_value'): + return self.lhs.output_field.get_prep_value(self.rhs) + return self.rhs + + def get_db_prep_lookup(self, value, connection): + return ('%s', [value]) + + def process_lhs(self, compiler, connection, lhs=None): + lhs = lhs or self.lhs + if hasattr(lhs, 'resolve_expression'): + lhs = lhs.resolve_expression(compiler.query) + return compiler.compile(lhs) + + def process_rhs(self, compiler, connection): + value = self.rhs + if self.bilateral_transforms: + if self.rhs_is_direct_value(): + # Do not call get_db_prep_lookup here as the value will be + # transformed before being used for lookup + value = Value(value, output_field=self.lhs.output_field) + value = self.apply_bilateral_transforms(value) + value = value.resolve_expression(compiler.query) + if hasattr(value, 'as_sql'): + sql, params = compiler.compile(value) + return '(' + sql + ')', params + else: + return self.get_db_prep_lookup(value, connection) + + def rhs_is_direct_value(self): + return not hasattr(self.rhs, 'as_sql') + + def relabeled_clone(self, relabels): + new = copy(self) + new.lhs = new.lhs.relabeled_clone(relabels) + if hasattr(new.rhs, 'relabeled_clone'): + new.rhs = new.rhs.relabeled_clone(relabels) + return new + + def get_group_by_cols(self): + cols = self.lhs.get_group_by_cols() + if hasattr(self.rhs, 'get_group_by_cols'): + cols.extend(self.rhs.get_group_by_cols()) + return cols + + def as_sql(self, compiler, connection): + raise NotImplementedError + + @cached_property + def contains_aggregate(self): + return self.lhs.contains_aggregate or getattr(self.rhs, 'contains_aggregate', False) + + @cached_property + def contains_over_clause(self): + return self.lhs.contains_over_clause or getattr(self.rhs, 'contains_over_clause', False) + + @property + def is_summary(self): + return self.lhs.is_summary or getattr(self.rhs, 'is_summary', False) + + +class Transform(RegisterLookupMixin, Func): + """ + RegisterLookupMixin() is first so that get_lookup() and get_transform() + first examine self and then check output_field. + """ + bilateral = False + arity = 1 + + @property + def lhs(self): + return self.get_source_expressions()[0] + + def get_bilateral_transforms(self): + if hasattr(self.lhs, 'get_bilateral_transforms'): + bilateral_transforms = self.lhs.get_bilateral_transforms() + else: + bilateral_transforms = [] + if self.bilateral: + bilateral_transforms.append(self.__class__) + return bilateral_transforms + + +class BuiltinLookup(Lookup): + def process_lhs(self, compiler, connection, lhs=None): + lhs_sql, params = super().process_lhs(compiler, connection, lhs) + field_internal_type = self.lhs.output_field.get_internal_type() + db_type = self.lhs.output_field.db_type(connection=connection) + lhs_sql = connection.ops.field_cast_sql( + db_type, field_internal_type) % lhs_sql + lhs_sql = connection.ops.lookup_cast(self.lookup_name, field_internal_type) % lhs_sql + return lhs_sql, list(params) + + def as_sql(self, compiler, connection): + lhs_sql, params = self.process_lhs(compiler, connection) + rhs_sql, rhs_params = self.process_rhs(compiler, connection) + params.extend(rhs_params) + rhs_sql = self.get_rhs_op(connection, rhs_sql) + return '%s %s' % (lhs_sql, rhs_sql), params + + def get_rhs_op(self, connection, rhs): + return connection.operators[self.lookup_name] % rhs + + +class FieldGetDbPrepValueMixin: + """ + Some lookups require Field.get_db_prep_value() to be called on their + inputs. + """ + get_db_prep_lookup_value_is_iterable = False + + def get_db_prep_lookup(self, value, connection): + # For relational fields, use the output_field of the 'field' attribute. + field = getattr(self.lhs.output_field, 'field', None) + get_db_prep_value = getattr(field, 'get_db_prep_value', None) or self.lhs.output_field.get_db_prep_value + return ( + '%s', + [get_db_prep_value(v, connection, prepared=True) for v in value] + if self.get_db_prep_lookup_value_is_iterable else + [get_db_prep_value(value, connection, prepared=True)] + ) + + +class FieldGetDbPrepValueIterableMixin(FieldGetDbPrepValueMixin): + """ + Some lookups require Field.get_db_prep_value() to be called on each value + in an iterable. + """ + get_db_prep_lookup_value_is_iterable = True + + def get_prep_lookup(self): + prepared_values = [] + if hasattr(self.rhs, '_prepare'): + # A subquery is like an iterable but its items shouldn't be + # prepared independently. + return self.rhs._prepare(self.lhs.output_field) + for rhs_value in self.rhs: + if hasattr(rhs_value, 'resolve_expression'): + # An expression will be handled by the database but can coexist + # alongside real values. + pass + elif self.prepare_rhs and hasattr(self.lhs.output_field, 'get_prep_value'): + rhs_value = self.lhs.output_field.get_prep_value(rhs_value) + prepared_values.append(rhs_value) + return prepared_values + + def process_rhs(self, compiler, connection): + if self.rhs_is_direct_value(): + # rhs should be an iterable of values. Use batch_process_rhs() + # to prepare/transform those values. + return self.batch_process_rhs(compiler, connection) + else: + return super().process_rhs(compiler, connection) + + def resolve_expression_parameter(self, compiler, connection, sql, param): + params = [param] + if hasattr(param, 'resolve_expression'): + param = param.resolve_expression(compiler.query) + if hasattr(param, 'as_sql'): + sql, params = param.as_sql(compiler, connection) + return sql, params + + def batch_process_rhs(self, compiler, connection, rhs=None): + pre_processed = super().batch_process_rhs(compiler, connection, rhs) + # The params list may contain expressions which compile to a + # sql/param pair. Zip them to get sql and param pairs that refer to the + # same argument and attempt to replace them with the result of + # compiling the param step. + sql, params = zip(*( + self.resolve_expression_parameter(compiler, connection, sql, param) + for sql, param in zip(*pre_processed) + )) + params = itertools.chain.from_iterable(params) + return sql, tuple(params) + + +@Field.register_lookup +class Exact(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = 'exact' + + def process_rhs(self, compiler, connection): + from django.db.models.sql.query import Query + if isinstance(self.rhs, Query): + if self.rhs.has_limit_one(): + # The subquery must select only the pk. + self.rhs.clear_select_clause() + self.rhs.add_fields(['pk']) + else: + raise ValueError( + 'The QuerySet value for an exact lookup must be limited to ' + 'one result using slicing.' + ) + return super().process_rhs(compiler, connection) + + +@Field.register_lookup +class IExact(BuiltinLookup): + lookup_name = 'iexact' + prepare_rhs = False + + def process_rhs(self, qn, connection): + rhs, params = super().process_rhs(qn, connection) + if params: + params[0] = connection.ops.prep_for_iexact_query(params[0]) + return rhs, params + + +@Field.register_lookup +class GreaterThan(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = 'gt' + + +@Field.register_lookup +class GreaterThanOrEqual(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = 'gte' + + +@Field.register_lookup +class LessThan(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = 'lt' + + +@Field.register_lookup +class LessThanOrEqual(FieldGetDbPrepValueMixin, BuiltinLookup): + lookup_name = 'lte' + + +class IntegerFieldFloatRounding: + """ + Allow floats to work as query values for IntegerField. Without this, the + decimal portion of the float would always be discarded. + """ + def get_prep_lookup(self): + if isinstance(self.rhs, float): + self.rhs = math.ceil(self.rhs) + return super().get_prep_lookup() + + +@IntegerField.register_lookup +class IntegerGreaterThanOrEqual(IntegerFieldFloatRounding, GreaterThanOrEqual): + pass + + +@IntegerField.register_lookup +class IntegerLessThan(IntegerFieldFloatRounding, LessThan): + pass + + +@Field.register_lookup +class In(FieldGetDbPrepValueIterableMixin, BuiltinLookup): + lookup_name = 'in' + + def process_rhs(self, compiler, connection): + db_rhs = getattr(self.rhs, '_db', None) + if db_rhs is not None and db_rhs != connection.alias: + raise ValueError( + "Subqueries aren't allowed across different databases. Force " + "the inner query to be evaluated using `list(inner_query)`." + ) + + if self.rhs_is_direct_value(): + try: + rhs = OrderedSet(self.rhs) + except TypeError: # Unhashable items in self.rhs + rhs = self.rhs + + if not rhs: + raise EmptyResultSet + + # rhs should be an iterable; use batch_process_rhs() to + # prepare/transform those values. + sqls, sqls_params = self.batch_process_rhs(compiler, connection, rhs) + placeholder = '(' + ', '.join(sqls) + ')' + return (placeholder, sqls_params) + else: + if not getattr(self.rhs, 'has_select_fields', True): + self.rhs.clear_select_clause() + self.rhs.add_fields(['pk']) + return super().process_rhs(compiler, connection) + + def get_rhs_op(self, connection, rhs): + return 'IN %s' % rhs + + def as_sql(self, compiler, connection): + max_in_list_size = connection.ops.max_in_list_size() + if self.rhs_is_direct_value() and max_in_list_size and len(self.rhs) > max_in_list_size: + return self.split_parameter_list_as_sql(compiler, connection) + return super().as_sql(compiler, connection) + + def split_parameter_list_as_sql(self, compiler, connection): + # This is a special case for databases which limit the number of + # elements which can appear in an 'IN' clause. + max_in_list_size = connection.ops.max_in_list_size() + lhs, lhs_params = self.process_lhs(compiler, connection) + rhs, rhs_params = self.batch_process_rhs(compiler, connection) + in_clause_elements = ['('] + params = [] + for offset in range(0, len(rhs_params), max_in_list_size): + if offset > 0: + in_clause_elements.append(' OR ') + in_clause_elements.append('%s IN (' % lhs) + params.extend(lhs_params) + sqls = rhs[offset: offset + max_in_list_size] + sqls_params = rhs_params[offset: offset + max_in_list_size] + param_group = ', '.join(sqls) + in_clause_elements.append(param_group) + in_clause_elements.append(')') + params.extend(sqls_params) + in_clause_elements.append(')') + return ''.join(in_clause_elements), params + + +class PatternLookup(BuiltinLookup): + param_pattern = '%%%s%%' + prepare_rhs = False + + def get_rhs_op(self, connection, rhs): + # Assume we are in startswith. We need to produce SQL like: + # col LIKE %s, ['thevalue%'] + # For python values we can (and should) do that directly in Python, + # but if the value is for example reference to other column, then + # we need to add the % pattern match to the lookup by something like + # col LIKE othercol || '%%' + # So, for Python values we don't need any special pattern, but for + # SQL reference values or SQL transformations we need the correct + # pattern added. + if hasattr(self.rhs, 'as_sql') or self.bilateral_transforms: + pattern = connection.pattern_ops[self.lookup_name].format(connection.pattern_esc) + return pattern.format(rhs) + else: + return super().get_rhs_op(connection, rhs) + + def process_rhs(self, qn, connection): + rhs, params = super().process_rhs(qn, connection) + if self.rhs_is_direct_value() and params and not self.bilateral_transforms: + params[0] = self.param_pattern % connection.ops.prep_for_like_query(params[0]) + return rhs, params + + +@Field.register_lookup +class Contains(PatternLookup): + lookup_name = 'contains' + + +@Field.register_lookup +class IContains(Contains): + lookup_name = 'icontains' + + +@Field.register_lookup +class StartsWith(PatternLookup): + lookup_name = 'startswith' + param_pattern = '%s%%' + + +@Field.register_lookup +class IStartsWith(StartsWith): + lookup_name = 'istartswith' + + +@Field.register_lookup +class EndsWith(PatternLookup): + lookup_name = 'endswith' + param_pattern = '%%%s' + + +@Field.register_lookup +class IEndsWith(EndsWith): + lookup_name = 'iendswith' + + +@Field.register_lookup +class Range(FieldGetDbPrepValueIterableMixin, BuiltinLookup): + lookup_name = 'range' + + def get_rhs_op(self, connection, rhs): + return "BETWEEN %s AND %s" % (rhs[0], rhs[1]) + + +@Field.register_lookup +class IsNull(BuiltinLookup): + lookup_name = 'isnull' + prepare_rhs = False + + def as_sql(self, compiler, connection): + sql, params = compiler.compile(self.lhs) + if self.rhs: + return "%s IS NULL" % sql, params + else: + return "%s IS NOT NULL" % sql, params + + +@Field.register_lookup +class Regex(BuiltinLookup): + lookup_name = 'regex' + prepare_rhs = False + + def as_sql(self, compiler, connection): + if self.lookup_name in connection.operators: + return super().as_sql(compiler, connection) + else: + lhs, lhs_params = self.process_lhs(compiler, connection) + rhs, rhs_params = self.process_rhs(compiler, connection) + sql_template = connection.ops.regex_lookup(self.lookup_name) + return sql_template % (lhs, rhs), lhs_params + rhs_params + + +@Field.register_lookup +class IRegex(Regex): + lookup_name = 'iregex' + + +class YearLookup(Lookup): + def year_lookup_bounds(self, connection, year): + output_field = self.lhs.lhs.output_field + if isinstance(output_field, DateTimeField): + bounds = connection.ops.year_lookup_bounds_for_datetime_field(year) + else: + bounds = connection.ops.year_lookup_bounds_for_date_field(year) + return bounds + + +class YearComparisonLookup(YearLookup): + def as_sql(self, compiler, connection): + # We will need to skip the extract part and instead go + # directly with the originating field, that is self.lhs.lhs. + lhs_sql, params = self.process_lhs(compiler, connection, self.lhs.lhs) + rhs_sql, rhs_params = self.process_rhs(compiler, connection) + rhs_sql = self.get_rhs_op(connection, rhs_sql) + start, finish = self.year_lookup_bounds(connection, rhs_params[0]) + params.append(self.get_bound(start, finish)) + return '%s %s' % (lhs_sql, rhs_sql), params + + def get_rhs_op(self, connection, rhs): + return connection.operators[self.lookup_name] % rhs + + def get_bound(self, start, finish): + raise NotImplementedError( + 'subclasses of YearComparisonLookup must provide a get_bound() method' + ) + + +class YearExact(YearLookup, Exact): + lookup_name = 'exact' + + def as_sql(self, compiler, connection): + # We will need to skip the extract part and instead go + # directly with the originating field, that is self.lhs.lhs. + lhs_sql, params = self.process_lhs(compiler, connection, self.lhs.lhs) + rhs_sql, rhs_params = self.process_rhs(compiler, connection) + try: + # Check that rhs_params[0] exists (IndexError), + # it isn't None (TypeError), and is a number (ValueError) + int(rhs_params[0]) + except (IndexError, TypeError, ValueError): + # Can't determine the bounds before executing the query, so skip + # optimizations by falling back to a standard exact comparison. + return super().as_sql(compiler, connection) + bounds = self.year_lookup_bounds(connection, rhs_params[0]) + params.extend(bounds) + return '%s BETWEEN %%s AND %%s' % lhs_sql, params + + +class YearGt(YearComparisonLookup): + lookup_name = 'gt' + + def get_bound(self, start, finish): + return finish + + +class YearGte(YearComparisonLookup): + lookup_name = 'gte' + + def get_bound(self, start, finish): + return start + + +class YearLt(YearComparisonLookup): + lookup_name = 'lt' + + def get_bound(self, start, finish): + return start + + +class YearLte(YearComparisonLookup): + lookup_name = 'lte' + + def get_bound(self, start, finish): + return finish diff --git a/env/lib/python3.5/site-packages/django/db/models/manager.py b/env/lib/python3.5/site-packages/django/db/models/manager.py new file mode 100644 index 0000000..e7a956c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/manager.py @@ -0,0 +1,201 @@ +import copy +import inspect +from importlib import import_module + +from django.db import router +from django.db.models.query import QuerySet + + +class BaseManager: + # To retain order, track each time a Manager instance is created. + creation_counter = 0 + + # Set to True for the 'objects' managers that are automatically created. + auto_created = False + + #: If set to True the manager will be serialized into migrations and will + #: thus be available in e.g. RunPython operations. + use_in_migrations = False + + def __new__(cls, *args, **kwargs): + # Capture the arguments to make returning them trivial. + obj = super().__new__(cls) + obj._constructor_args = (args, kwargs) + return obj + + def __init__(self): + super().__init__() + self._set_creation_counter() + self.model = None + self.name = None + self._db = None + self._hints = {} + + def __str__(self): + """Return "app_label.model_label.manager_name".""" + return '%s.%s' % (self.model._meta.label, self.name) + + def deconstruct(self): + """ + Return a 5-tuple of the form (as_manager (True), manager_class, + queryset_class, args, kwargs). + + Raise a ValueError if the manager is dynamically generated. + """ + qs_class = self._queryset_class + if getattr(self, '_built_with_as_manager', False): + # using MyQuerySet.as_manager() + return ( + True, # as_manager + None, # manager_class + '%s.%s' % (qs_class.__module__, qs_class.__name__), # qs_class + None, # args + None, # kwargs + ) + else: + module_name = self.__module__ + name = self.__class__.__name__ + # Make sure it's actually there and not an inner class + module = import_module(module_name) + if not hasattr(module, name): + raise ValueError( + "Could not find manager %s in %s.\n" + "Please note that you need to inherit from managers you " + "dynamically generated with 'from_queryset()'." + % (name, module_name) + ) + return ( + False, # as_manager + '%s.%s' % (module_name, name), # manager_class + None, # qs_class + self._constructor_args[0], # args + self._constructor_args[1], # kwargs + ) + + def check(self, **kwargs): + return [] + + @classmethod + def _get_queryset_methods(cls, queryset_class): + def create_method(name, method): + def manager_method(self, *args, **kwargs): + return getattr(self.get_queryset(), name)(*args, **kwargs) + manager_method.__name__ = method.__name__ + manager_method.__doc__ = method.__doc__ + return manager_method + + new_methods = {} + for name, method in inspect.getmembers(queryset_class, predicate=inspect.isfunction): + # Only copy missing methods. + if hasattr(cls, name): + continue + # Only copy public methods or methods with the attribute `queryset_only=False`. + queryset_only = getattr(method, 'queryset_only', None) + if queryset_only or (queryset_only is None and name.startswith('_')): + continue + # Copy the method onto the manager. + new_methods[name] = create_method(name, method) + return new_methods + + @classmethod + def from_queryset(cls, queryset_class, class_name=None): + if class_name is None: + class_name = '%sFrom%s' % (cls.__name__, queryset_class.__name__) + return type(class_name, (cls,), { + '_queryset_class': queryset_class, + **cls._get_queryset_methods(queryset_class), + }) + + def contribute_to_class(self, model, name): + self.name = self.name or name + self.model = model + + setattr(model, name, ManagerDescriptor(self)) + + model._meta.add_manager(self) + + def _set_creation_counter(self): + """ + Set the creation counter value for this instance and increment the + class-level copy. + """ + self.creation_counter = BaseManager.creation_counter + BaseManager.creation_counter += 1 + + def db_manager(self, using=None, hints=None): + obj = copy.copy(self) + obj._db = using or self._db + obj._hints = hints or self._hints + return obj + + @property + def db(self): + return self._db or router.db_for_read(self.model, **self._hints) + + ####################### + # PROXIES TO QUERYSET # + ####################### + + def get_queryset(self): + """ + Return a new QuerySet object. Subclasses can override this method to + customize the behavior of the Manager. + """ + return self._queryset_class(model=self.model, using=self._db, hints=self._hints) + + def all(self): + # We can't proxy this method through the `QuerySet` like we do for the + # rest of the `QuerySet` methods. This is because `QuerySet.all()` + # works by creating a "copy" of the current queryset and in making said + # copy, all the cached `prefetch_related` lookups are lost. See the + # implementation of `RelatedManager.get_queryset()` for a better + # understanding of how this comes into play. + return self.get_queryset() + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + self._constructor_args == other._constructor_args + ) + + def __hash__(self): + return id(self) + + +class Manager(BaseManager.from_queryset(QuerySet)): + pass + + +class ManagerDescriptor: + + def __init__(self, manager): + self.manager = manager + + def __get__(self, instance, cls=None): + if instance is not None: + raise AttributeError("Manager isn't accessible via %s instances" % cls.__name__) + + if cls._meta.abstract: + raise AttributeError("Manager isn't available; %s is abstract" % ( + cls._meta.object_name, + )) + + if cls._meta.swapped: + raise AttributeError( + "Manager isn't available; '%s.%s' has been swapped for '%s'" % ( + cls._meta.app_label, + cls._meta.object_name, + cls._meta.swapped, + ) + ) + + return cls._meta.managers_map[self.manager.name] + + +class EmptyManager(Manager): + def __init__(self, model): + super().__init__() + self.model = model + + def get_queryset(self): + return super().get_queryset().none() diff --git a/env/lib/python3.5/site-packages/django/db/models/options.py b/env/lib/python3.5/site-packages/django/db/models/options.py new file mode 100644 index 0000000..c0c9253 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/options.py @@ -0,0 +1,827 @@ +import copy +import inspect +from bisect import bisect +from collections import OrderedDict, defaultdict + +from django.apps import apps +from django.conf import settings +from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured +from django.db import connections +from django.db.models import Manager +from django.db.models.fields import AutoField +from django.db.models.fields.proxy import OrderWrt +from django.db.models.query_utils import PathInfo +from django.utils.datastructures import ImmutableList, OrderedSet +from django.utils.functional import cached_property +from django.utils.text import camel_case_to_spaces, format_lazy +from django.utils.translation import override + +PROXY_PARENTS = object() + +EMPTY_RELATION_TREE = () + +IMMUTABLE_WARNING = ( + "The return type of '%s' should never be mutated. If you want to manipulate this list " + "for your own use, make a copy first." +) + +DEFAULT_NAMES = ( + 'verbose_name', 'verbose_name_plural', 'db_table', 'ordering', + 'unique_together', 'permissions', 'get_latest_by', 'order_with_respect_to', + 'app_label', 'db_tablespace', 'abstract', 'managed', 'proxy', 'swappable', + 'auto_created', 'index_together', 'apps', 'default_permissions', + 'select_on_save', 'default_related_name', 'required_db_features', + 'required_db_vendor', 'base_manager_name', 'default_manager_name', + 'indexes', + # For backwards compatibility with Django 1.11. RemovedInDjango30Warning + 'manager_inheritance_from_future', +) + + +def normalize_together(option_together): + """ + option_together can be either a tuple of tuples, or a single + tuple of two strings. Normalize it to a tuple of tuples, so that + calling code can uniformly expect that. + """ + try: + if not option_together: + return () + if not isinstance(option_together, (tuple, list)): + raise TypeError + first_element = option_together[0] + if not isinstance(first_element, (tuple, list)): + option_together = (option_together,) + # Normalize everything to tuples + return tuple(tuple(ot) for ot in option_together) + except TypeError: + # If the value of option_together isn't valid, return it + # verbatim; this will be picked up by the check framework later. + return option_together + + +def make_immutable_fields_list(name, data): + return ImmutableList(data, warning=IMMUTABLE_WARNING % name) + + +class Options: + FORWARD_PROPERTIES = { + 'fields', 'many_to_many', 'concrete_fields', 'local_concrete_fields', + '_forward_fields_map', 'managers', 'managers_map', 'base_manager', + 'default_manager', + } + REVERSE_PROPERTIES = {'related_objects', 'fields_map', '_relation_tree'} + + default_apps = apps + + def __init__(self, meta, app_label=None): + self._get_fields_cache = {} + self.local_fields = [] + self.local_many_to_many = [] + self.private_fields = [] + self.local_managers = [] + self.base_manager_name = None + self.default_manager_name = None + self.model_name = None + self.verbose_name = None + self.verbose_name_plural = None + self.db_table = '' + self.ordering = [] + self._ordering_clash = False + self.indexes = [] + self.unique_together = [] + self.index_together = [] + self.select_on_save = False + self.default_permissions = ('add', 'change', 'delete', 'view') + self.permissions = [] + self.object_name = None + self.app_label = app_label + self.get_latest_by = None + self.order_with_respect_to = None + self.db_tablespace = settings.DEFAULT_TABLESPACE + self.required_db_features = [] + self.required_db_vendor = None + self.meta = meta + self.pk = None + self.auto_field = None + self.abstract = False + self.managed = True + self.proxy = False + # For any class that is a proxy (including automatically created + # classes for deferred object loading), proxy_for_model tells us + # which class this model is proxying. Note that proxy_for_model + # can create a chain of proxy models. For non-proxy models, the + # variable is always None. + self.proxy_for_model = None + # For any non-abstract class, the concrete class is the model + # in the end of the proxy_for_model chain. In particular, for + # concrete models, the concrete_model is always the class itself. + self.concrete_model = None + self.swappable = None + self.parents = OrderedDict() + self.auto_created = False + + # List of all lookups defined in ForeignKey 'limit_choices_to' options + # from *other* models. Needed for some admin checks. Internal use only. + self.related_fkey_lookups = [] + + # A custom app registry to use, if you're making a separate model set. + self.apps = self.default_apps + + self.default_related_name = None + + @property + def label(self): + return '%s.%s' % (self.app_label, self.object_name) + + @property + def label_lower(self): + return '%s.%s' % (self.app_label, self.model_name) + + @property + def app_config(self): + # Don't go through get_app_config to avoid triggering imports. + return self.apps.app_configs.get(self.app_label) + + @property + def installed(self): + return self.app_config is not None + + def contribute_to_class(self, cls, name): + from django.db import connection + from django.db.backends.utils import truncate_name + + cls._meta = self + self.model = cls + # First, construct the default values for these options. + self.object_name = cls.__name__ + self.model_name = self.object_name.lower() + self.verbose_name = camel_case_to_spaces(self.object_name) + + # Store the original user-defined values for each option, + # for use when serializing the model definition + self.original_attrs = {} + + # Next, apply any overridden values from 'class Meta'. + if self.meta: + meta_attrs = self.meta.__dict__.copy() + for name in self.meta.__dict__: + # Ignore any private attributes that Django doesn't care about. + # NOTE: We can't modify a dictionary's contents while looping + # over it, so we loop over the *original* dictionary instead. + if name.startswith('_'): + del meta_attrs[name] + for attr_name in DEFAULT_NAMES: + if attr_name in meta_attrs: + setattr(self, attr_name, meta_attrs.pop(attr_name)) + self.original_attrs[attr_name] = getattr(self, attr_name) + elif hasattr(self.meta, attr_name): + setattr(self, attr_name, getattr(self.meta, attr_name)) + self.original_attrs[attr_name] = getattr(self, attr_name) + + self.unique_together = normalize_together(self.unique_together) + self.index_together = normalize_together(self.index_together) + + # verbose_name_plural is a special case because it uses a 's' + # by default. + if self.verbose_name_plural is None: + self.verbose_name_plural = format_lazy('{}s', self.verbose_name) + + # order_with_respect_and ordering are mutually exclusive. + self._ordering_clash = bool(self.ordering and self.order_with_respect_to) + + # Any leftover attributes must be invalid. + if meta_attrs != {}: + raise TypeError("'class Meta' got invalid attribute(s): %s" % ','.join(meta_attrs)) + else: + self.verbose_name_plural = format_lazy('{}s', self.verbose_name) + del self.meta + + # If the db_table wasn't provided, use the app_label + model_name. + if not self.db_table: + self.db_table = "%s_%s" % (self.app_label, self.model_name) + self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) + + def _prepare(self, model): + if self.order_with_respect_to: + # The app registry will not be ready at this point, so we cannot + # use get_field(). + query = self.order_with_respect_to + try: + self.order_with_respect_to = next( + f for f in self._get_fields(reverse=False) + if f.name == query or f.attname == query + ) + except StopIteration: + raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, query)) + + self.ordering = ('_order',) + if not any(isinstance(field, OrderWrt) for field in model._meta.local_fields): + model.add_to_class('_order', OrderWrt()) + else: + self.order_with_respect_to = None + + if self.pk is None: + if self.parents: + # Promote the first parent link in lieu of adding yet another + # field. + field = next(iter(self.parents.values())) + # Look for a local field with the same name as the + # first parent link. If a local field has already been + # created, use it instead of promoting the parent + already_created = [fld for fld in self.local_fields if fld.name == field.name] + if already_created: + field = already_created[0] + field.primary_key = True + self.setup_pk(field) + if not field.remote_field.parent_link: + raise ImproperlyConfigured( + 'Add parent_link=True to %s.' % field, + ) + else: + auto = AutoField(verbose_name='ID', primary_key=True, auto_created=True) + model.add_to_class('id', auto) + + def add_manager(self, manager): + self.local_managers.append(manager) + self._expire_cache() + + def add_field(self, field, private=False): + # Insert the given field in the order in which it was created, using + # the "creation_counter" attribute of the field. + # Move many-to-many related fields from self.fields into + # self.many_to_many. + if private: + self.private_fields.append(field) + elif field.is_relation and field.many_to_many: + self.local_many_to_many.insert(bisect(self.local_many_to_many, field), field) + else: + self.local_fields.insert(bisect(self.local_fields, field), field) + self.setup_pk(field) + + # If the field being added is a relation to another known field, + # expire the cache on this field and the forward cache on the field + # being referenced, because there will be new relationships in the + # cache. Otherwise, expire the cache of references *to* this field. + # The mechanism for getting at the related model is slightly odd - + # ideally, we'd just ask for field.related_model. However, related_model + # is a cached property, and all the models haven't been loaded yet, so + # we need to make sure we don't cache a string reference. + if field.is_relation and hasattr(field.remote_field, 'model') and field.remote_field.model: + try: + field.remote_field.model._meta._expire_cache(forward=False) + except AttributeError: + pass + self._expire_cache() + else: + self._expire_cache(reverse=False) + + def setup_pk(self, field): + if not self.pk and field.primary_key: + self.pk = field + field.serialize = False + + def setup_proxy(self, target): + """ + Do the internal setup so that the current model is a proxy for + "target". + """ + self.pk = target._meta.pk + self.proxy_for_model = target + self.db_table = target._meta.db_table + + def __repr__(self): + return '' % self.object_name + + def __str__(self): + return "%s.%s" % (self.app_label, self.model_name) + + def can_migrate(self, connection): + """ + Return True if the model can/should be migrated on the `connection`. + `connection` can be either a real connection or a connection alias. + """ + if self.proxy or self.swapped or not self.managed: + return False + if isinstance(connection, str): + connection = connections[connection] + if self.required_db_vendor: + return self.required_db_vendor == connection.vendor + if self.required_db_features: + return all(getattr(connection.features, feat, False) + for feat in self.required_db_features) + return True + + @property + def verbose_name_raw(self): + """Return the untranslated verbose name.""" + with override(None): + return str(self.verbose_name) + + @property + def swapped(self): + """ + Has this model been swapped out for another? If so, return the model + name of the replacement; otherwise, return None. + + For historical reasons, model name lookups using get_model() are + case insensitive, so we make sure we are case insensitive here. + """ + if self.swappable: + swapped_for = getattr(settings, self.swappable, None) + if swapped_for: + try: + swapped_label, swapped_object = swapped_for.split('.') + except ValueError: + # setting not in the format app_label.model_name + # raising ImproperlyConfigured here causes problems with + # test cleanup code - instead it is raised in get_user_model + # or as part of validation. + return swapped_for + + if '%s.%s' % (swapped_label, swapped_object.lower()) != self.label_lower: + return swapped_for + return None + + @cached_property + def managers(self): + managers = [] + seen_managers = set() + bases = (b for b in self.model.mro() if hasattr(b, '_meta')) + for depth, base in enumerate(bases): + for manager in base._meta.local_managers: + if manager.name in seen_managers: + continue + + manager = copy.copy(manager) + manager.model = self.model + seen_managers.add(manager.name) + managers.append((depth, manager.creation_counter, manager)) + + return make_immutable_fields_list( + "managers", + (m[2] for m in sorted(managers)), + ) + + @cached_property + def managers_map(self): + return {manager.name: manager for manager in self.managers} + + @cached_property + def base_manager(self): + base_manager_name = self.base_manager_name + if not base_manager_name: + # Get the first parent's base_manager_name if there's one. + for parent in self.model.mro()[1:]: + if hasattr(parent, '_meta'): + if parent._base_manager.name != '_base_manager': + base_manager_name = parent._base_manager.name + break + + if base_manager_name: + try: + return self.managers_map[base_manager_name] + except KeyError: + raise ValueError( + "%s has no manager named %r" % ( + self.object_name, + base_manager_name, + ) + ) + + manager = Manager() + manager.name = '_base_manager' + manager.model = self.model + manager.auto_created = True + return manager + + @cached_property + def default_manager(self): + default_manager_name = self.default_manager_name + if not default_manager_name and not self.local_managers: + # Get the first parent's default_manager_name if there's one. + for parent in self.model.mro()[1:]: + if hasattr(parent, '_meta'): + default_manager_name = parent._meta.default_manager_name + break + + if default_manager_name: + try: + return self.managers_map[default_manager_name] + except KeyError: + raise ValueError( + "%s has no manager named %r" % ( + self.object_name, + default_manager_name, + ) + ) + + if self.managers: + return self.managers[0] + + @cached_property + def fields(self): + """ + Return a list of all forward fields on the model and its parents, + excluding ManyToManyFields. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + # For legacy reasons, the fields property should only contain forward + # fields that are not private or with a m2m cardinality. Therefore we + # pass these three filters as filters to the generator. + # The third lambda is a longwinded way of checking f.related_model - we don't + # use that property directly because related_model is a cached property, + # and all the models may not have been loaded yet; we don't want to cache + # the string reference to the related_model. + def is_not_an_m2m_field(f): + return not (f.is_relation and f.many_to_many) + + def is_not_a_generic_relation(f): + return not (f.is_relation and f.one_to_many) + + def is_not_a_generic_foreign_key(f): + return not ( + f.is_relation and f.many_to_one and not (hasattr(f.remote_field, 'model') and f.remote_field.model) + ) + + return make_immutable_fields_list( + "fields", + (f for f in self._get_fields(reverse=False) + if is_not_an_m2m_field(f) and is_not_a_generic_relation(f) and is_not_a_generic_foreign_key(f)) + ) + + @cached_property + def concrete_fields(self): + """ + Return a list of all concrete fields on the model and its parents. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + return make_immutable_fields_list( + "concrete_fields", (f for f in self.fields if f.concrete) + ) + + @cached_property + def local_concrete_fields(self): + """ + Return a list of all concrete fields on the model. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + return make_immutable_fields_list( + "local_concrete_fields", (f for f in self.local_fields if f.concrete) + ) + + @cached_property + def many_to_many(self): + """ + Return a list of all many to many fields on the model and its parents. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this list. + """ + return make_immutable_fields_list( + "many_to_many", + (f for f in self._get_fields(reverse=False) if f.is_relation and f.many_to_many) + ) + + @cached_property + def related_objects(self): + """ + Return all related objects pointing to the current model. The related + objects can come from a one-to-one, one-to-many, or many-to-many field + relation type. + + Private API intended only to be used by Django itself; get_fields() + combined with filtering of field properties is the public API for + obtaining this field list. + """ + all_related_fields = self._get_fields(forward=False, reverse=True, include_hidden=True) + return make_immutable_fields_list( + "related_objects", + (obj for obj in all_related_fields if not obj.hidden or obj.field.many_to_many) + ) + + @cached_property + def _forward_fields_map(self): + res = {} + fields = self._get_fields(reverse=False) + for field in fields: + res[field.name] = field + # Due to the way Django's internals work, get_field() should also + # be able to fetch a field by attname. In the case of a concrete + # field with relation, includes the *_id name too + try: + res[field.attname] = field + except AttributeError: + pass + return res + + @cached_property + def fields_map(self): + res = {} + fields = self._get_fields(forward=False, include_hidden=True) + for field in fields: + res[field.name] = field + # Due to the way Django's internals work, get_field() should also + # be able to fetch a field by attname. In the case of a concrete + # field with relation, includes the *_id name too + try: + res[field.attname] = field + except AttributeError: + pass + return res + + def get_field(self, field_name): + """ + Return a field instance given the name of a forward or reverse field. + """ + try: + # In order to avoid premature loading of the relation tree + # (expensive) we prefer checking if the field is a forward field. + return self._forward_fields_map[field_name] + except KeyError: + # If the app registry is not ready, reverse fields are + # unavailable, therefore we throw a FieldDoesNotExist exception. + if not self.apps.models_ready: + raise FieldDoesNotExist( + "%s has no field named '%s'. The app cache isn't ready yet, " + "so if this is an auto-created related field, it won't " + "be available yet." % (self.object_name, field_name) + ) + + try: + # Retrieve field instance by name from cached or just-computed + # field map. + return self.fields_map[field_name] + except KeyError: + raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name)) + + def get_base_chain(self, model): + """ + Return a list of parent classes leading to `model` (ordered from + closest to most distant ancestor). This has to handle the case where + `model` is a grandparent or even more distant relation. + """ + if not self.parents: + return [] + if model in self.parents: + return [model] + for parent in self.parents: + res = parent._meta.get_base_chain(model) + if res: + res.insert(0, parent) + return res + return [] + + def get_parent_list(self): + """ + Return all the ancestors of this model as a list ordered by MRO. + Useful for determining if something is an ancestor, regardless of lineage. + """ + result = OrderedSet(self.parents) + for parent in self.parents: + for ancestor in parent._meta.get_parent_list(): + result.add(ancestor) + return list(result) + + def get_ancestor_link(self, ancestor): + """ + Return the field on the current model which points to the given + "ancestor". This is possible an indirect link (a pointer to a parent + model, which points, eventually, to the ancestor). Used when + constructing table joins for model inheritance. + + Return None if the model isn't an ancestor of this one. + """ + if ancestor in self.parents: + return self.parents[ancestor] + for parent in self.parents: + # Tries to get a link field from the immediate parent + parent_link = parent._meta.get_ancestor_link(ancestor) + if parent_link: + # In case of a proxied model, the first link + # of the chain to the ancestor is that parent + # links + return self.parents[parent] or parent_link + + def get_path_to_parent(self, parent): + """ + Return a list of PathInfos containing the path from the current + model to the parent model, or an empty list if parent is not a + parent of the current model. + """ + if self.model is parent: + return [] + # Skip the chain of proxy to the concrete proxied model. + proxied_model = self.concrete_model + path = [] + opts = self + for int_model in self.get_base_chain(parent): + if int_model is proxied_model: + opts = int_model._meta + else: + final_field = opts.parents[int_model] + targets = (final_field.remote_field.get_related_field(),) + opts = int_model._meta + path.append(PathInfo( + from_opts=final_field.model._meta, + to_opts=opts, + target_fields=targets, + join_field=final_field, + m2m=False, + direct=True, + filtered_relation=None, + )) + return path + + def get_path_from_parent(self, parent): + """ + Return a list of PathInfos containing the path from the parent + model to the current model, or an empty list if parent is not a + parent of the current model. + """ + if self.model is parent: + return [] + model = self.concrete_model + # Get a reversed base chain including both the current and parent + # models. + chain = model._meta.get_base_chain(parent) + chain.reverse() + chain.append(model) + # Construct a list of the PathInfos between models in chain. + path = [] + for i, ancestor in enumerate(chain[:-1]): + child = chain[i + 1] + link = child._meta.get_ancestor_link(ancestor) + path.extend(link.get_reverse_path_info()) + return path + + def _populate_directed_relation_graph(self): + """ + This method is used by each model to find its reverse objects. As this + method is very expensive and is accessed frequently (it looks up every + field in a model, in every app), it is computed on first access and then + is set as a property on every model. + """ + related_objects_graph = defaultdict(list) + + all_models = self.apps.get_models(include_auto_created=True) + for model in all_models: + opts = model._meta + # Abstract model's fields are copied to child models, hence we will + # see the fields from the child models. + if opts.abstract: + continue + fields_with_relations = ( + f for f in opts._get_fields(reverse=False, include_parents=False) + if f.is_relation and f.related_model is not None + ) + for f in fields_with_relations: + if not isinstance(f.remote_field.model, str): + related_objects_graph[f.remote_field.model._meta.concrete_model._meta].append(f) + + for model in all_models: + # Set the relation_tree using the internal __dict__. In this way + # we avoid calling the cached property. In attribute lookup, + # __dict__ takes precedence over a data descriptor (such as + # @cached_property). This means that the _meta._relation_tree is + # only called if related_objects is not in __dict__. + related_objects = related_objects_graph[model._meta.concrete_model._meta] + model._meta.__dict__['_relation_tree'] = related_objects + # It seems it is possible that self is not in all_models, so guard + # against that with default for get(). + return self.__dict__.get('_relation_tree', EMPTY_RELATION_TREE) + + @cached_property + def _relation_tree(self): + return self._populate_directed_relation_graph() + + def _expire_cache(self, forward=True, reverse=True): + # This method is usually called by apps.cache_clear(), when the + # registry is finalized, or when a new field is added. + if forward: + for cache_key in self.FORWARD_PROPERTIES: + if cache_key in self.__dict__: + delattr(self, cache_key) + if reverse and not self.abstract: + for cache_key in self.REVERSE_PROPERTIES: + if cache_key in self.__dict__: + delattr(self, cache_key) + self._get_fields_cache = {} + + def get_fields(self, include_parents=True, include_hidden=False): + """ + Return a list of fields associated to the model. By default, include + forward and reverse fields, fields derived from inheritance, but not + hidden fields. The returned fields can be changed using the parameters: + + - include_parents: include fields derived from inheritance + - include_hidden: include fields that have a related_name that + starts with a "+" + """ + if include_parents is False: + include_parents = PROXY_PARENTS + return self._get_fields(include_parents=include_parents, include_hidden=include_hidden) + + def _get_fields(self, forward=True, reverse=True, include_parents=True, include_hidden=False, + seen_models=None): + """ + Internal helper function to return fields of the model. + * If forward=True, then fields defined on this model are returned. + * If reverse=True, then relations pointing to this model are returned. + * If include_hidden=True, then fields with is_hidden=True are returned. + * The include_parents argument toggles if fields from parent models + should be included. It has three values: True, False, and + PROXY_PARENTS. When set to PROXY_PARENTS, the call will return all + fields defined for the current model or any of its parents in the + parent chain to the model's concrete model. + """ + if include_parents not in (True, False, PROXY_PARENTS): + raise TypeError("Invalid argument for include_parents: %s" % (include_parents,)) + # This helper function is used to allow recursion in ``get_fields()`` + # implementation and to provide a fast way for Django's internals to + # access specific subsets of fields. + + # We must keep track of which models we have already seen. Otherwise we + # could include the same field multiple times from different models. + topmost_call = seen_models is None + if topmost_call: + seen_models = set() + seen_models.add(self.model) + + # Creates a cache key composed of all arguments + cache_key = (forward, reverse, include_parents, include_hidden, topmost_call) + + try: + # In order to avoid list manipulation. Always return a shallow copy + # of the results. + return self._get_fields_cache[cache_key] + except KeyError: + pass + + fields = [] + # Recursively call _get_fields() on each parent, with the same + # options provided in this call. + if include_parents is not False: + for parent in self.parents: + # In diamond inheritance it is possible that we see the same + # model from two different routes. In that case, avoid adding + # fields from the same parent again. + if parent in seen_models: + continue + if (parent._meta.concrete_model != self.concrete_model and + include_parents == PROXY_PARENTS): + continue + for obj in parent._meta._get_fields( + forward=forward, reverse=reverse, include_parents=include_parents, + include_hidden=include_hidden, seen_models=seen_models): + if not getattr(obj, 'parent_link', False) or obj.model == self.concrete_model: + fields.append(obj) + if reverse and not self.proxy: + # Tree is computed once and cached until the app cache is expired. + # It is composed of a list of fields pointing to the current model + # from other models. + all_fields = self._relation_tree + for field in all_fields: + # If hidden fields should be included or the relation is not + # intentionally hidden, add to the fields dict. + if include_hidden or not field.remote_field.hidden: + fields.append(field.remote_field) + + if forward: + fields += self.local_fields + fields += self.local_many_to_many + # Private fields are recopied to each child model, and they get a + # different model as field.model in each child. Hence we have to + # add the private fields separately from the topmost call. If we + # did this recursively similar to local_fields, we would get field + # instances with field.model != self.model. + if topmost_call: + fields += self.private_fields + + # In order to avoid list manipulation. Always + # return a shallow copy of the results + fields = make_immutable_fields_list("get_fields()", fields) + + # Store result into cache for later access + self._get_fields_cache[cache_key] = fields + return fields + + @cached_property + def _property_names(self): + """Return a set of the names of the properties defined on the model.""" + names = [] + for name in dir(self.model): + attr = inspect.getattr_static(self.model, name) + if isinstance(attr, property): + names.append(name) + return frozenset(names) diff --git a/env/lib/python3.5/site-packages/django/db/models/query.py b/env/lib/python3.5/site-packages/django/db/models/query.py new file mode 100644 index 0000000..8642d6f --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/query.py @@ -0,0 +1,1841 @@ +""" +The main QuerySet implementation. This provides the public API for the ORM. +""" + +import copy +import operator +import warnings +from collections import OrderedDict, namedtuple +from functools import lru_cache +from itertools import chain + +from django.conf import settings +from django.core import exceptions +from django.db import ( + DJANGO_VERSION_PICKLE_KEY, IntegrityError, connections, router, + transaction, +) +from django.db.models import DateField, DateTimeField, sql +from django.db.models.constants import LOOKUP_SEP +from django.db.models.deletion import Collector +from django.db.models.expressions import F +from django.db.models.fields import AutoField +from django.db.models.functions import Trunc +from django.db.models.query_utils import FilteredRelation, InvalidQuery, Q +from django.db.models.sql.constants import CURSOR, GET_ITERATOR_CHUNK_SIZE +from django.utils import timezone +from django.utils.deprecation import RemovedInDjango30Warning +from django.utils.functional import cached_property, partition +from django.utils.version import get_version + +# The maximum number of items to display in a QuerySet.__repr__ +REPR_OUTPUT_SIZE = 20 + +# Pull into this namespace for backwards compatibility. +EmptyResultSet = sql.EmptyResultSet + + +class BaseIterable: + def __init__(self, queryset, chunked_fetch=False, chunk_size=GET_ITERATOR_CHUNK_SIZE): + self.queryset = queryset + self.chunked_fetch = chunked_fetch + self.chunk_size = chunk_size + + +class ModelIterable(BaseIterable): + """Iterable that yields a model instance for each row.""" + + def __iter__(self): + queryset = self.queryset + db = queryset.db + compiler = queryset.query.get_compiler(using=db) + # Execute the query. This will also fill compiler.select, klass_info, + # and annotations. + results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) + select, klass_info, annotation_col_map = (compiler.select, compiler.klass_info, + compiler.annotation_col_map) + model_cls = klass_info['model'] + select_fields = klass_info['select_fields'] + model_fields_start, model_fields_end = select_fields[0], select_fields[-1] + 1 + init_list = [f[0].target.attname + for f in select[model_fields_start:model_fields_end]] + related_populators = get_related_populators(klass_info, select, db) + for row in compiler.results_iter(results): + obj = model_cls.from_db(db, init_list, row[model_fields_start:model_fields_end]) + for rel_populator in related_populators: + rel_populator.populate(row, obj) + if annotation_col_map: + for attr_name, col_pos in annotation_col_map.items(): + setattr(obj, attr_name, row[col_pos]) + + # Add the known related objects to the model, if there are any + if queryset._known_related_objects: + for field, rel_objs in queryset._known_related_objects.items(): + # Avoid overwriting objects loaded e.g. by select_related + if field.is_cached(obj): + continue + pk = getattr(obj, field.get_attname()) + try: + rel_obj = rel_objs[pk] + except KeyError: + pass # may happen in qs1 | qs2 scenarios + else: + setattr(obj, field.name, rel_obj) + + yield obj + + +class ValuesIterable(BaseIterable): + """ + Iterable returned by QuerySet.values() that yields a dict for each row. + """ + + def __iter__(self): + queryset = self.queryset + query = queryset.query + compiler = query.get_compiler(queryset.db) + + field_names = list(query.values_select) + extra_names = list(query.extra_select) + annotation_names = list(query.annotation_select) + + # extra(select=...) cols are always at the start of the row. + names = extra_names + field_names + annotation_names + + indexes = range(len(names)) + for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size): + yield {names[i]: row[i] for i in indexes} + + +class ValuesListIterable(BaseIterable): + """ + Iterable returned by QuerySet.values_list(flat=False) that yields a tuple + for each row. + """ + + def __iter__(self): + queryset = self.queryset + query = queryset.query + compiler = query.get_compiler(queryset.db) + + if queryset._fields: + field_names = list(query.values_select) + extra_names = list(query.extra_select) + annotation_names = list(query.annotation_select) + + # extra(select=...) cols are always at the start of the row. + names = extra_names + field_names + annotation_names + + fields = list(queryset._fields) + [f for f in annotation_names if f not in queryset._fields] + if fields != names: + # Reorder according to fields. + index_map = {name: idx for idx, name in enumerate(names)} + rowfactory = operator.itemgetter(*[index_map[f] for f in fields]) + return map( + rowfactory, + compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) + ) + return compiler.results_iter(tuple_expected=True, chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) + + +class NamedValuesListIterable(ValuesListIterable): + """ + Iterable returned by QuerySet.values_list(named=True) that yields a + namedtuple for each row. + """ + + @staticmethod + @lru_cache() + def create_namedtuple_class(*names): + # Cache namedtuple() with @lru_cache() since it's too slow to be + # called for every QuerySet evaluation. + return namedtuple('Row', names) + + def __iter__(self): + queryset = self.queryset + if queryset._fields: + names = queryset._fields + else: + query = queryset.query + names = [*query.extra_select, *query.values_select, *query.annotation_select] + tuple_class = self.create_namedtuple_class(*names) + new = tuple.__new__ + for row in super().__iter__(): + yield new(tuple_class, row) + + +class FlatValuesListIterable(BaseIterable): + """ + Iterable returned by QuerySet.values_list(flat=True) that yields single + values. + """ + + def __iter__(self): + queryset = self.queryset + compiler = queryset.query.get_compiler(queryset.db) + for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size): + yield row[0] + + +class QuerySet: + """Represent a lazy database lookup for a set of objects.""" + + def __init__(self, model=None, query=None, using=None, hints=None): + self.model = model + self._db = using + self._hints = hints or {} + self.query = query or sql.Query(self.model) + self._result_cache = None + self._sticky_filter = False + self._for_write = False + self._prefetch_related_lookups = () + self._prefetch_done = False + self._known_related_objects = {} # {rel_field: {pk: rel_obj}} + self._iterable_class = ModelIterable + self._fields = None + + def as_manager(cls): + # Address the circular dependency between `Queryset` and `Manager`. + from django.db.models.manager import Manager + manager = Manager.from_queryset(cls)() + manager._built_with_as_manager = True + return manager + as_manager.queryset_only = True + as_manager = classmethod(as_manager) + + ######################## + # PYTHON MAGIC METHODS # + ######################## + + def __deepcopy__(self, memo): + """Don't populate the QuerySet's cache.""" + obj = self.__class__() + for k, v in self.__dict__.items(): + if k == '_result_cache': + obj.__dict__[k] = None + else: + obj.__dict__[k] = copy.deepcopy(v, memo) + return obj + + def __getstate__(self): + # Force the cache to be fully populated. + self._fetch_all() + return {**self.__dict__, DJANGO_VERSION_PICKLE_KEY: get_version()} + + def __setstate__(self, state): + msg = None + pickled_version = state.get(DJANGO_VERSION_PICKLE_KEY) + if pickled_version: + current_version = get_version() + if current_version != pickled_version: + msg = ( + "Pickled queryset instance's Django version %s does not " + "match the current version %s." % (pickled_version, current_version) + ) + else: + msg = "Pickled queryset instance's Django version is not specified." + + if msg: + warnings.warn(msg, RuntimeWarning, stacklevel=2) + + self.__dict__.update(state) + + def __repr__(self): + data = list(self[:REPR_OUTPUT_SIZE + 1]) + if len(data) > REPR_OUTPUT_SIZE: + data[-1] = "...(remaining elements truncated)..." + return '<%s %r>' % (self.__class__.__name__, data) + + def __len__(self): + self._fetch_all() + return len(self._result_cache) + + def __iter__(self): + """ + The queryset iterator protocol uses three nested iterators in the + default case: + 1. sql.compiler.execute_sql() + - Returns 100 rows at time (constants.GET_ITERATOR_CHUNK_SIZE) + using cursor.fetchmany(). This part is responsible for + doing some column masking, and returning the rows in chunks. + 2. sql.compiler.results_iter() + - Returns one row at time. At this point the rows are still just + tuples. In some cases the return values are converted to + Python values at this location. + 3. self.iterator() + - Responsible for turning the rows into model objects. + """ + self._fetch_all() + return iter(self._result_cache) + + def __bool__(self): + self._fetch_all() + return bool(self._result_cache) + + def __getitem__(self, k): + """Retrieve an item or slice from the set of results.""" + if not isinstance(k, (int, slice)): + raise TypeError + assert ((not isinstance(k, slice) and (k >= 0)) or + (isinstance(k, slice) and (k.start is None or k.start >= 0) and + (k.stop is None or k.stop >= 0))), \ + "Negative indexing is not supported." + + if self._result_cache is not None: + return self._result_cache[k] + + if isinstance(k, slice): + qs = self._chain() + if k.start is not None: + start = int(k.start) + else: + start = None + if k.stop is not None: + stop = int(k.stop) + else: + stop = None + qs.query.set_limits(start, stop) + return list(qs)[::k.step] if k.step else qs + + qs = self._chain() + qs.query.set_limits(k, k + 1) + qs._fetch_all() + return qs._result_cache[0] + + def __and__(self, other): + self._merge_sanity_check(other) + if isinstance(other, EmptyQuerySet): + return other + if isinstance(self, EmptyQuerySet): + return self + combined = self._chain() + combined._merge_known_related_objects(other) + combined.query.combine(other.query, sql.AND) + return combined + + def __or__(self, other): + self._merge_sanity_check(other) + if isinstance(self, EmptyQuerySet): + return other + if isinstance(other, EmptyQuerySet): + return self + combined = self._chain() + combined._merge_known_related_objects(other) + combined.query.combine(other.query, sql.OR) + return combined + + #################################### + # METHODS THAT DO DATABASE QUERIES # + #################################### + + def _iterator(self, use_chunked_fetch, chunk_size): + yield from self._iterable_class(self, chunked_fetch=use_chunked_fetch, chunk_size=chunk_size) + + def iterator(self, chunk_size=2000): + """ + An iterator over the results from applying this QuerySet to the + database. + """ + if chunk_size <= 0: + raise ValueError('Chunk size must be strictly positive.') + use_chunked_fetch = not connections[self.db].settings_dict.get('DISABLE_SERVER_SIDE_CURSORS') + return self._iterator(use_chunked_fetch, chunk_size) + + def aggregate(self, *args, **kwargs): + """ + Return a dictionary containing the calculations (aggregation) + over the current queryset. + + If args is present the expression is passed as a kwarg using + the Aggregate object's default alias. + """ + if self.query.distinct_fields: + raise NotImplementedError("aggregate() + distinct(fields) not implemented.") + self._validate_values_are_expressions(args + tuple(kwargs.values()), method_name='aggregate') + for arg in args: + # The default_alias property raises TypeError if default_alias + # can't be set automatically or AttributeError if it isn't an + # attribute. + try: + arg.default_alias + except (AttributeError, TypeError): + raise TypeError("Complex aggregates require an alias") + kwargs[arg.default_alias] = arg + + query = self.query.chain() + for (alias, aggregate_expr) in kwargs.items(): + query.add_annotation(aggregate_expr, alias, is_summary=True) + if not query.annotations[alias].contains_aggregate: + raise TypeError("%s is not an aggregate expression" % alias) + return query.get_aggregation(self.db, kwargs) + + def count(self): + """ + Perform a SELECT COUNT() and return the number of records as an + integer. + + If the QuerySet is already fully cached, return the length of the + cached results set to avoid multiple SELECT COUNT(*) calls. + """ + if self._result_cache is not None: + return len(self._result_cache) + + return self.query.get_count(using=self.db) + + def get(self, *args, **kwargs): + """ + Perform the query and return a single object matching the given + keyword arguments. + """ + clone = self.filter(*args, **kwargs) + if self.query.can_filter() and not self.query.distinct_fields: + clone = clone.order_by() + num = len(clone) + if num == 1: + return clone._result_cache[0] + if not num: + raise self.model.DoesNotExist( + "%s matching query does not exist." % + self.model._meta.object_name + ) + raise self.model.MultipleObjectsReturned( + "get() returned more than one %s -- it returned %s!" % + (self.model._meta.object_name, num) + ) + + def create(self, **kwargs): + """ + Create a new object with the given kwargs, saving it to the database + and returning the created object. + """ + obj = self.model(**kwargs) + self._for_write = True + obj.save(force_insert=True, using=self.db) + return obj + + def _populate_pk_values(self, objs): + for obj in objs: + if obj.pk is None: + obj.pk = obj._meta.pk.get_pk_value_on_save(obj) + + def bulk_create(self, objs, batch_size=None): + """ + Insert each of the instances into the database. Do *not* call + save() on each of the instances, do not send any pre/post_save + signals, and do not set the primary key attribute if it is an + autoincrement field (except if features.can_return_ids_from_bulk_insert=True). + Multi-table models are not supported. + """ + # When you bulk insert you don't get the primary keys back (if it's an + # autoincrement, except if can_return_ids_from_bulk_insert=True), so + # you can't insert into the child tables which references this. There + # are two workarounds: + # 1) This could be implemented if you didn't have an autoincrement pk + # 2) You could do it by doing O(n) normal inserts into the parent + # tables to get the primary keys back and then doing a single bulk + # insert into the childmost table. + # We currently set the primary keys on the objects when using + # PostgreSQL via the RETURNING ID clause. It should be possible for + # Oracle as well, but the semantics for extracting the primary keys is + # trickier so it's not done yet. + assert batch_size is None or batch_size > 0 + # Check that the parents share the same concrete model with the our + # model to detect the inheritance pattern ConcreteGrandParent -> + # MultiTableParent -> ProxyChild. Simply checking self.model._meta.proxy + # would not identify that case as involving multiple tables. + for parent in self.model._meta.get_parent_list(): + if parent._meta.concrete_model is not self.model._meta.concrete_model: + raise ValueError("Can't bulk create a multi-table inherited model") + if not objs: + return objs + self._for_write = True + connection = connections[self.db] + fields = self.model._meta.concrete_fields + objs = list(objs) + self._populate_pk_values(objs) + with transaction.atomic(using=self.db, savepoint=False): + objs_with_pk, objs_without_pk = partition(lambda o: o.pk is None, objs) + if objs_with_pk: + self._batched_insert(objs_with_pk, fields, batch_size) + for obj_with_pk in objs_with_pk: + obj_with_pk._state.adding = False + obj_with_pk._state.db = self.db + if objs_without_pk: + fields = [f for f in fields if not isinstance(f, AutoField)] + ids = self._batched_insert(objs_without_pk, fields, batch_size) + if connection.features.can_return_ids_from_bulk_insert: + assert len(ids) == len(objs_without_pk) + for obj_without_pk, pk in zip(objs_without_pk, ids): + obj_without_pk.pk = pk + obj_without_pk._state.adding = False + obj_without_pk._state.db = self.db + + return objs + + def get_or_create(self, defaults=None, **kwargs): + """ + Look up an object with the given kwargs, creating one if necessary. + Return a tuple of (object, created), where created is a boolean + specifying whether an object was created. + """ + lookup, params = self._extract_model_params(defaults, **kwargs) + # The get() needs to be targeted at the write database in order + # to avoid potential transaction consistency problems. + self._for_write = True + try: + return self.get(**lookup), False + except self.model.DoesNotExist: + return self._create_object_from_params(lookup, params) + + def update_or_create(self, defaults=None, **kwargs): + """ + Look up an object with the given kwargs, updating one with defaults + if it exists, otherwise create a new one. + Return a tuple (object, created), where created is a boolean + specifying whether an object was created. + """ + defaults = defaults or {} + lookup, params = self._extract_model_params(defaults, **kwargs) + self._for_write = True + with transaction.atomic(using=self.db): + try: + obj = self.select_for_update().get(**lookup) + except self.model.DoesNotExist: + # Lock the row so that a concurrent update is blocked until + # after update_or_create() has performed its save. + obj, created = self._create_object_from_params(lookup, params, lock=True) + if created: + return obj, created + for k, v in defaults.items(): + setattr(obj, k, v() if callable(v) else v) + obj.save(using=self.db) + return obj, False + + def _create_object_from_params(self, lookup, params, lock=False): + """ + Try to create an object using passed params. Used by get_or_create() + and update_or_create(). + """ + try: + with transaction.atomic(using=self.db): + params = {k: v() if callable(v) else v for k, v in params.items()} + obj = self.create(**params) + return obj, True + except IntegrityError as e: + try: + qs = self.select_for_update() if lock else self + return qs.get(**lookup), False + except self.model.DoesNotExist: + pass + raise e + + def _extract_model_params(self, defaults, **kwargs): + """ + Prepare `lookup` (kwargs that are valid model attributes), `params` + (for creating a model instance) based on given kwargs; for use by + get_or_create() and update_or_create(). + """ + defaults = defaults or {} + lookup = kwargs.copy() + for f in self.model._meta.fields: + if f.attname in lookup: + lookup[f.name] = lookup.pop(f.attname) + params = {k: v for k, v in kwargs.items() if LOOKUP_SEP not in k} + params.update(defaults) + property_names = self.model._meta._property_names + invalid_params = [] + for param in params: + try: + self.model._meta.get_field(param) + except exceptions.FieldDoesNotExist: + # It's okay to use a model's property if it has a setter. + if not (param in property_names and getattr(self.model, param).fset): + invalid_params.append(param) + if invalid_params: + raise exceptions.FieldError( + "Invalid field name(s) for model %s: '%s'." % ( + self.model._meta.object_name, + "', '".join(sorted(invalid_params)), + )) + return lookup, params + + def _earliest_or_latest(self, *fields, field_name=None): + """ + Return the latest object, according to the model's + 'get_latest_by' option or optional given field_name. + """ + if fields and field_name is not None: + raise ValueError('Cannot use both positional arguments and the field_name keyword argument.') + + if field_name is not None: + warnings.warn( + 'The field_name keyword argument to earliest() and latest() ' + 'is deprecated in favor of passing positional arguments.', + RemovedInDjango30Warning, + ) + order_by = (field_name,) + elif fields: + order_by = fields + else: + order_by = getattr(self.model._meta, 'get_latest_by') + if order_by and not isinstance(order_by, (tuple, list)): + order_by = (order_by,) + if order_by is None: + raise ValueError( + "earliest() and latest() require either fields as positional " + "arguments or 'get_latest_by' in the model's Meta." + ) + + assert self.query.can_filter(), \ + "Cannot change a query once a slice has been taken." + obj = self._chain() + obj.query.set_limits(high=1) + obj.query.clear_ordering(force_empty=True) + obj.query.add_ordering(*order_by) + return obj.get() + + def earliest(self, *fields, field_name=None): + return self._earliest_or_latest(*fields, field_name=field_name) + + def latest(self, *fields, field_name=None): + return self.reverse()._earliest_or_latest(*fields, field_name=field_name) + + def first(self): + """Return the first object of a query or None if no match is found.""" + for obj in (self if self.ordered else self.order_by('pk'))[:1]: + return obj + + def last(self): + """Return the last object of a query or None if no match is found.""" + for obj in (self.reverse() if self.ordered else self.order_by('-pk'))[:1]: + return obj + + def in_bulk(self, id_list=None, *, field_name='pk'): + """ + Return a dictionary mapping each of the given IDs to the object with + that ID. If `id_list` isn't provided, evaluate the entire QuerySet. + """ + assert self.query.can_filter(), \ + "Cannot use 'limit' or 'offset' with in_bulk" + if field_name != 'pk' and not self.model._meta.get_field(field_name).unique: + raise ValueError("in_bulk()'s field_name must be a unique field but %r isn't." % field_name) + if id_list is not None: + if not id_list: + return {} + filter_key = '{}__in'.format(field_name) + batch_size = connections[self.db].features.max_query_params + id_list = tuple(id_list) + # If the database has a limit on the number of query parameters + # (e.g. SQLite), retrieve objects in batches if necessary. + if batch_size and batch_size < len(id_list): + qs = () + for offset in range(0, len(id_list), batch_size): + batch = id_list[offset:offset + batch_size] + qs += tuple(self.filter(**{filter_key: batch}).order_by()) + else: + qs = self.filter(**{filter_key: id_list}).order_by() + else: + qs = self._chain() + return {getattr(obj, field_name): obj for obj in qs} + + def delete(self): + """Delete the records in the current QuerySet.""" + assert self.query.can_filter(), \ + "Cannot use 'limit' or 'offset' with delete." + + if self._fields is not None: + raise TypeError("Cannot call delete() after .values() or .values_list()") + + del_query = self._chain() + + # The delete is actually 2 queries - one to find related objects, + # and one to delete. Make sure that the discovery of related + # objects is performed on the same database as the deletion. + del_query._for_write = True + + # Disable non-supported fields. + del_query.query.select_for_update = False + del_query.query.select_related = False + del_query.query.clear_ordering(force_empty=True) + + collector = Collector(using=del_query.db) + collector.collect(del_query) + deleted, _rows_count = collector.delete() + + # Clear the result cache, in case this QuerySet gets reused. + self._result_cache = None + return deleted, _rows_count + + delete.alters_data = True + delete.queryset_only = True + + def _raw_delete(self, using): + """ + Delete objects found from the given queryset in single direct SQL + query. No signals are sent and there is no protection for cascades. + """ + return sql.DeleteQuery(self.model).delete_qs(self, using) + _raw_delete.alters_data = True + + def update(self, **kwargs): + """ + Update all elements in the current QuerySet, setting all the given + fields to the appropriate values. + """ + assert self.query.can_filter(), \ + "Cannot update a query once a slice has been taken." + self._for_write = True + query = self.query.chain(sql.UpdateQuery) + query.add_update_values(kwargs) + # Clear any annotations so that they won't be present in subqueries. + query._annotations = None + with transaction.atomic(using=self.db, savepoint=False): + rows = query.get_compiler(self.db).execute_sql(CURSOR) + self._result_cache = None + return rows + update.alters_data = True + + def _update(self, values): + """ + A version of update() that accepts field objects instead of field names. + Used primarily for model saving and not intended for use by general + code (it requires too much poking around at model internals to be + useful at that level). + """ + assert self.query.can_filter(), \ + "Cannot update a query once a slice has been taken." + query = self.query.chain(sql.UpdateQuery) + query.add_update_fields(values) + # Clear any annotations so that they won't be present in subqueries. + query._annotations = None + self._result_cache = None + return query.get_compiler(self.db).execute_sql(CURSOR) + _update.alters_data = True + _update.queryset_only = False + + def exists(self): + if self._result_cache is None: + return self.query.has_results(using=self.db) + return bool(self._result_cache) + + def _prefetch_related_objects(self): + # This method can only be called once the result cache has been filled. + prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups) + self._prefetch_done = True + + def explain(self, *, format=None, **options): + return self.query.explain(using=self.db, format=format, **options) + + ################################################## + # PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS # + ################################################## + + def raw(self, raw_query, params=None, translations=None, using=None): + if using is None: + using = self.db + qs = RawQuerySet(raw_query, model=self.model, params=params, translations=translations, using=using) + qs._prefetch_related_lookups = self._prefetch_related_lookups[:] + return qs + + def _values(self, *fields, **expressions): + clone = self._chain() + if expressions: + clone = clone.annotate(**expressions) + clone._fields = fields + clone.query.set_values(fields) + return clone + + def values(self, *fields, **expressions): + fields += tuple(expressions) + clone = self._values(*fields, **expressions) + clone._iterable_class = ValuesIterable + return clone + + def values_list(self, *fields, flat=False, named=False): + if flat and named: + raise TypeError("'flat' and 'named' can't be used together.") + if flat and len(fields) > 1: + raise TypeError("'flat' is not valid when values_list is called with more than one field.") + + field_names = {f for f in fields if not hasattr(f, 'resolve_expression')} + _fields = [] + expressions = {} + counter = 1 + for field in fields: + if hasattr(field, 'resolve_expression'): + field_id_prefix = getattr(field, 'default_alias', field.__class__.__name__.lower()) + while True: + field_id = field_id_prefix + str(counter) + counter += 1 + if field_id not in field_names: + break + expressions[field_id] = field + _fields.append(field_id) + else: + _fields.append(field) + + clone = self._values(*_fields, **expressions) + clone._iterable_class = ( + NamedValuesListIterable if named + else FlatValuesListIterable if flat + else ValuesListIterable + ) + return clone + + def dates(self, field_name, kind, order='ASC'): + """ + Return a list of date objects representing all available dates for + the given field_name, scoped to 'kind'. + """ + assert kind in ('year', 'month', 'week', 'day'), \ + "'kind' must be one of 'year', 'month', 'week', or 'day'." + assert order in ('ASC', 'DESC'), \ + "'order' must be either 'ASC' or 'DESC'." + return self.annotate( + datefield=Trunc(field_name, kind, output_field=DateField()), + plain_field=F(field_name) + ).values_list( + 'datefield', flat=True + ).distinct().filter(plain_field__isnull=False).order_by(('-' if order == 'DESC' else '') + 'datefield') + + def datetimes(self, field_name, kind, order='ASC', tzinfo=None): + """ + Return a list of datetime objects representing all available + datetimes for the given field_name, scoped to 'kind'. + """ + assert kind in ('year', 'month', 'week', 'day', 'hour', 'minute', 'second'), \ + "'kind' must be one of 'year', 'month', 'week', 'day', 'hour', 'minute', or 'second'." + assert order in ('ASC', 'DESC'), \ + "'order' must be either 'ASC' or 'DESC'." + if settings.USE_TZ: + if tzinfo is None: + tzinfo = timezone.get_current_timezone() + else: + tzinfo = None + return self.annotate( + datetimefield=Trunc(field_name, kind, output_field=DateTimeField(), tzinfo=tzinfo), + plain_field=F(field_name) + ).values_list( + 'datetimefield', flat=True + ).distinct().filter(plain_field__isnull=False).order_by(('-' if order == 'DESC' else '') + 'datetimefield') + + def none(self): + """Return an empty QuerySet.""" + clone = self._chain() + clone.query.set_empty() + return clone + + ################################################################## + # PUBLIC METHODS THAT ALTER ATTRIBUTES AND RETURN A NEW QUERYSET # + ################################################################## + + def all(self): + """ + Return a new QuerySet that is a copy of the current one. This allows a + QuerySet to proxy for a model manager in some cases. + """ + return self._chain() + + def filter(self, *args, **kwargs): + """ + Return a new QuerySet instance with the args ANDed to the existing + set. + """ + return self._filter_or_exclude(False, *args, **kwargs) + + def exclude(self, *args, **kwargs): + """ + Return a new QuerySet instance with NOT (args) ANDed to the existing + set. + """ + return self._filter_or_exclude(True, *args, **kwargs) + + def _filter_or_exclude(self, negate, *args, **kwargs): + if args or kwargs: + assert self.query.can_filter(), \ + "Cannot filter a query once a slice has been taken." + + clone = self._chain() + if negate: + clone.query.add_q(~Q(*args, **kwargs)) + else: + clone.query.add_q(Q(*args, **kwargs)) + return clone + + def complex_filter(self, filter_obj): + """ + Return a new QuerySet instance with filter_obj added to the filters. + + filter_obj can be a Q object or a dictionary of keyword lookup + arguments. + + This exists to support framework features such as 'limit_choices_to', + and usually it will be more natural to use other methods. + """ + if isinstance(filter_obj, Q): + clone = self._chain() + clone.query.add_q(filter_obj) + return clone + else: + return self._filter_or_exclude(None, **filter_obj) + + def _combinator_query(self, combinator, *other_qs, all=False): + # Clone the query to inherit the select list and everything + clone = self._chain() + # Clear limits and ordering so they can be reapplied + clone.query.clear_ordering(True) + clone.query.clear_limits() + clone.query.combined_queries = (self.query,) + tuple(qs.query for qs in other_qs) + clone.query.combinator = combinator + clone.query.combinator_all = all + return clone + + def union(self, *other_qs, all=False): + # If the query is an EmptyQuerySet, combine all nonempty querysets. + if isinstance(self, EmptyQuerySet): + qs = [q for q in other_qs if not isinstance(q, EmptyQuerySet)] + return qs[0]._combinator_query('union', *qs[1:], all=all) if qs else self + return self._combinator_query('union', *other_qs, all=all) + + def intersection(self, *other_qs): + # If any query is an EmptyQuerySet, return it. + if isinstance(self, EmptyQuerySet): + return self + for other in other_qs: + if isinstance(other, EmptyQuerySet): + return other + return self._combinator_query('intersection', *other_qs) + + def difference(self, *other_qs): + # If the query is an EmptyQuerySet, return it. + if isinstance(self, EmptyQuerySet): + return self + return self._combinator_query('difference', *other_qs) + + def select_for_update(self, nowait=False, skip_locked=False, of=()): + """ + Return a new QuerySet instance that will select objects with a + FOR UPDATE lock. + """ + if nowait and skip_locked: + raise ValueError('The nowait option cannot be used with skip_locked.') + obj = self._chain() + obj._for_write = True + obj.query.select_for_update = True + obj.query.select_for_update_nowait = nowait + obj.query.select_for_update_skip_locked = skip_locked + obj.query.select_for_update_of = of + return obj + + def select_related(self, *fields): + """ + Return a new QuerySet instance that will select related objects. + + If fields are specified, they must be ForeignKey fields and only those + related objects are included in the selection. + + If select_related(None) is called, clear the list. + """ + + if self._fields is not None: + raise TypeError("Cannot call select_related() after .values() or .values_list()") + + obj = self._chain() + if fields == (None,): + obj.query.select_related = False + elif fields: + obj.query.add_select_related(fields) + else: + obj.query.select_related = True + return obj + + def prefetch_related(self, *lookups): + """ + Return a new QuerySet instance that will prefetch the specified + Many-To-One and Many-To-Many related objects when the QuerySet is + evaluated. + + When prefetch_related() is called more than once, append to the list of + prefetch lookups. If prefetch_related(None) is called, clear the list. + """ + clone = self._chain() + if lookups == (None,): + clone._prefetch_related_lookups = () + else: + for lookup in lookups: + if isinstance(lookup, Prefetch): + lookup = lookup.prefetch_to + lookup = lookup.split(LOOKUP_SEP, 1)[0] + if lookup in self.query._filtered_relations: + raise ValueError('prefetch_related() is not supported with FilteredRelation.') + clone._prefetch_related_lookups = clone._prefetch_related_lookups + lookups + return clone + + def annotate(self, *args, **kwargs): + """ + Return a query set in which the returned objects have been annotated + with extra data or aggregations. + """ + self._validate_values_are_expressions(args + tuple(kwargs.values()), method_name='annotate') + annotations = OrderedDict() # To preserve ordering of args + for arg in args: + # The default_alias property may raise a TypeError. + try: + if arg.default_alias in kwargs: + raise ValueError("The named annotation '%s' conflicts with the " + "default name for another annotation." + % arg.default_alias) + except TypeError: + raise TypeError("Complex annotations require an alias") + annotations[arg.default_alias] = arg + annotations.update(kwargs) + + clone = self._chain() + names = self._fields + if names is None: + names = set(chain.from_iterable( + (field.name, field.attname) if hasattr(field, 'attname') else (field.name,) + for field in self.model._meta.get_fields() + )) + + for alias, annotation in annotations.items(): + if alias in names: + raise ValueError("The annotation '%s' conflicts with a field on " + "the model." % alias) + if isinstance(annotation, FilteredRelation): + clone.query.add_filtered_relation(annotation, alias) + else: + clone.query.add_annotation(annotation, alias, is_summary=False) + + for alias, annotation in clone.query.annotations.items(): + if alias in annotations and annotation.contains_aggregate: + if clone._fields is None: + clone.query.group_by = True + else: + clone.query.set_group_by() + break + + return clone + + def order_by(self, *field_names): + """Return a new QuerySet instance with the ordering changed.""" + assert self.query.can_filter(), \ + "Cannot reorder a query once a slice has been taken." + obj = self._chain() + obj.query.clear_ordering(force_empty=False) + obj.query.add_ordering(*field_names) + return obj + + def distinct(self, *field_names): + """ + Return a new QuerySet instance that will select only distinct results. + """ + assert self.query.can_filter(), \ + "Cannot create distinct fields once a slice has been taken." + obj = self._chain() + obj.query.add_distinct_fields(*field_names) + return obj + + def extra(self, select=None, where=None, params=None, tables=None, + order_by=None, select_params=None): + """Add extra SQL fragments to the query.""" + assert self.query.can_filter(), \ + "Cannot change a query once a slice has been taken" + clone = self._chain() + clone.query.add_extra(select, select_params, where, params, tables, order_by) + return clone + + def reverse(self): + """Reverse the ordering of the QuerySet.""" + if not self.query.can_filter(): + raise TypeError('Cannot reverse a query once a slice has been taken.') + clone = self._chain() + clone.query.standard_ordering = not clone.query.standard_ordering + return clone + + def defer(self, *fields): + """ + Defer the loading of data for certain fields until they are accessed. + Add the set of deferred fields to any existing set of deferred fields. + The only exception to this is if None is passed in as the only + parameter, in which case removal all deferrals. + """ + if self._fields is not None: + raise TypeError("Cannot call defer() after .values() or .values_list()") + clone = self._chain() + if fields == (None,): + clone.query.clear_deferred_loading() + else: + clone.query.add_deferred_loading(fields) + return clone + + def only(self, *fields): + """ + Essentially, the opposite of defer(). Only the fields passed into this + method and that are not already specified as deferred are loaded + immediately when the queryset is evaluated. + """ + if self._fields is not None: + raise TypeError("Cannot call only() after .values() or .values_list()") + if fields == (None,): + # Can only pass None to defer(), not only(), as the rest option. + # That won't stop people trying to do this, so let's be explicit. + raise TypeError("Cannot pass None as an argument to only().") + for field in fields: + field = field.split(LOOKUP_SEP, 1)[0] + if field in self.query._filtered_relations: + raise ValueError('only() is not supported with FilteredRelation.') + clone = self._chain() + clone.query.add_immediate_loading(fields) + return clone + + def using(self, alias): + """Select which database this QuerySet should execute against.""" + clone = self._chain() + clone._db = alias + return clone + + ################################### + # PUBLIC INTROSPECTION ATTRIBUTES # + ################################### + + @property + def ordered(self): + """ + Return True if the QuerySet is ordered -- i.e. has an order_by() + clause or a default ordering on the model. + """ + if self.query.extra_order_by or self.query.order_by: + return True + elif self.query.default_ordering and self.query.get_meta().ordering: + return True + else: + return False + + @property + def db(self): + """Return the database used if this query is executed now.""" + if self._for_write: + return self._db or router.db_for_write(self.model, **self._hints) + return self._db or router.db_for_read(self.model, **self._hints) + + ################### + # PRIVATE METHODS # + ################### + + def _insert(self, objs, fields, return_id=False, raw=False, using=None): + """ + Insert a new record for the given model. This provides an interface to + the InsertQuery class and is how Model.save() is implemented. + """ + self._for_write = True + if using is None: + using = self.db + query = sql.InsertQuery(self.model) + query.insert_values(fields, objs, raw=raw) + return query.get_compiler(using=using).execute_sql(return_id) + _insert.alters_data = True + _insert.queryset_only = False + + def _batched_insert(self, objs, fields, batch_size): + """ + Helper method for bulk_create() to insert objs one batch at a time. + """ + ops = connections[self.db].ops + batch_size = (batch_size or max(ops.bulk_batch_size(fields, objs), 1)) + inserted_ids = [] + for item in [objs[i:i + batch_size] for i in range(0, len(objs), batch_size)]: + if connections[self.db].features.can_return_ids_from_bulk_insert: + inserted_id = self._insert(item, fields=fields, using=self.db, return_id=True) + if isinstance(inserted_id, list): + inserted_ids.extend(inserted_id) + else: + inserted_ids.append(inserted_id) + else: + self._insert(item, fields=fields, using=self.db) + return inserted_ids + + def _chain(self, **kwargs): + """ + Return a copy of the current QuerySet that's ready for another + operation. + """ + obj = self._clone() + if obj._sticky_filter: + obj.query.filter_is_sticky = True + obj._sticky_filter = False + obj.__dict__.update(kwargs) + return obj + + def _clone(self): + """ + Return a copy of the current QuerySet. A lightweight alternative + to deepcopy(). + """ + c = self.__class__(model=self.model, query=self.query.chain(), using=self._db, hints=self._hints) + c._sticky_filter = self._sticky_filter + c._for_write = self._for_write + c._prefetch_related_lookups = self._prefetch_related_lookups[:] + c._known_related_objects = self._known_related_objects + c._iterable_class = self._iterable_class + c._fields = self._fields + return c + + def _fetch_all(self): + if self._result_cache is None: + self._result_cache = list(self._iterable_class(self)) + if self._prefetch_related_lookups and not self._prefetch_done: + self._prefetch_related_objects() + + def _next_is_sticky(self): + """ + Indicate that the next filter call and the one following that should + be treated as a single filter. This is only important when it comes to + determining when to reuse tables for many-to-many filters. Required so + that we can filter naturally on the results of related managers. + + This doesn't return a clone of the current QuerySet (it returns + "self"). The method is only used internally and should be immediately + followed by a filter() that does create a clone. + """ + self._sticky_filter = True + return self + + def _merge_sanity_check(self, other): + """Check that two QuerySet classes may be merged.""" + if self._fields is not None and ( + set(self.query.values_select) != set(other.query.values_select) or + set(self.query.extra_select) != set(other.query.extra_select) or + set(self.query.annotation_select) != set(other.query.annotation_select)): + raise TypeError( + "Merging '%s' classes must involve the same values in each case." + % self.__class__.__name__ + ) + + def _merge_known_related_objects(self, other): + """ + Keep track of all known related objects from either QuerySet instance. + """ + for field, objects in other._known_related_objects.items(): + self._known_related_objects.setdefault(field, {}).update(objects) + + def resolve_expression(self, *args, **kwargs): + if self._fields and len(self._fields) > 1: + # values() queryset can only be used as nested queries + # if they are set up to select only a single field. + raise TypeError('Cannot use multi-field values as a filter value.') + query = self.query.resolve_expression(*args, **kwargs) + query._db = self._db + return query + resolve_expression.queryset_only = True + + def _add_hints(self, **hints): + """ + Update hinting information for use by routers. Add new key/values or + overwrite existing key/values. + """ + self._hints.update(hints) + + def _has_filters(self): + """ + Check if this QuerySet has any filtering going on. This isn't + equivalent with checking if all objects are present in results, for + example, qs[1:]._has_filters() -> False. + """ + return self.query.has_filters() + + @staticmethod + def _validate_values_are_expressions(values, method_name): + invalid_args = sorted(str(arg) for arg in values if not hasattr(arg, 'resolve_expression')) + if invalid_args: + raise TypeError( + 'QuerySet.%s() received non-expression(s): %s.' % ( + method_name, + ', '.join(invalid_args), + ) + ) + + +class InstanceCheckMeta(type): + def __instancecheck__(self, instance): + return isinstance(instance, QuerySet) and instance.query.is_empty() + + +class EmptyQuerySet(metaclass=InstanceCheckMeta): + """ + Marker class to checking if a queryset is empty by .none(): + isinstance(qs.none(), EmptyQuerySet) -> True + """ + + def __init__(self, *args, **kwargs): + raise TypeError("EmptyQuerySet can't be instantiated") + + +class RawQuerySet: + """ + Provide an iterator which converts the results of raw SQL queries into + annotated model instances. + """ + def __init__(self, raw_query, model=None, query=None, params=None, + translations=None, using=None, hints=None): + self.raw_query = raw_query + self.model = model + self._db = using + self._hints = hints or {} + self.query = query or sql.RawQuery(sql=raw_query, using=self.db, params=params) + self.params = params or () + self.translations = translations or {} + self._result_cache = None + self._prefetch_related_lookups = () + self._prefetch_done = False + + def resolve_model_init_order(self): + """Resolve the init field names and value positions.""" + converter = connections[self.db].introspection.column_name_converter + model_init_fields = [f for f in self.model._meta.fields if converter(f.column) in self.columns] + annotation_fields = [(column, pos) for pos, column in enumerate(self.columns) + if column not in self.model_fields] + model_init_order = [self.columns.index(converter(f.column)) for f in model_init_fields] + model_init_names = [f.attname for f in model_init_fields] + return model_init_names, model_init_order, annotation_fields + + def prefetch_related(self, *lookups): + """Same as QuerySet.prefetch_related()""" + clone = self._clone() + if lookups == (None,): + clone._prefetch_related_lookups = () + else: + clone._prefetch_related_lookups = clone._prefetch_related_lookups + lookups + return clone + + def _prefetch_related_objects(self): + prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups) + self._prefetch_done = True + + def _clone(self): + """Same as QuerySet._clone()""" + c = self.__class__( + self.raw_query, model=self.model, query=self.query, params=self.params, + translations=self.translations, using=self._db, hints=self._hints + ) + c._prefetch_related_lookups = self._prefetch_related_lookups[:] + return c + + def _fetch_all(self): + if self._result_cache is None: + self._result_cache = list(self.iterator()) + if self._prefetch_related_lookups and not self._prefetch_done: + self._prefetch_related_objects() + + def __len__(self): + self._fetch_all() + return len(self._result_cache) + + def __bool__(self): + self._fetch_all() + return bool(self._result_cache) + + def __iter__(self): + self._fetch_all() + return iter(self._result_cache) + + def iterator(self): + # Cache some things for performance reasons outside the loop. + db = self.db + compiler = connections[db].ops.compiler('SQLCompiler')( + self.query, connections[db], db + ) + + query = iter(self.query) + + try: + model_init_names, model_init_pos, annotation_fields = self.resolve_model_init_order() + if self.model._meta.pk.attname not in model_init_names: + raise InvalidQuery('Raw query must include the primary key') + model_cls = self.model + fields = [self.model_fields.get(c) for c in self.columns] + converters = compiler.get_converters([ + f.get_col(f.model._meta.db_table) if f else None for f in fields + ]) + if converters: + query = compiler.apply_converters(query, converters) + for values in query: + # Associate fields to values + model_init_values = [values[pos] for pos in model_init_pos] + instance = model_cls.from_db(db, model_init_names, model_init_values) + if annotation_fields: + for column, pos in annotation_fields: + setattr(instance, column, values[pos]) + yield instance + finally: + # Done iterating the Query. If it has its own cursor, close it. + if hasattr(self.query, 'cursor') and self.query.cursor: + self.query.cursor.close() + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self.query) + + def __getitem__(self, k): + return list(self)[k] + + @property + def db(self): + """Return the database used if this query is executed now.""" + return self._db or router.db_for_read(self.model, **self._hints) + + def using(self, alias): + """Select the database this RawQuerySet should execute against.""" + return RawQuerySet( + self.raw_query, model=self.model, + query=self.query.chain(using=alias), + params=self.params, translations=self.translations, + using=alias, + ) + + @cached_property + def columns(self): + """ + A list of model field names in the order they'll appear in the + query results. + """ + columns = self.query.get_columns() + # Adjust any column names which don't match field names + for (query_name, model_name) in self.translations.items(): + # Ignore translations for nonexistent column names + try: + index = columns.index(query_name) + except ValueError: + pass + else: + columns[index] = model_name + return columns + + @cached_property + def model_fields(self): + """A dict mapping column names to model field names.""" + converter = connections[self.db].introspection.table_name_converter + model_fields = {} + for field in self.model._meta.fields: + name, column = field.get_attname_column() + model_fields[converter(column)] = field + return model_fields + + +class Prefetch: + def __init__(self, lookup, queryset=None, to_attr=None): + # `prefetch_through` is the path we traverse to perform the prefetch. + self.prefetch_through = lookup + # `prefetch_to` is the path to the attribute that stores the result. + self.prefetch_to = lookup + if queryset is not None and not issubclass(queryset._iterable_class, ModelIterable): + raise ValueError('Prefetch querysets cannot use values().') + if to_attr: + self.prefetch_to = LOOKUP_SEP.join(lookup.split(LOOKUP_SEP)[:-1] + [to_attr]) + + self.queryset = queryset + self.to_attr = to_attr + + def __getstate__(self): + obj_dict = self.__dict__.copy() + if self.queryset is not None: + # Prevent the QuerySet from being evaluated + obj_dict['queryset'] = self.queryset._chain( + _result_cache=[], + _prefetch_done=True, + ) + return obj_dict + + def add_prefix(self, prefix): + self.prefetch_through = prefix + LOOKUP_SEP + self.prefetch_through + self.prefetch_to = prefix + LOOKUP_SEP + self.prefetch_to + + def get_current_prefetch_to(self, level): + return LOOKUP_SEP.join(self.prefetch_to.split(LOOKUP_SEP)[:level + 1]) + + def get_current_to_attr(self, level): + parts = self.prefetch_to.split(LOOKUP_SEP) + to_attr = parts[level] + as_attr = self.to_attr and level == len(parts) - 1 + return to_attr, as_attr + + def get_current_queryset(self, level): + if self.get_current_prefetch_to(level) == self.prefetch_to: + return self.queryset + return None + + def __eq__(self, other): + return isinstance(other, Prefetch) and self.prefetch_to == other.prefetch_to + + def __hash__(self): + return hash((self.__class__, self.prefetch_to)) + + +def normalize_prefetch_lookups(lookups, prefix=None): + """Normalize lookups into Prefetch objects.""" + ret = [] + for lookup in lookups: + if not isinstance(lookup, Prefetch): + lookup = Prefetch(lookup) + if prefix: + lookup.add_prefix(prefix) + ret.append(lookup) + return ret + + +def prefetch_related_objects(model_instances, *related_lookups): + """ + Populate prefetched object caches for a list of model instances based on + the lookups/Prefetch instances given. + """ + if not model_instances: + return # nothing to do + + # We need to be able to dynamically add to the list of prefetch_related + # lookups that we look up (see below). So we need some book keeping to + # ensure we don't do duplicate work. + done_queries = {} # dictionary of things like 'foo__bar': [results] + + auto_lookups = set() # we add to this as we go through. + followed_descriptors = set() # recursion protection + + all_lookups = normalize_prefetch_lookups(reversed(related_lookups)) + while all_lookups: + lookup = all_lookups.pop() + if lookup.prefetch_to in done_queries: + if lookup.queryset: + raise ValueError("'%s' lookup was already seen with a different queryset. " + "You may need to adjust the ordering of your lookups." % lookup.prefetch_to) + + continue + + # Top level, the list of objects to decorate is the result cache + # from the primary QuerySet. It won't be for deeper levels. + obj_list = model_instances + + through_attrs = lookup.prefetch_through.split(LOOKUP_SEP) + for level, through_attr in enumerate(through_attrs): + # Prepare main instances + if not obj_list: + break + + prefetch_to = lookup.get_current_prefetch_to(level) + if prefetch_to in done_queries: + # Skip any prefetching, and any object preparation + obj_list = done_queries[prefetch_to] + continue + + # Prepare objects: + good_objects = True + for obj in obj_list: + # Since prefetching can re-use instances, it is possible to have + # the same instance multiple times in obj_list, so obj might + # already be prepared. + if not hasattr(obj, '_prefetched_objects_cache'): + try: + obj._prefetched_objects_cache = {} + except (AttributeError, TypeError): + # Must be an immutable object from + # values_list(flat=True), for example (TypeError) or + # a QuerySet subclass that isn't returning Model + # instances (AttributeError), either in Django or a 3rd + # party. prefetch_related() doesn't make sense, so quit. + good_objects = False + break + if not good_objects: + break + + # Descend down tree + + # We assume that objects retrieved are homogeneous (which is the premise + # of prefetch_related), so what applies to first object applies to all. + first_obj = obj_list[0] + to_attr = lookup.get_current_to_attr(level)[0] + prefetcher, descriptor, attr_found, is_fetched = get_prefetcher(first_obj, through_attr, to_attr) + + if not attr_found: + raise AttributeError("Cannot find '%s' on %s object, '%s' is an invalid " + "parameter to prefetch_related()" % + (through_attr, first_obj.__class__.__name__, lookup.prefetch_through)) + + if level == len(through_attrs) - 1 and prefetcher is None: + # Last one, this *must* resolve to something that supports + # prefetching, otherwise there is no point adding it and the + # developer asking for it has made a mistake. + raise ValueError("'%s' does not resolve to an item that supports " + "prefetching - this is an invalid parameter to " + "prefetch_related()." % lookup.prefetch_through) + + if prefetcher is not None and not is_fetched: + obj_list, additional_lookups = prefetch_one_level(obj_list, prefetcher, lookup, level) + # We need to ensure we don't keep adding lookups from the + # same relationships to stop infinite recursion. So, if we + # are already on an automatically added lookup, don't add + # the new lookups from relationships we've seen already. + if not (prefetch_to in done_queries and lookup in auto_lookups and descriptor in followed_descriptors): + done_queries[prefetch_to] = obj_list + new_lookups = normalize_prefetch_lookups(reversed(additional_lookups), prefetch_to) + auto_lookups.update(new_lookups) + all_lookups.extend(new_lookups) + followed_descriptors.add(descriptor) + else: + # Either a singly related object that has already been fetched + # (e.g. via select_related), or hopefully some other property + # that doesn't support prefetching but needs to be traversed. + + # We replace the current list of parent objects with the list + # of related objects, filtering out empty or missing values so + # that we can continue with nullable or reverse relations. + new_obj_list = [] + for obj in obj_list: + if through_attr in getattr(obj, '_prefetched_objects_cache', ()): + # If related objects have been prefetched, use the + # cache rather than the object's through_attr. + new_obj = list(obj._prefetched_objects_cache.get(through_attr)) + else: + try: + new_obj = getattr(obj, through_attr) + except exceptions.ObjectDoesNotExist: + continue + if new_obj is None: + continue + # We special-case `list` rather than something more generic + # like `Iterable` because we don't want to accidentally match + # user models that define __iter__. + if isinstance(new_obj, list): + new_obj_list.extend(new_obj) + else: + new_obj_list.append(new_obj) + obj_list = new_obj_list + + +def get_prefetcher(instance, through_attr, to_attr): + """ + For the attribute 'through_attr' on the given instance, find + an object that has a get_prefetch_queryset(). + Return a 4 tuple containing: + (the object with get_prefetch_queryset (or None), + the descriptor object representing this relationship (or None), + a boolean that is False if the attribute was not found at all, + a boolean that is True if the attribute has already been fetched) + """ + prefetcher = None + is_fetched = False + + # For singly related objects, we have to avoid getting the attribute + # from the object, as this will trigger the query. So we first try + # on the class, in order to get the descriptor object. + rel_obj_descriptor = getattr(instance.__class__, through_attr, None) + if rel_obj_descriptor is None: + attr_found = hasattr(instance, through_attr) + else: + attr_found = True + if rel_obj_descriptor: + # singly related object, descriptor object has the + # get_prefetch_queryset() method. + if hasattr(rel_obj_descriptor, 'get_prefetch_queryset'): + prefetcher = rel_obj_descriptor + if rel_obj_descriptor.is_cached(instance): + is_fetched = True + else: + # descriptor doesn't support prefetching, so we go ahead and get + # the attribute on the instance rather than the class to + # support many related managers + rel_obj = getattr(instance, through_attr) + if hasattr(rel_obj, 'get_prefetch_queryset'): + prefetcher = rel_obj + if through_attr != to_attr: + # Special case cached_property instances because hasattr + # triggers attribute computation and assignment. + if isinstance(getattr(instance.__class__, to_attr, None), cached_property): + is_fetched = to_attr in instance.__dict__ + else: + is_fetched = hasattr(instance, to_attr) + else: + is_fetched = through_attr in instance._prefetched_objects_cache + return prefetcher, rel_obj_descriptor, attr_found, is_fetched + + +def prefetch_one_level(instances, prefetcher, lookup, level): + """ + Helper function for prefetch_related_objects(). + + Run prefetches on all instances using the prefetcher object, + assigning results to relevant caches in instance. + + Return the prefetched objects along with any additional prefetches that + must be done due to prefetch_related lookups found from default managers. + """ + # prefetcher must have a method get_prefetch_queryset() which takes a list + # of instances, and returns a tuple: + + # (queryset of instances of self.model that are related to passed in instances, + # callable that gets value to be matched for returned instances, + # callable that gets value to be matched for passed in instances, + # boolean that is True for singly related objects, + # cache or field name to assign to, + # boolean that is True when the previous argument is a cache name vs a field name). + + # The 'values to be matched' must be hashable as they will be used + # in a dictionary. + + rel_qs, rel_obj_attr, instance_attr, single, cache_name, is_descriptor = ( + prefetcher.get_prefetch_queryset(instances, lookup.get_current_queryset(level))) + # We have to handle the possibility that the QuerySet we just got back + # contains some prefetch_related lookups. We don't want to trigger the + # prefetch_related functionality by evaluating the query. Rather, we need + # to merge in the prefetch_related lookups. + # Copy the lookups in case it is a Prefetch object which could be reused + # later (happens in nested prefetch_related). + additional_lookups = [ + copy.copy(additional_lookup) for additional_lookup + in getattr(rel_qs, '_prefetch_related_lookups', ()) + ] + if additional_lookups: + # Don't need to clone because the manager should have given us a fresh + # instance, so we access an internal instead of using public interface + # for performance reasons. + rel_qs._prefetch_related_lookups = () + + all_related_objects = list(rel_qs) + + rel_obj_cache = {} + for rel_obj in all_related_objects: + rel_attr_val = rel_obj_attr(rel_obj) + rel_obj_cache.setdefault(rel_attr_val, []).append(rel_obj) + + to_attr, as_attr = lookup.get_current_to_attr(level) + # Make sure `to_attr` does not conflict with a field. + if as_attr and instances: + # We assume that objects retrieved are homogeneous (which is the premise + # of prefetch_related), so what applies to first object applies to all. + model = instances[0].__class__ + try: + model._meta.get_field(to_attr) + except exceptions.FieldDoesNotExist: + pass + else: + msg = 'to_attr={} conflicts with a field on the {} model.' + raise ValueError(msg.format(to_attr, model.__name__)) + + # Whether or not we're prefetching the last part of the lookup. + leaf = len(lookup.prefetch_through.split(LOOKUP_SEP)) - 1 == level + + for obj in instances: + instance_attr_val = instance_attr(obj) + vals = rel_obj_cache.get(instance_attr_val, []) + + if single: + val = vals[0] if vals else None + if as_attr: + # A to_attr has been given for the prefetch. + setattr(obj, to_attr, val) + elif is_descriptor: + # cache_name points to a field name in obj. + # This field is a descriptor for a related object. + setattr(obj, cache_name, val) + else: + # No to_attr has been given for this prefetch operation and the + # cache_name does not point to a descriptor. Store the value of + # the field in the object's field cache. + obj._state.fields_cache[cache_name] = val + else: + if as_attr: + setattr(obj, to_attr, vals) + else: + manager = getattr(obj, to_attr) + if leaf and lookup.queryset is not None: + qs = manager._apply_rel_filters(lookup.queryset) + else: + qs = manager.get_queryset() + qs._result_cache = vals + # We don't want the individual qs doing prefetch_related now, + # since we have merged this into the current work. + qs._prefetch_done = True + obj._prefetched_objects_cache[cache_name] = qs + return all_related_objects, additional_lookups + + +class RelatedPopulator: + """ + RelatedPopulator is used for select_related() object instantiation. + + The idea is that each select_related() model will be populated by a + different RelatedPopulator instance. The RelatedPopulator instances get + klass_info and select (computed in SQLCompiler) plus the used db as + input for initialization. That data is used to compute which columns + to use, how to instantiate the model, and how to populate the links + between the objects. + + The actual creation of the objects is done in populate() method. This + method gets row and from_obj as input and populates the select_related() + model instance. + """ + def __init__(self, klass_info, select, db): + self.db = db + # Pre-compute needed attributes. The attributes are: + # - model_cls: the possibly deferred model class to instantiate + # - either: + # - cols_start, cols_end: usually the columns in the row are + # in the same order model_cls.__init__ expects them, so we + # can instantiate by model_cls(*row[cols_start:cols_end]) + # - reorder_for_init: When select_related descends to a child + # class, then we want to reuse the already selected parent + # data. However, in this case the parent data isn't necessarily + # in the same order that Model.__init__ expects it to be, so + # we have to reorder the parent data. The reorder_for_init + # attribute contains a function used to reorder the field data + # in the order __init__ expects it. + # - pk_idx: the index of the primary key field in the reordered + # model data. Used to check if a related object exists at all. + # - init_list: the field attnames fetched from the database. For + # deferred models this isn't the same as all attnames of the + # model's fields. + # - related_populators: a list of RelatedPopulator instances if + # select_related() descends to related models from this model. + # - local_setter, remote_setter: Methods to set cached values on + # the object being populated and on the remote object. Usually + # these are Field.set_cached_value() methods. + select_fields = klass_info['select_fields'] + from_parent = klass_info['from_parent'] + if not from_parent: + self.cols_start = select_fields[0] + self.cols_end = select_fields[-1] + 1 + self.init_list = [ + f[0].target.attname for f in select[self.cols_start:self.cols_end] + ] + self.reorder_for_init = None + else: + attname_indexes = {select[idx][0].target.attname: idx for idx in select_fields} + model_init_attnames = (f.attname for f in klass_info['model']._meta.concrete_fields) + self.init_list = [attname for attname in model_init_attnames if attname in attname_indexes] + self.reorder_for_init = operator.itemgetter(*[attname_indexes[attname] for attname in self.init_list]) + + self.model_cls = klass_info['model'] + self.pk_idx = self.init_list.index(self.model_cls._meta.pk.attname) + self.related_populators = get_related_populators(klass_info, select, self.db) + self.local_setter = klass_info['local_setter'] + self.remote_setter = klass_info['remote_setter'] + + def populate(self, row, from_obj): + if self.reorder_for_init: + obj_data = self.reorder_for_init(row) + else: + obj_data = row[self.cols_start:self.cols_end] + if obj_data[self.pk_idx] is None: + obj = None + else: + obj = self.model_cls.from_db(self.db, self.init_list, obj_data) + for rel_iter in self.related_populators: + rel_iter.populate(row, obj) + self.local_setter(from_obj, obj) + if obj is not None: + self.remote_setter(obj, from_obj) + + +def get_related_populators(klass_info, select, db): + iterators = [] + related_klass_infos = klass_info.get('related_klass_infos', []) + for rel_klass_info in related_klass_infos: + rel_cls = RelatedPopulator(rel_klass_info, select, db) + iterators.append(rel_cls) + return iterators diff --git a/env/lib/python3.5/site-packages/django/db/models/query_utils.py b/env/lib/python3.5/site-packages/django/db/models/query_utils.py new file mode 100644 index 0000000..8c41116 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/query_utils.py @@ -0,0 +1,338 @@ +""" +Various data structures used in query construction. + +Factored out from django.db.models.query to avoid making the main module very +large and/or so that they can be used by other modules without getting into +circular import difficulties. +""" +import copy +import functools +import inspect +from collections import namedtuple + +from django.db.models.constants import LOOKUP_SEP +from django.utils import tree + +# PathInfo is used when converting lookups (fk__somecol). The contents +# describe the relation in Model terms (model Options and Fields for both +# sides of the relation. The join_field is the field backing the relation. +PathInfo = namedtuple('PathInfo', 'from_opts to_opts target_fields join_field m2m direct filtered_relation') + + +class InvalidQuery(Exception): + """The query passed to raw() isn't a safe query to use with raw().""" + pass + + +def subclasses(cls): + yield cls + for subclass in cls.__subclasses__(): + yield from subclasses(subclass) + + +class QueryWrapper: + """ + A type that indicates the contents are an SQL fragment and the associate + parameters. Can be used to pass opaque data to a where-clause, for example. + """ + contains_aggregate = False + + def __init__(self, sql, params): + self.data = sql, list(params) + + def as_sql(self, compiler=None, connection=None): + return self.data + + +class Q(tree.Node): + """ + Encapsulate filters as objects that can then be combined logically (using + `&` and `|`). + """ + # Connection types + AND = 'AND' + OR = 'OR' + default = AND + conditional = True + + def __init__(self, *args, **kwargs): + connector = kwargs.pop('_connector', None) + negated = kwargs.pop('_negated', False) + super().__init__(children=list(args) + sorted(kwargs.items()), connector=connector, negated=negated) + + def _combine(self, other, conn): + if not isinstance(other, Q): + raise TypeError(other) + + # If the other Q() is empty, ignore it and just use `self`. + if not other: + return copy.deepcopy(self) + # Or if this Q is empty, ignore it and just use `other`. + elif not self: + return copy.deepcopy(other) + + obj = type(self)() + obj.connector = conn + obj.add(self, conn) + obj.add(other, conn) + return obj + + def __or__(self, other): + return self._combine(other, self.OR) + + def __and__(self, other): + return self._combine(other, self.AND) + + def __invert__(self): + obj = type(self)() + obj.add(self, self.AND) + obj.negate() + return obj + + def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False): + # We must promote any new joins to left outer joins so that when Q is + # used as an expression, rows aren't filtered due to joins. + clause, joins = query._add_q(self, reuse, allow_joins=allow_joins, split_subq=False) + query.promote_joins(joins) + return clause + + def deconstruct(self): + path = '%s.%s' % (self.__class__.__module__, self.__class__.__name__) + if path.startswith('django.db.models.query_utils'): + path = path.replace('django.db.models.query_utils', 'django.db.models') + args, kwargs = (), {} + if len(self.children) == 1 and not isinstance(self.children[0], Q): + child = self.children[0] + kwargs = {child[0]: child[1]} + else: + args = tuple(self.children) + if self.connector != self.default: + kwargs = {'_connector': self.connector} + if self.negated: + kwargs['_negated'] = True + return path, args, kwargs + + +class DeferredAttribute: + """ + A wrapper for a deferred-loading field. When the value is read from this + object the first time, the query is executed. + """ + def __init__(self, field_name): + self.field_name = field_name + + def __get__(self, instance, cls=None): + """ + Retrieve and caches the value from the datastore on the first lookup. + Return the cached value. + """ + if instance is None: + return self + data = instance.__dict__ + if data.get(self.field_name, self) is self: + # Let's see if the field is part of the parent chain. If so we + # might be able to reuse the already loaded value. Refs #18343. + val = self._check_parent_chain(instance, self.field_name) + if val is None: + instance.refresh_from_db(fields=[self.field_name]) + val = getattr(instance, self.field_name) + data[self.field_name] = val + return data[self.field_name] + + def _check_parent_chain(self, instance, name): + """ + Check if the field value can be fetched from a parent field already + loaded in the instance. This can be done if the to-be fetched + field is a primary key field. + """ + opts = instance._meta + f = opts.get_field(name) + link_field = opts.get_ancestor_link(f.model) + if f.primary_key and f != link_field: + return getattr(instance, link_field.attname) + return None + + +class RegisterLookupMixin: + + @classmethod + def _get_lookup(cls, lookup_name): + return cls.get_lookups().get(lookup_name, None) + + @classmethod + @functools.lru_cache(maxsize=None) + def get_lookups(cls): + class_lookups = [parent.__dict__.get('class_lookups', {}) for parent in inspect.getmro(cls)] + return cls.merge_dicts(class_lookups) + + def get_lookup(self, lookup_name): + from django.db.models.lookups import Lookup + found = self._get_lookup(lookup_name) + if found is None and hasattr(self, 'output_field'): + return self.output_field.get_lookup(lookup_name) + if found is not None and not issubclass(found, Lookup): + return None + return found + + def get_transform(self, lookup_name): + from django.db.models.lookups import Transform + found = self._get_lookup(lookup_name) + if found is None and hasattr(self, 'output_field'): + return self.output_field.get_transform(lookup_name) + if found is not None and not issubclass(found, Transform): + return None + return found + + @staticmethod + def merge_dicts(dicts): + """ + Merge dicts in reverse to preference the order of the original list. e.g., + merge_dicts([a, b]) will preference the keys in 'a' over those in 'b'. + """ + merged = {} + for d in reversed(dicts): + merged.update(d) + return merged + + @classmethod + def _clear_cached_lookups(cls): + for subclass in subclasses(cls): + subclass.get_lookups.cache_clear() + + @classmethod + def register_lookup(cls, lookup, lookup_name=None): + if lookup_name is None: + lookup_name = lookup.lookup_name + if 'class_lookups' not in cls.__dict__: + cls.class_lookups = {} + cls.class_lookups[lookup_name] = lookup + cls._clear_cached_lookups() + return lookup + + @classmethod + def _unregister_lookup(cls, lookup, lookup_name=None): + """ + Remove given lookup from cls lookups. For use in tests only as it's + not thread-safe. + """ + if lookup_name is None: + lookup_name = lookup.lookup_name + del cls.class_lookups[lookup_name] + + +def select_related_descend(field, restricted, requested, load_fields, reverse=False): + """ + Return True if this field should be used to descend deeper for + select_related() purposes. Used by both the query construction code + (sql.query.fill_related_selections()) and the model instance creation code + (query.get_klass_info()). + + Arguments: + * field - the field to be checked + * restricted - a boolean field, indicating if the field list has been + manually restricted using a requested clause) + * requested - The select_related() dictionary. + * load_fields - the set of fields to be loaded on this model + * reverse - boolean, True if we are checking a reverse select related + """ + if not field.remote_field: + return False + if field.remote_field.parent_link and not reverse: + return False + if restricted: + if reverse and field.related_query_name() not in requested: + return False + if not reverse and field.name not in requested: + return False + if not restricted and field.null: + return False + if load_fields: + if field.attname not in load_fields: + if restricted and field.name in requested: + raise InvalidQuery("Field %s.%s cannot be both deferred" + " and traversed using select_related" + " at the same time." % + (field.model._meta.object_name, field.name)) + return True + + +def refs_expression(lookup_parts, annotations): + """ + Check if the lookup_parts contains references to the given annotations set. + Because the LOOKUP_SEP is contained in the default annotation names, check + each prefix of the lookup_parts for a match. + """ + for n in range(1, len(lookup_parts) + 1): + level_n_lookup = LOOKUP_SEP.join(lookup_parts[0:n]) + if level_n_lookup in annotations and annotations[level_n_lookup]: + return annotations[level_n_lookup], lookup_parts[n:] + return False, () + + +def check_rel_lookup_compatibility(model, target_opts, field): + """ + Check that self.model is compatible with target_opts. Compatibility + is OK if: + 1) model and opts match (where proxy inheritance is removed) + 2) model is parent of opts' model or the other way around + """ + def check(opts): + return ( + model._meta.concrete_model == opts.concrete_model or + opts.concrete_model in model._meta.get_parent_list() or + model in opts.get_parent_list() + ) + # If the field is a primary key, then doing a query against the field's + # model is ok, too. Consider the case: + # class Restaurant(models.Model): + # place = OnetoOneField(Place, primary_key=True): + # Restaurant.objects.filter(pk__in=Restaurant.objects.all()). + # If we didn't have the primary key check, then pk__in (== place__in) would + # give Place's opts as the target opts, but Restaurant isn't compatible + # with that. This logic applies only to primary keys, as when doing __in=qs, + # we are going to turn this into __in=qs.values('pk') later on. + return ( + check(target_opts) or + (getattr(field, 'primary_key', False) and check(field.model._meta)) + ) + + +class FilteredRelation: + """Specify custom filtering in the ON clause of SQL joins.""" + + def __init__(self, relation_name, *, condition=Q()): + if not relation_name: + raise ValueError('relation_name cannot be empty.') + self.relation_name = relation_name + self.alias = None + if not isinstance(condition, Q): + raise ValueError('condition argument must be a Q() instance.') + self.condition = condition + self.path = [] + + def __eq__(self, other): + return ( + isinstance(other, self.__class__) and + self.relation_name == other.relation_name and + self.alias == other.alias and + self.condition == other.condition + ) + + def clone(self): + clone = FilteredRelation(self.relation_name, condition=self.condition) + clone.alias = self.alias + clone.path = self.path[:] + return clone + + def resolve_expression(self, *args, **kwargs): + """ + QuerySet.annotate() only accepts expression-like arguments + (with a resolve_expression() method). + """ + raise NotImplementedError('FilteredRelation.resolve_expression() is unused.') + + def as_sql(self, compiler, connection): + # Resolve the condition in Join.filtered_relation. + query = compiler.query + where = query.build_filtered_relation_q(self.condition, reuse=set(self.path)) + return compiler.compile(where) diff --git a/env/lib/python3.5/site-packages/django/db/models/signals.py b/env/lib/python3.5/site-packages/django/db/models/signals.py new file mode 100644 index 0000000..3b20874 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/signals.py @@ -0,0 +1,53 @@ +from functools import partial + +from django.db.models.utils import make_model_tuple +from django.dispatch import Signal + +class_prepared = Signal(providing_args=["class"]) + + +class ModelSignal(Signal): + """ + Signal subclass that allows the sender to be lazily specified as a string + of the `app_label.ModelName` form. + """ + def _lazy_method(self, method, apps, receiver, sender, **kwargs): + from django.db.models.options import Options + + # This partial takes a single optional argument named "sender". + partial_method = partial(method, receiver, **kwargs) + if isinstance(sender, str): + apps = apps or Options.default_apps + apps.lazy_model_operation(partial_method, make_model_tuple(sender)) + else: + return partial_method(sender) + + def connect(self, receiver, sender=None, weak=True, dispatch_uid=None, apps=None): + self._lazy_method( + super().connect, apps, receiver, sender, + weak=weak, dispatch_uid=dispatch_uid, + ) + + def disconnect(self, receiver=None, sender=None, dispatch_uid=None, apps=None): + return self._lazy_method( + super().disconnect, apps, receiver, sender, dispatch_uid=dispatch_uid + ) + + +pre_init = ModelSignal(providing_args=["instance", "args", "kwargs"], use_caching=True) +post_init = ModelSignal(providing_args=["instance"], use_caching=True) + +pre_save = ModelSignal(providing_args=["instance", "raw", "using", "update_fields"], + use_caching=True) +post_save = ModelSignal(providing_args=["instance", "raw", "created", "using", "update_fields"], use_caching=True) + +pre_delete = ModelSignal(providing_args=["instance", "using"], use_caching=True) +post_delete = ModelSignal(providing_args=["instance", "using"], use_caching=True) + +m2m_changed = ModelSignal( + providing_args=["action", "instance", "reverse", "model", "pk_set", "using"], + use_caching=True, +) + +pre_migrate = Signal(providing_args=["app_config", "verbosity", "interactive", "using", "apps", "plan"]) +post_migrate = Signal(providing_args=["app_config", "verbosity", "interactive", "using", "apps", "plan"]) diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/__init__.py b/env/lib/python3.5/site-packages/django/db/models/sql/__init__.py new file mode 100644 index 0000000..31f45eb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/sql/__init__.py @@ -0,0 +1,6 @@ +from django.core.exceptions import EmptyResultSet +from django.db.models.sql.query import * # NOQA +from django.db.models.sql.subqueries import * # NOQA +from django.db.models.sql.where import AND, OR + +__all__ = ['Query', 'AND', 'OR', 'EmptyResultSet'] diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..22970e91a3097d468d9258aa7d2986f295b158ec GIT binary patch literal 425 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/constants.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/constants.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dbc8cc9f71d80e4f2e5e1368ca1bc0d490994f3 GIT binary patch literal 569 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/query.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/query.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e7198be895569b31d99dd81052a9ed26e0f24f33 GIT binary patch literal 67042 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

    #)p+s>h9(Tk zz^)fITXRq0K^1HNJrw|fr~l3p!(mh@z_k<}q^z(VGR0N!ypsbE*C2cvTLatNV6;V) zya~A^SVk(29aYA^NuN$@KEUp1{j_AZu^5=V7QW1Eg$*n;D2fgw(_^*0qJeF5>+A8* zYr8>rH<@8zaZPL{=|OH%nOw8cv~elLEM?lJbeA6OgvaTiRA|rF&z(yf=g_#w8*0A2 zzJfQ*mGo1}wAX9u)uTwWQrpX3xIrJLhoVWVE9Yi|^m~4x*{O}R(xr3O<92Ph*|_A% ztPkx)S{uqA)NrI&cIe!?QT_ov!uS)~casRC;-bd-CMw%Yd;0dlx9-PoF9f%}G|BxA zL1pA*dk0^D+rr=8TknXB)h_Lx+GbGm`ygeKyjbkN=zG(gia;DYBq=FTP%^uFBL z#QadMAr`ZS{0~fba*m;c`4?!rCJ@&ZCkU>zF`OqLfKQZZ57q0k`Hiy+N)hPBtU9l2 zT&NRx#Ip-vllImV5Z(&F`+r!iJ3IxavQwrogDGxk?5+}}F6;{F%>r6o>BLyLusdAX z6E5skofq(UHpMv3G-{$~3oS4jXS1Uz+ddoURUWY^xR%2a`hRseT<(Mpt~z9)ZuYEI zcKpm4+ma*UDmw@6=H`(8gmnfb2Tx$2e9vxE70Pg{YNhM1VLgXC8)4f~rKKKL>NacQ zb{pN=eCf2F-68GoMbN=uS+~2G2T$GZsjoTMJHnOS)?!t)vk~c4>Gaz9a$o08<5G^5 z;Zo!^=kq|{e8J~lCeusJJ2n5{9lAkc9%Z&I+x)Iv!MxvU?=A}!+-1~I83*zOCBcI7 z4q3;63FI&uE*uD*dkh$0@n8et!a!aBvP^=F(V4O$Hr>0gl7j+(u66OkbXYU*X>7i`7oDkd||m!PYYW~x~?~$ z)0^_@#cWV(30=u{C?S{3CERgcH)*W=i^~3Ux`@c6Kc#}ZMB}=I%=G=v+Hdf>HVR-t zEZyRgN(41-KO6O)EK7ycHrcV^4zWD{HV%_jvN0^WefN?+;r zQU$hl@A&NqC32Q_v%`+QF^musrMpYR<-Mhm%0Ov9?C-u3>GJNk&zEIP7j(77Y7-G?toMi zBkz#pYo)RnX#{PyElztH+*s zVfGZ7Vq1WyaFR5VOS5kNkpc>pG3=QR|Kwt7R=U@grDoh9dO-u(Q_vTeD=B(mD=ApLekI%Q zH(}G(Q>$~zZdoi_x!1jjF>TRF7*>u|wS|UhatYNP_w3nl1Pr@D!_%*2zZOb%4@cnq zLMS-^z|K^ev>fGQ=WXf1OVko_cq8 zr^}sPd!35&^B*U&KKZ$)KdlOdLGW}ljB2=8s5u)E2)U)mG4AK|bOM;PlPbAEcvJ|o zuqN+vycbQlX#TK}q`zX-DPIph^yQ8{+ys>mlil&m7Bcfc^WrZw(%mG2A&rUBJs<#Q z_%T5AfJ&^n;PkcOEBxNeuPyS_1r=9Q^yLQ*NPq^|za;Dmy9u<21!GxRZyZFC1Cbc@ zL`Y(8x^MQBO=DIXnI7<&{5IN1zg?H_(B*r%WPLj4L59LpKO2bV+renIP2Xtr8E%7S z@Erhld^<+8ISdlbO)oJ|G3qf|mB_7;xBrZi-)JH?V*$`$k=wURjCNFq>RfN(0?GS! zdu|+Ie9lzxwqm7D+1rZ79^b-|^S004ruNpPSl+_%e4N>KXIjK@LyYMsB^J?8b5sen zYZ40LlG5fUTf#k-VsVF6q!G}hkA#om%t5CSNru8leMp13yjAjQVZJ-a6M41p>BuMF zPzF;EhRdH8SAYD>w*|x&&w`9GDS=~H@;BTiQ6hP=<^eDeyFH6q2JwD9G zQoR0Le62?A@S%>vw_EE~i6|;Tg?$&0s>pL^c(6S0$^BvVf3bY~Rrx$Z74Po~t6#B) zciF?c)Q!36iTW&vqoAQrH#mG{`oF34e0wU=;le70kr; zFuS1Klm%xAWSmr!bu(F`1=m4YtDG$PL9rgwvJ{_FU~8GMTIp2RREqLj=RnSK@b`S{ zlB$Tgs*(7*g{Ze@J+sthL^d8cW*i2^+_*OfY(6KKuRi>PmDL)?Go!NNn z8)|Z&4xN^QmOjPr5@AK=+X=>F)E70v= z?&ZV`a163N^JUTJ6AOTh{nK5ApXgEhJ}%IXGk1z&v#UX*z}=)XjnX<8qTEEpD`qOl zhK2p@-~>)C1yRpR7dA0Og*^IpA$m0pQFmkSOq}T(NTEi_XS4pa0ma?aadEr5__ZZ- zob$f#>2e#6?cxz9mp)4-`s6}r1(Ask{v@S)1m@?s<;Y+*J8Oy2tXnEo4G{&!upYzVVSk_`ef3pnPPB`Djr-oy*gWyx%Z`^C){tKD}0EAdx_3O!f7 zoAXXKBId|PnI2F>tV&3KK$lOd)PPrM{ylP#>mb|dXrk1x={G6chjjU7E--T9F0u-U z&Ca9w{?|#h=7o5iH2odr7*z)`_}a*8!{qmo*G80dzcm;4H36AvYfW0tN|&rBxvs)M z!&n-V9MJU|J{T8xBoqz9GG^$=qyF+kdK(?T9Zl^{w70i$KZ#T~R+-@41lrs&7#mo+ zera#f?Q-3Pli5AEm5p*>a+HH;s!ej^c4>c0JNxz&3{Y&lV1V|}yjZ_u{Mx(N#Lo7; zVvGpfhE%b*sKUePg)wyS8SpG{5TeHLeOxQyJd6xX0o=pOCCVH>^IS>X14du7KR~3! zKTrky06IsihgIkoslNQ9#zL6HC=TTKnePr)QRJZmHSL@V4VfYJ3swQOj)G25F_Q@m zDD@Z-l+F(NZuB?(EhXSpXax>RY1FqEI>^k4A;iyZ-OTL)X;@L@O~SZ%`4aq#o{`;6 z%oQvu9|@;pdvH8`K_?%tk`2r6_RxB?qy#GEtFRf{Iq_llqoK((@q(sde6aZX*e$Kf zkch#EuZaO7gZe)qg5G{Y929&GMf60?KSA>-qu0us{GH+QE2e?mDJJpwnc1Kf<5bhG zaQWSNL%VqK=Ge#Ac9}}>H?3R68tk@a;I~lc#%6vKMefg+PU`?UeT~&mcdJ*AcG`06 zE|cJP5-yDD>2_&tclq??f36I9$y<9$nv9_GWY&mg%cq;)A1)v7ZRzbj`N_%rU_t+} zvQI^COCKszjXyrJ_92=@uL~sZ@%fmv`DUCb>zP+q*2DL${RTPj?VY)=*1`W!J}tlPeaXFgS%N76J#5+}iHGXGLvAwnI7NA@nb8 zhY?#+a7y>eaqC|BkjMuXMQ?JBM;4q0JTi!QNyNhieEN!N!~yR2I0O58*gqy!4HOyJR6LmdTA6ymb$ZWur1uO(4r&c_gJd~qGjqs?KV5Wfwa%0%NQ)+(RfnW{I`8jH z^(6iq3k&#ttGg-wlwDuHhl+ag?1unA>S9>dp52M_kO?9#WMtH>A%t%4v#(oG-K?=u zU;cmjm;NafV|riut^7$p&jsyruKKW2=|9%P{x*z%C*7%BrkDPlQlHSPG4o(&an0J` z3N`CXHjafg)db-H+j>hY=EOi@71yxSiYB{;CH;NXwM~3Ur)5qkD4o|yqJ@!vd^)2B z5#UfpTeOZ`XY=p%$n>ysw`)rIq5w275Am3RaYA^x7`rgwaDqcyTw;Z*C_;i{{e}W+ z!)CozU=Kw;Kzlv9vfh?1-GG{~EJcy5pH@5AcoAxRSQhCbyycDvti>R z#q%A#^K$kA8`|cyHfW)Ph&uA?gf-L}uYb%Gf5M6i`6Bf|n{SJ*B#e_0`D)&0YHAKOBbR?d zY3McXX!OFBD`>R6Ydkq3ombwxwTnSh-Ux&BpG53~^`(O?(ErNgvvn2~=ds+>ffR%KmV2=qQ zJ?e>#z60$8$?Pc{AUfP<6;$XhAB@_p$n|w`=`wzP>{ydPenu(jt)osb8|h9Ju}N$k z*$$UudJcos2$H3fM;7Ej#kX#VZC;J#`tP+Dq-GAdXvaBX+uCTEH9kf|&*N>ON^Q5Q`4rtEixZb=ZB?(L~;8uLSfNm{x^>q&y;H-8Ng|S zr~Z1C*()||6wkG13D*NkF_x%Nl>l3K@Hwh6kOv6G4q$r4*Uw`-^|Fxgs%HPR@-P}; z76ju~Gr=N^Bg3*Gm=iFK;0c{vIkcjO-U>ZXg?5xfeD$lXrNrwo-#=|H_+@%4w=EE$M`A0wbGB*`+NujP)w$N8 zD){S?v}riNM(rX~SC4s$yf$0)!;hR*%W<&Dp`uQ3XH(UP)`KSDrSl0nd-#!ss<;tF z-V^75vp6$g&X~fxHe#Fmc!B$d*}Jt!CS~*wZ?!ZDN_G zs6DF9y`8dQB<_aN&FqD}g}Z5Q=3)bg*z0E-;8_xvPa1pzqL6k2RIbO*yv4LcMu`DY z!75jCVYpTf`y?)qmn(4Y-U@4bBjv1YtQPb5d;?(*qPd9`bKX2BlX+NJ7WGOMB(5_- zuFu!{b5GsUS0#5e{n()C)I|F((b@AD%p_k zS&g;P$Q|8?p_1BMTJJn_`wmUN#H!H0Uy~ls-)+fN%=?fs@}pE}f0llU$ucu9^G*V0 zig|~(YTqfhUYI4HV8kiUCbP004F-4OP0uR41OFX?ys7-XFCUhP@bC>l3 zq>E;m|6xl(wWp*mCkLv`BhRj#Li_rg;dC73fQkv1)A z6muP8u3tiUO}hxxJzTnbVFB2(f09&0?soC}TUy@IFH!c!mbV84{%Qgj(CDZdCnKjl z-N>zl0q*~&zP+v6x1vSuJI#iWY5QI-tn-DD~Z;RuMN@vY`B3ppz#WJuq__tNM+%3t)0PF`X{=NN(kxO zYGXah17c;sy|&$Ss1?s=;sLew1uh3Q{6i$dz@2^Du>u~j2xbTSCQ-drz~^K5dE(YZ zGytjEuwgTh3p$hZ)Njg>90(0M&Rspvxi2JLNu21|in>e~RTdYh z*W^&l$-Ep%JJLj`-1@@K>7(E)DuSt9#Pg#wQ+>S97)Du_?!CIyT5rQWpRXt4iXFRK z9jMsE@Y<82GIPSA=QJ##vg4qO{@xPn`ZI$5$WayP*m0E$VgLVeU)EN9;nB*1`hBS@5=*@n$E7TtVSho*F~pWe)h|9McH`!)Ah?sE9)z{Itxk2!W*Gw zUce&ONcc8Fs|7a>YtlXXFyq=~#%hDxrxE_3dU=iu;jEh|jvT`qau=FK5VFDiQ)Ro0 z0<}GEA&Po5EK}x?n@*~-J9IHu4wHa{;$1lqr$pF0+txG0r!*aR^E3?Z+_|&dR~|qW zATN&+IJ;6BE8l`KWteBXO5=r+xu^UB4cfn)S31TWo&mm@Xnnu!D&K#Ge|>wE{Ct(9 zdFNqG0RXDh&NOuD8&)dbuAZ*v#8Q-+dkhshhQgvC|2?*lDTdAJixRP55DRcNk)?}Q zW;qIM)Bb6CpN?uK&1tBr+s|_$q}Ew?srf3}?(~b~+|aBFoOQH&xU{`|Cow%8yyTI; z>DWp!gPKXoxm;N#0XkzgKtvFJp(dj^*Zhzg$VM9b|FsxQ&(!!?03j43=!Q%Tj~W8^ zZH>_dKf8@a+Iqu@sUEdyETYXgt|+F_jRKGf)DNmh$V8H;G^kzAO1BA%&yO)SXdX3- ze8aF9%lsHWO2TJEOnK5>k78m3TAG+Sex|%)w=f@Pc1EP00yUv0!1qs+&!OIrU>OqG zs@;E%Oy8_!QtfcyhkbbrCg%0!lUHM0qh1AH!G@zc{57>=oY$|D+Jtkuh-cRg>icNk zY8cp(jbt$@|gdUE}k>EmG`98jVdX0US20R;-xJkXP`SA^Y? z4;sb^ctINMjS)7v56K}K8aHXaRTvd`%>yi$Civ-Al4JQ56dhP3a0BNF?l8Y=6`6z% zd6XItF&bI2{m(21w#$E|Con^JA9e67GI^82^JeK(!WvU|7;``JZ9gDCRR1gswiW7g z=AkfIPKmRI8pdcaviG^5=vF{W=cuEo%=jSFouLdgyPf4T^CSjDoO!KQ>DObuU8ARt zxS7#9_or#kJeGelMcVWy=}!+~J_WZmWmd>upI-bOwJT!fvocynk+{LfB;b#7{Um#? z=(TFmo-?IAhKyKAoy}F47&H!N0WjQ|bx-C8Z!Ncl78Q2;<{`1Jvt0IenYl3M9(jw{ z9$%LlvZ(7s41xE&;sBaeB!;x%EL4%{s4F?CYP0QE;k}}sb_ra@lr5i+Y^m0utHNEu zzqqK)w61Vc==X>tauM^zn~SV(iQ3-ITXWZ)9T*8a z?;aHRSVK}F8`7gB;*i`e&U68chXG*GL{UKRdxyu)mP%>UsPd>&Q8{q0Xz$nP`VaPY z-R<`h7*C}mT&K4=C10d-PRX~a${}6!-W`DpQ%t%;&&-|M!ya@eEW6eA#~bW~8ty@W zf8hsg=A_cRS1&5CY3^;>#Zr8$`hGi!uzj?Au>SxymmQ^{$`q^uhb3Xb#57>jAL%a0 zf`lFY6IY@1F@EiT%>{@7LkoKFaD1lC6GS$oJF5ov_`HnBNyxU?+s1@e&}`ay&RRZ|Xk+I}6YlsJn7#+e_q zqj@Qvyn%3F$myeUZ{`S9ohIul4zZ9H4Pd&j4*%E1^G~zG;iK7$LIZ9ko-*env-1jM z*`HC;U6TOoCgCCr7Rmxc)a8XH%Pt(!l>DHkgrPw(ZU#2IYy46)=Lj*uu^eu#_8=|8 zk|wdbD+}F9TW~cl*2*^`EG2y)-ezyHIpt#j?RvpNOS%N(h z=$9%IV%Qa?lydEng@oY|8%kj|^bwDNjW-=lpe_mssV^>dkNg4xNS^lHwp_F0C;?x> zWqs|)X7`jG1(?l-J>UzztwclINx2pu2DI2L@!a>%(_f1QliSLEK@V&JeoiUlTkT?~ z>VM$bZ)*ZI;J~SDB$+~kCtt>HM+*&}P?I?7XZUT2Jq2n&Rl-!5e#L^5`6*3i!?;qB zg?hvyPCepnKfWpcV!%_TaxwB~?5Tq5oH81KWUZFddjwAwis7VgpVZ~Ux_rGZzrrQj zv$B4}7Fi#Gr8u{L@sj>}9b0DOtyK9X&4wuta5)5YDz{6+DOA1B*X8<2-{jFmafh6} zB%HHl6vES?#LQgNDPum$w50x(?X+q7eM(1frO%SSVO&CG`XlvCQy)qjquv|5%iv23 z*wxw$@;k<_EiFdJz*qCg%tIic8uSKGHsA!54T#GCaTCod57Dfdz>dJ7A|DKw->!$p z&&*hi9I6BMy*g~7zS`GSS6Vv>x|jUgM^p+elyN3+CdH!sIQ{acrUJJEJW_!d>t$xm zY#8npOCrQKRlypte>Q%@WAnOYyYn@PpGUOvf1=46r&@g#>Gsl|io8m1D{b7oc^P|) z6d*1&R6&9NCvG%vrglVHDtsN%W11_L)~O=X^@^E-Wwk?qJErM@Jt2)NmC07%49{(6 zYE{4#*U)PTR%VN1ZuLR)`@@3@xAstVYO&SgYoWx7 zPWVL%)t>5cK<_$QZtOqVWGR*s4h!gOmeu_S+WSp@b3(}7%nA6o|HK5lXZGt#-K@)} zxMX8;MdgT73xtnv`RDcG*K`@vWmT8=af$k~Y`~kTO~f@dmv6aV|951n?d&4j_!-T1 zdPt!88Qy02WUGs!EI3U^pK80=f-;G$Za6pQS6sTk6r}B=mcSt>1;P;Zxw}+_+En=O z)*@{4btQ{^+o!_(j`3?B=dx+vK58}((+#fxG zR{5B|A&RV-yY!-sJ}b}d=sh4Q6uM-XQVb0Y5ln{GKSnb)sOSnmCl{sQImD*}w&+sYqCRh|Ti%$9jp<{4hR~Wd@OY^Dw7l2gUkq4aEbMcSGqZT! z8s3;>a;&hg{||6Wm=qg|c`oO4??ElCu^?LCt&4b*e^S-josXrplw&MH)ap&JkXpWt z+Z;v!36`nFIs+hqTM~j3&t+KUu@f5OZias1p^eD%sKQH;-B?m z##i%YW^8tPTei*47PuTzj9EUxYi9hX*Dxa0&qKAUyqEXa_97Exn+yrECERVx@|`{2n^R^saKG zza)tXLaTFMrt^)V4vwF}YV8X`UY5{Yg`hHPRU@KAHLxQFKnnZZd^jK&h+ge47%cG| zYV(@m0_d^Hg5dm!_E~1Hm4Z+wQzOb&dZXH)DsvL)42+c9=#PXscU`Vn2)IF@loaa0 zQM0uEkx?JBV~WmL#rTWRKIz0_>CFMIC;%rfaMX~f0mrR0`Vhd9G%!vR!};wEDD@G5o$?I+D#nnbm^pZVi{@^4mi*sq`G;3W_!9c@cak6=d?6ny(s3OH(+kY_ZCoh`=P0gyG>DtTzEo< zfasvi#l2+uq3Q>(W&=xBW}_N0wDz=#oG8fZaqHX6k+Ut`*s1gu?ZiLT#?%F)jyIb= zu6;R{jdjv1-Tr0v5n>;Q@7AL#ZiM}}RmUH3sqGRANYi|%q=^cK(^%)*e%x9dx&?qw zUm%s;i5%HT5u`eV)6&IM+n=qAs;!l54ijpZgiGoExw+ zhv~c2vn?#=sD0NtF2o_B4fB&2nc%3=-pYuHp#+Dm=;X8=Z7NT2dRpIr+dHtmbW3S( zIgfYQTTvlN2!9kfq(=rdwoqCXcKjVVvWL(1;4s>_IhTN%rb{riu`wlmxB$BMG?od$ z8|^WMihH{O@KodGTEr9PyzQs%vC5*BdUwxR9d>dED36~?Fc#7_T@LFTkG+7)Z2W9` zzC))Dpq&vlH~`NPy-^y<{ zKe$1pG%9c&j-?U#<#Q?S80y@3$z%nLBPh;Lp+0PHS-zoyUpJANd+_KhDA+6%Cr8a? zONE%24njQORfW~%2`Ch10j-2QA%uq|QGZsbne*K|!j^LpiGe3{!?3e5<#NI`5B|d~ zN5AP3jX*C!9~(i&IJ({(?jA1Pi4i zoE16!&UGSmwrfU8+@nDpHVNRJfW`_{01k-`ZKK*h+Y|pVkrVs57FEteroiqN# z+p!9nA)5_0EBDp-ROvfaTq{eE4-U-JDR_C@K{1=Xr%YN^?A6Ly*KP_I_A7X(*3;q^ zU8Vng#miUq8_HT$=JzhWhV8ItO6WHcK`qmf40o6a$LAuQ>dPBDjizCFRcAx zxpTlCGGRq;d5e&`FEp8*H!7)F_4Ot+QL)~{8@MN2rP$VmCy>K-QTx_|6~N)bl*CdD z3A%*^zIwBvx35%Q^LzmL`|^A{>4Ro@)i&45yRsBDeZx1ILSW?grK2Qdg4C``gkPpC`-aOUfLS>;YYQO%qEWQv&ca6y>*}w0xwf>$#+rIjwao`Zos-3o)zSY&zJV9Z|LylHJds8$*bM(n`e1Cd2TCOywo z-_yFJ00VXcP}vHAjr+b^ffdmHbJj=>lZ~{fjwL_|y2^%I((y*IQ+7@RFF^MT@G%Rz zyQ0U&{>a_Kvw?8k^G-3AIvZL?g^^=Pfz zG(~=>c;mq*k&FbACWRC(M@Sb4N!pnO$LF;$K%0RDxHJ1#;X1%?7r*ucT+T!FaT&U| z$LikWOPt^@>`GHJOGl@0e0o$Lf6OgBx2j)EALB9R_F+VdXx}mcK<%XZJka-uL6j;U zzoNpc5ab>=PLFXNfHq(9^c@r7`gzc&Rh3{8*nLiEfo2xPQXl_$!Kl<_ z;SPmvR&0&!rG0#Zrc&C43;!s3tv#jv#MMyDjqM0I$}^6rGa!dhblIbPoI!5?(_E*x z8!Iac2Tyr+Yx(x_WLbg2wwL#p-b5J%{JME$7wOHSt#@X@>{j$ee+xb70dB;qAuPdH z!=!Td*OgO+n9^LmXi|kQ}hC znJTWNtfp*(<19seeK&s6QMvo$f344afy{-_MITJh!P)ofyiI^4_2;+X{lrvGApZJt zK^}zt<7sfC`nf<}U{g&8)8g1vs*H$D_is8-(-S?h7mGR^di2C@06x}5K1%7mK<6gk z$pVS~alQ~B(de0Eqq+h1%sqGcysKsL4>NsG_5Z#uck8lSE&0LfY-lYib!&WqmF)!` z#3`5awdwn{Tg>tkx6jimYn{?`{GK{B!lSV5RunY@Kz06AA8UDGQ1AFBw5y*GSNm>C zO80^gjM9{4CS3|g-4wXGKi*4oV*mo2Bdr2Rp6^;H6QxeZM5{tFJ_%FxQkTSMKGgAJ z@!|0^pOHF1Cmp#W^CHy|vjX|EE%Cl`^pTzqpN&7*n(y@q1r4Xve$5@hJk*@^u0anEfAA z*&|%|j)3A<#OK+liv$tgjB)6459-E$6pYi-@$*Aub7Cv0pV|va0rryKL^6uuLgvyaW4?!IQA`8MFl(2M+D1)MXrXj z(rX4XfCjL89mrh67iK6l-)VWwav&hu0#+0>O%kdb^fs~%lm-M`t_eej1*Gu5W5~59 zfusR|W_05L2bvRGolUnK>jB=dZwnRG!oN*k4L`yI76)*dH{y!|NuYzR&@@M2s>^L#d_zQx2BZR}vGY`b zgwrlN5%mh_$=t$)`T7Ha{K0PMKmaTuwTMErtV$bFyXhjTNWT5)UJHG>&U5VnGkB?T z(3GLVBZ-JVUL^k;{Waph@x)dj;2>MUY$1qxtdgi^Mq+KFHAXmclVZDiP!^8^>GTXM zWlWjz&_`4~-=1_Awe-()E0)?Z$q(rE6I}A6IwN{zrHwH(3&9aRdsr6{ms)@O{L|7$4;L*AbhjUDA{U zN)+cEg5oVVMWjmX%*sFZMVKkgx z`^i$DLc`PLx6|X2#x@#W=J89-j`gQMyhGp&x*|F{M;czVFK~UKgu1U|is`sb#_V7{ zSJzxSbjKUhvfIJLafJ*JHe@ofcG4jW56iUgrJj$JIHC%XWVBdR8O{GwQW{@h4=8I& zb3L@Uq6&~Ir7*!?`95?=#&$#asN69y$QjAH0J=u&ioTcrpf1;J@md^1 zS%X@eDW67Bk7j-nrF`tYHD@aATctCXp4ob=#BEZBZ))_qX4YsBQwRldZi2TUKd5AX zCAQtMIQNv&x#9g4&AMTd_5&3Sp)OQU$9QzIp1-pG9S6E`u+hG68u?+Nf%N zSb+dDXuBv_)C1;PdCLkBI*|mh&93mS_Y38DC8k1DU@Ky8_ZpEgdJ&Hc|77=uj@jH1 z>zVj5;+}{z=Gkl`wO+b|opebu>QPHqjp2Gb4_AV&BlidHH9(`JTdXfF&vTG*Wy!u; zEIpAleausjat;@4#U9LcXlTC8kJ;R&l49CS{Z`CV-R;;GPP|7i7|+Vp3v2py%W={) zQH=j-sC3NN);{Ix0(4iX~z}LCQO;$O5X@Too!5E9@~PENhxTy^>u8a7^Y2$ zSJW2u?d#D(pRpEzOTIFK4yHMLxK;+elZq8Qz?D5(XRje2!D z1-N1{a5pbj)70w%;k<+?^#Ck$=6CP>x*wiiS~x-3rE|^qHkbfrO`+sdX;lS>MJ97+ zkWlN~!Gp)Vt>_Y3C^gN>Y#Y<&cBXple2Xs_n7;8LOwSwTL)Fae%Gx@x?u)IBqi;|b z^U+(AG?`M$TN9g9mor^|2v^(Pk=lV^O|d)7|G845x;&-JGh!daXgCLA>ahQ!TM3%( z@%A~T{-Z8p;aoHKPErcd%DL^t4z|>GN=&hlnD?aI<Ya25(z1Nj&{RV}u+>%}^o7l3)U8DD+Mq~$<@27G+I*27? zCH=gOy6FBN#!^XJMHoeD8?L_!%8**QHokcrwPD?Bf$aQ%zKKQ{i>$Po^=Xf~hVrN? z+9G*9L|5J-P75Xj273%Wmb6);$XWx^i5Z){3z>fmCyr5~#$xoZ$n?*f%6Ol`;7fP5 zy|jxGlcf?GGBM<1B?Z9u^d$V-9adg0sNHpAaXHY%(9!$IF3yz=pW^r^^-j>IW z2B>>n|S_&vX3DJLL)RvEC4q486Tv8ev>Gk;(~)d^w`_xR2dMr`+exW)*ac|n-m zrFi@57oGuJVL!-5tbT@0f}t&!6w?wOlUrxAc575j3Cu+Yrv~0)(q_`|Cx8R9Y;X$l zGr&J#pd{9VhucH@N93W9{-iiWi9Iy8*QOml5#upcVREJ_DN@SP0Koy$&x*5gJBe~9 z7dVRXzxWQSC$`esMCmjh4ByD|8zW2>2Cw;$K)k)a6Wd2Y0*>_rTjx6xs0{U)PdlgG zV?YzqSFEu5Inmg(wSLZ{i23F&DsyMKE?>f-*iAe`&Mlw>;cMN(<*GPW-xx9^e$YryxCU z;+rCR1H?V{BPT!9E)pX$5oe0NQ3m=1snUV0qH#Tif|(Z_v*RRI=c(vuH2DZC{U zbKSTc_%Itw&!PF8$8iqF%yQJ6TVQc_JA8v4x^c`;&=%cNN3A(KpX)w?Tlladug!>! z>o=@wOOWLA{x_5AbeCq=z<`K{}?8|z)g_Df& zTqy~EVL`u~v*=wYizy&Bu;@&eE5Uyp#@R@+;&d2i+XEAkFI2~RI6cVutMckEES7?( zwyfKNH&MXI(H+!E6|K@I>*JL9R4{kNcOWfVWZp#FKE~#Go!#oYbs486$|hb7R^6D! zt~{Ww#A2H7dY7Xs!uuC>8F1-~OkGyg%GhyurQlIzOrl3RBgrysgdjTc?@+sXebb z^2^%bddMxdcXo=+XJnC!p2i}+Rl6R&xjP0Y7PM$lep0&F{i`gw#n@=noD0)PH1;K*+>OsHhfKkt00MFsbaZyKU9_CiduzFFWf=SK?8#`E3 zCN$+k>={N6^S%JPVE^=2zd3$lQmJ=IOJ-_9#qpc+gw+$$9R{vVZ%;YM^zIwhHd5;_UbB5lWW7B|DL=pZ1-9|^(KMy5$D&2m6Q9-huo zn{{9htztIn&VxABYzX_C#k0x=1?RZWa7OP@z1b}`(-~wLxgE#&nb$(ipA8oh*T2xD zjZ-kd{!Qr1xH6lT^ACXDZ~}|ME+t%6hmAr09jY;9waXKG_>x$?d9LAVN-?-Lu58#o zG}me^w=*5!)fbe#{4*+Vipv(6vw;MQGM{gFNhQ~G*{=*!O5LK=s#5<(sh`p1m@e<; zGJTT|SdIxj25!@(v9g$ZO#{H0Mup7plVpqkJCX4(5KKbU(&#wC81+ zwfkYv_l?}4ZyB>HE(C~S-ve`B!2~lwTqNn(hs^|YQxO@dXT6FeAA>X`K(6p>|7R{h zs+jeX^T6eB`L}XD-Pk@@_2Xy0Xc{*=04U|Vxpt#^lD6@^rY+NPpr=p`qV_|_^Y68POe z*O~LWId7^Me_+SQ&+D#Qzscox{goS#0H3lIv?shs@+qIedWRe3l-hoTJcf;_JzD(jCb%2Xzf>*+`lq5 zvmbIv?k>s3@sOC78v>&=VJ)+NGDTRUlEsyijH zT7LE=a%~nG9)geWUOWe=s=BUYewbu|wYGo44a|t@673thOQMgfaF*oIXU=GwIbXVTqQCT%j!$lh@!Hd|RP#jF zMq{_^yGLCP!ours&-+H4*RQsMV&OSt^@tO;QB#yPl#;e8>yv`1X5U`i zH0i9;>%33DK^LPpr%C;1(VJT-9LBaoYi@-pQG7jplxTv#ckmw+WcyYCF06OrfS4z@ z-ii8xPe(c7gK~#O5ZsV9xVe^}A7P;|&*>F`EujzZiT)#c4y%MC72J>=tuV{(B!VMa+>;&HR?rxxidP23u zQ6}574!Aq~B)jQrKSkYy?BQa{T|4J)K9!%>voGo*;4x3Y9{Bq;y*RFmJSEeA!i7`v z2C3pq-TB2B!M9La9=Q4dm@HD}TWHnE2U5(t(WkVoR=%XN+UMO3nr(|}a(2+-Zf(>m z?*mY4AJ^*NT^`3taEkxnoBDS1bgV?2!}yt;p0WieB*o6Z|+M0bHWu zGk637r7**i440JO@ZR{NS6F0oDNqh`QPBs%feOG?Mr#s49WY7FX2Yg}^oOJ!15g1! zfwuvPo{%u8fj#<3=guYQ+fkj0Sb3?Z~~TlcZkT=OP}CyzazFaSoj|enn;80Eo#oHO1uE^z{tlv||3kK}UNheK1Q_k2a{axH;VK z>GwST{NvTxXHHcQqMkT8TRk}U_*0J`I~5~rp}nY{c>bBEHK)cB7hTGIOgI1a>ZAdx zKJ4SI9-TejQ<=`%(3sBKOi%Zy3i$@7eVQHRB&QU>#~2I6!{>HESDJKt`}j*I=T6Ou z_cbjJUn(zp)~@TbEAk{KQgt)Y2L}AZluQTTMqA>g)GLA#eMOVc^}sx%1Lx~7gh8d% zq9!Ze6Hv=T6s0FXd?z^C4rv)U&_=`4bhpKt@UUd$jS+inC#Q)Qe+X>p);;#G2QP{a z@}}grk58w6rA#Keo3t*6ccTp+QvUb#_HJE1r;Aw_?@^YvZqF)pfYkI3CnPWHfl2FT zpnHJZY+O9!3TzaD1%bx#l#eI7@JhFD5PgXXYNP(a1?RQAKjw>WK2X-Ixlw^a@s%f1 zn5LPJk;JcdbscZJR49Fcy!VUx=v+bAtxyYNl|2J)K$Br@pHn1-@Zl8oPVVF&sdLma z-RbZ4!Q7~}>F~hvq~LOnL&yk7C{#yz=>3ZRg}?wex(N6}k;??p)oS$+Jpq83|_F`OYl zInukai7<$u^G)1(+5KNNgecl%rG+g_fN|-s=3R$Nztg);APyTsZgL52cOq&D9s~iCP{F?-;-K&vAhwGcjThpNz{DZ!PS;FQBfbJh_RX zb2E=^(x`QO>W^IHQca)QT+{1jJ2g;Btsa4he@3KD_{CB;4Em=RtD9YXFW)@ol>T z*_aqlym9IEL4GUptaui&z13V=P!WAE%xK4@bg6^w%BZ(mCVoXc)YWq)Fh)Ez&kAHL zYi&i<-#YEPcI7a^>k%*BFo930~e)v6h z61hd;4bH%eQN|wR_C#Lg4l<&O%Q!w&&!U}BrE0OL)F#e#^+jD$_C5(D;o<-aK1nM5 zHdZGFTO$NS>r(nJ^mH>@j2|MOd=kj+CZV{36GVa8ZcH(MQ6lD|oVK@*x!9$fFpa!2 z;YZ=vA|L`pw$~M$>E>h0jk;TqicxrFGbT{XvSn49{#xHPlpF7~^jCTHiDHu#!6g>d z!i{<;Tw)vTE)ovTiHTyZ{qa^0OJSe3oH#>b)=5;NE9!;y=f+*h#vrxcBo1GVPZpgj z+#WW)-!yMUujB*ay&7$CGTyqPo(!oc8$Vbqa8%RDhfG?n=o^$XLk3F5;y_0A0S3~X z1cB`1Fk%NKdpM(0S61^+BigCy6${ABS1ck-!w~pRX!~~>&+1Gs0Vj$L-DqQZWLxC? z&fjF&ewT56S205aIarDL^FiErdgSl3Xfp)9V_ujbft4p5J=q!bYZ9`UJYoLx49tGXtF>(;z%#BB=jZ=&;CTxUS|DP`A*msa)SC5(#hr`mx4?`W)IeK|zS)8Ex z_%wbls>gITr$DO4E*t9Q$erBEW$@(uyFNZ;pKafab8;_Gue9h@tb8*lY%n4YP`uI1 zWxIT@#<}rf{E%i+G%*Yiy!l3R==m13ar94r^|P&gD~Sjba2WuH3EF}c2&A>$t>$ znRnS1e4p(CaiF{Ox}p~GXNz(6b?5#D`3n9;Dj)r9?sdvXJCALLTM|w`hQgHY3s*iT z&wLadm#=9}j-UCUA~q`rTNg!_#ouJ>q5?o2q7{TiMH7bxggj{LOb_Bp5M5EGxhBpI z(V&*NJSA1g@iTXrwgW>EngjBoAwcrZZN5KraC%3@05fJP zK+4IDiUANd19mFj;7ZlKK^-CX3*`-QZfKEd!?uN%1P5*N(dzncyG2)@3mDi~-vmEh zm^o;^NYgoni;P7?06?ts9?Eaf6$5Vd_$lZW2jUU=Jf`7N@8S9Md6sx%UmoJJTLnQf ziD~X!-1~o5E zH*YuTV%I}7{iNQSD)JLb$*h|nev{8-Z8-Yk;0|hXro^%IyH$tj9d&Tob(P5+-))&M~<4gbQVBF{JVXB(#w*uM$;J8|ejYwGKPawTjZAKPt?pjb&Ov-Lso?e#Pz$ZpjQn z+0NNx7oXY)Bl=_riSSZ@ZIWBktmGj}!c}tn`VE_q~vR;iG=; zTx!v2Bw|<{^JlME@EfEd$i031+C7h?yOdkGyvdjb1RCFr#ye)|NgyF|>m8$&YbX?(JzBC=2{41FI-eNcA0HpC*%=yHaFg_r? zGv^F|eCG*2TL47P93oxiy^=U8=P2YgEh^fv1;UPNHO*VIIKu(_nR@YT*GdfsUDOh_ zlb}R7>9I1l+76$H!7dpa)`qy_u30Br4~qsvTJc%_W(MX{?d(czTThp^%&)})|1X+W z87BO5O(2>4Glj;H<~>~KMKnS-M$9qjZnk3>Cj(Lew_bi%q}<>X$oug#_ZmXF)6fi* zPmgvP2LKuZdpO!zdzaH*9pWyyGSl_LmDS(fi!g{hDV9jI=!xf_dEwdWV=qTe2hw5@ zArk+-Qe=yIMH*?>Z9Uf8{^53%r>aOCt~sUZGfmCI-RJT7HFrz+gA@1!SrVR8m3$PPfQ+ z0D1-y5vK$r1Z{(2iMGANfC$r1U${IiI4bx=3m^+QJ(zEv!0Qy}_nTw&{sZ^IK`b%zk|1^KH z0f*t-EGm}=bM4DYN!BM{xGig$?Gzr}-1sgn?RIJl13OE@b^v>T1-`lX2*CA4isKt1 z1!7SQb0{XU*n~gSQiBV`!?VtJn>c1{IOa@FD!`+_$%ykE3YULaMZhkGJHE%f#5lP? ztOvLjkNr1dd=Kn8=Q=s^VHgCS`SQ!+ld&1<^y6<>8dE&}WZz?F2YAI-$tPi`_5LR$ z4S$!6#!3Mx zN0AVPdU6Ko)q1LLjz;1B-m0P>Eg|tEyvu}xy)iu;HJzp%G7t2kwq7o)i#s;T2ijd% zoWCd?u*2uGZr|VTA8$O(3VR5pX;N7q*7n3P$#3Y5aoT3R@7fXW(Tlrv`6gWq6JDC!V@5<6w`C{S-n#6ouC5*e-$AS!|X(2$S)6 z;<$D^p8M=Ho&Q)$pkV(32| z!W!_x+OoO)fm2&1)4!1_^EZ+7S3+&>a8*jIfbA=*;Hdhjc2x#8=I*i+g!&g;u|kv+ z2aq}JM}%Npu8}q9vMnwaU+6w65DU-0tWB~6i~?;T zVpn)X)so@ME&(;ku|~tgsFn64<2JnwWE{I+YnvBf7fkXwTNMIaB3_I22h#908-xJ@uR(rCcO`9&*h zL`T3`g20P23cqnx$lMOtClGk5ATw@v8Syt**UpsW!iQH^z}Yx1&-Y9qCx*zrsiTQ%&K^Hh`QS5GHe&4p7QauXXAZPu4zy-7pz9GhKChD)(nBRH2{ zuzfPPFzLpT#yGJ9tD98LJBbiYjFh;WVHO1}pix7-e!@K`JFD-$P5zkH$`_QFvgm`X zuw00`ytMKU>2AMOHKT=+Iuw`H%eAbG4^pRr;u zAoJJoB8I{7A$d;nAvq=urx@=j*0Cy73{g$Yid~?#CUer&j=s+;BabvZNX0^64yq+= zB|ZhYCW1|JSolq`~nwjS^1JhJU@Mp4Z`!{su;SNM)uwnTAA2v0l7YD#LClaHY9 zNaDA|IaXWIghP@8wbhHRBzSZIL!~1~V+TsoCEr1|@9nYRHbPL*U(Cm(E+~DoV7S<( zZO_`AM;qSYBECYb+Ew>+9~8!(m4ll1(=~&!-07g*Z*N1SlN@(O%YrO4Fcw`17+A%yLL04$@!R5|*Q+>EH5HJb$VR03?uEXa> zFZh-yrw-Kezft#|t>m>NaX+b_^7~6X|2y^9SOUe&#EdrX-!XutWA&EQqOSfXa5_XS z!b1R+TS+h2rS*}UiLs>D$#5yOQVlRB=UT1&6onpDD+R+G0F0_xLB4yx@gR9Bv)FhQxVqZTsVDU+uB!Ga7MkShw06zmV+N|`JQZ8b`D zk(aSjEq}en(Wd-w$z5wOf64QIOjBCn4pkZT;ti6)Cz1Hx~5bW6G*}K5UUsG%++nk@GB3>9j1Yo39DdA6<#8Qf?lOp zrs39Du!`g`aQxH?Lv8;>^wQy~vx|gR?j=N+ArqEZmn~iO39;(4sNutc0o7Z$yJ+^E z;VPlgXiC@B76C&-@=S`FQ*xmSCqz5qed6ZaMQvY<%>l{Z=t#bAb0lsWTE`moRlJvf zfHBJ7qQo?z+RiJ*pZTsXzo+DNN+5S(pYe)vFH~Y`RmseS&4}wffa<8Mb7CQ(t3BrH z!}y%`c-X4}Jv)WZ`w%h0HK&1nzq+Y16-YPdb%Jj9*}t+6)!%fj5#lH+isJZyb{)qD z=7g4mS58q`ni7GDaHFQBvqnN^g^eLVm=Y4?!!A$iADk@rO7UtJMs`%>jC6L7xaTD| zYZVBGN}HyZaR^qP+=7agY9sO(ACZk%kExSr(jD4UTRn3W4$^2@+70tPzCh6=&}f%S zCNQJ4 zI^g`E!*~gPoQm{Wc_@rU#~pZ$wyWXn=#tz|QvO`b+gAnDU)5J9$yA0K)nS0H4p`Ny z3$@{N+G9@}o)E5_%3l+%yhs_YjNkl!z?G0-$*A}#nlKT{Cplq1?wYU=Jl|LUwdP6$ z*s+ZfWt*!M5Eps*L@KXMKV#X$TcZi=p)p;p6{j8D9hi?$r>KMhB zn-Wlz6A}ifJCTyX0IL`Kp5RfPRz8{z85}^jd5sED*+XmQ$&iy>Y`nUz9l+h3_Qc~`h$~=e4*1yRo+|7wy2n%mH>yebI z*zU;J&%-KZ)-u+4Z$Ief*Q#=Hsu@A2nuZS#FBhem?$9^yt2KtQ<93^nl(fGnjS+{= znrc+?pH=l5u`J;P5D@G%sOrV0{HU(_!C5}`@UhV1qxU{n?oz6SSWn}XS&a;v8;@5n zvqpV#xT}+->=2-I>()EhAFsYdm%AeNCm5$;e+9v!1J(z8um+>s)vv&B2|b^ZbGWJk;uE6EF9N(7^_MF6(aKA*AKdWV>B zJx=krU0@p!I%yRK?mU>4*#4k2T5PaEaX2)N#>A$Ulm=yoF9?f_Y^lz4Bu0v)JP5&j zqGl|d4iw`v?Mq$L?yY*$8)5OxCt$Yrp3ER=KDkfw1Z;|*on!)@5!u9&z!=d)Fxj99^b-yQBmmS`D_uTp@~zYq#sAMKUv;k^ zQDt{pzKh&%A|f8GaLjGs4h1|Mp2#$oNM_;=ZClKpoO+snk}Az|B{Y9LH2(}P*G)MTl2-Ydb(w^@`uzEy2WvAHY*@} zCWh8`O+eM%bxW!jxySoj3C_6PlW?&3^nqCm(dZ|e?9#AYQu6QW#hj9#E3qgo?@{h6 zO8!-eTuxl=Dwf3KwGf=I(w>ou#fcj{9CPcMF`z3r@BCD`8xHbnBX`_?BS2cB!Ve6^s7h#)8r?rjrtz0uTyz8I@#?DBh({XpM(6Olu#^>#3l$P^;0)H zO_Iy}kNZ7hy9hbw-$4lKl}j7}NJb{B)n$bkNLXso&RP!Wq-5^gEZFqR`1WXjggvi# z08R+mri9jrWP|2f8Olo+GatDq@?*kxo0Z(4(0wxISX!E;bSYgP@jTuu|7g?#Q-J-pBV=v$>hw*&_FAlRL9I z|BmoCN^ZEZFPqJ_W#jza!1Z*ti?7sqTBpvvlT(w8?0CC&+sVa*gKG3cKf^&s$bf^u zHnS+j!1c`HESnNy8E&>~QyN;VQIkz(u}e^-5Tp?m)zyK)Wr3D0=)gr4t5)ozVU@yE zSbQ5O!0afawY>Nw;xadn2S4=?bq_c9!}4?2#&1&Og4h3Zt^n$Ehf~;P|bZVgTfED4% zt<0nLJzilGsQvqS(?HIP*H*v8#Uo6(TGH_SJa(D$W|zlveBJzfOuHKcP+4WROB~$X z)O~Rf2Wp#jS!LxbT=;=$#j?9a_kK-sA|YYa@sgAT9Vyymm)1cxWss^%bW$Dx&&rsE;;RiFD6t4+!MTT zRx>Box&kiOpLXdDABZKjc*~*$Ai|L`2znI4jD2A?B=TE4EI@e@)tBB z@=JDOONalH=MNR2y0N3HgR;1=2BaQF6`8?+2r{&X`OaJ>!y3M z*oPVq;M*ly3|M`$2pd(J$|X!RcU-d;iW(4gUTamRH|I-l0%BZZA)Ve_pGR2*_l?AC z8aK0=!Yr!hniy@)*Ou#yPMU>9LVKJIniieE2-7Ug31=Pj&lP1DS1N zoM<4`jXhmZc;%ARU3TQ=lFg3J2Yi`Y1kEV(?^?Zn=$k%ba$_km()1rZSk~A1RkHff zK-S2H4T~PQ-Gu-IehwckEK53uMcfd$&P$4v60J@;t>x1zerT!|#^$J2;$=l*b!J~5 z$w&2MNb>l_v-vhI+B?pefYt&sR$D2kY$qR6@l45f6&nr3&YX7XsG%nkmfE}1la`wg zwUSpyC!bJ>>w8LoBhmEW;bg9b?YW);CAY48N}mz}YwzqS=kj_!qo@0?^0XDGDE2#R z=dWDq*x|12T|K4a|$k((>3`2WQPhFk$3yf&&m`^O=RiS{OR1^99}}TbYW>JS6qPnRwaL;uQVzh#VvpOILgeamSrY>wOt@LajD`o{uOQ==#Z?i{L-Ic=BLNcr1g>3DUnwoser fr+ecANH9oCa#h=1pE^4AyGr@*%Z=-hT}FNn*Fo3h literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/subqueries.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01d95c7f3584049034d89aebd60c752c7b8b3f41 GIT binary patch literal 7633 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 B{`~*| literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/where.cpython-35.pyc b/env/lib/python3.5/site-packages/django/db/models/sql/__pycache__/where.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ecb13105dfce11ae37db1d0ce48bcd5b9d36094 GIT binary patch literal 8183 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 start_alias to + # be used by local fields. + seen_models = {None: start_alias} + + for field in opts.concrete_fields: + model = field.model._meta.concrete_model + # A proxy model will have a different model and concrete_model. We + # will assign None if the field belongs to this model. + if model == opts.model: + model = None + if from_parent and model is not None and issubclass( + from_parent._meta.concrete_model, model._meta.concrete_model): + # Avoid loading data for already loaded parents. + # We end up here in the case select_related() resolution + # proceeds from parent model to child model. In that case the + # parent model data is already present in the SELECT clause, + # and we want to avoid reloading the same data again. + continue + if field.model in only_load and field.attname not in only_load[field.model]: + continue + alias = self.query.join_parent_model(opts, model, start_alias, + seen_models) + column = field.get_col(alias) + result.append(column) + return result + + def get_distinct(self): + """ + Return a quoted list of fields to use in DISTINCT ON part of the query. + + This method can alter the tables in the query, and thus it must be + called before get_from_clause(). + """ + result = [] + params = [] + opts = self.query.get_meta() + + for name in self.query.distinct_fields: + parts = name.split(LOOKUP_SEP) + _, targets, alias, joins, path, _, transform_function = self._setup_joins(parts, opts, None) + targets, alias, _ = self.query.trim_joins(targets, joins, path) + for target in targets: + if name in self.query.annotation_select: + result.append(name) + else: + r, p = self.compile(transform_function(target, alias)) + result.append(r) + params.append(p) + return result, params + + def find_ordering_name(self, name, opts, alias=None, default_order='ASC', + already_seen=None): + """ + Return the table alias (the name might be ambiguous, the alias will + not be) and column name for ordering by the given 'name' parameter. + The 'name' is of the form 'field1__field2__...__fieldN'. + """ + name, order = get_order_dir(name, default_order) + descending = order == 'DESC' + pieces = name.split(LOOKUP_SEP) + field, targets, alias, joins, path, opts, transform_function = self._setup_joins(pieces, opts, alias) + + # If we get to this point and the field is a relation to another model, + # append the default ordering for that model unless the attribute name + # of the field is specified. + if field.is_relation and opts.ordering and getattr(field, 'attname', None) != name: + # Firstly, avoid infinite loops. + already_seen = already_seen or set() + join_tuple = tuple(getattr(self.query.alias_map[j], 'join_cols', None) for j in joins) + if join_tuple in already_seen: + raise FieldError('Infinite loop caused by ordering.') + already_seen.add(join_tuple) + + results = [] + for item in opts.ordering: + results.extend(self.find_ordering_name(item, opts, alias, + order, already_seen)) + return results + targets, alias, _ = self.query.trim_joins(targets, joins, path) + return [(OrderBy(transform_function(t, alias), descending=descending), False) for t in targets] + + def _setup_joins(self, pieces, opts, alias): + """ + Helper method for get_order_by() and get_distinct(). + + get_ordering() and get_distinct() must produce same target columns on + same input, as the prefixes of get_ordering() and get_distinct() must + match. Executing SQL where this is not true is an error. + """ + alias = alias or self.query.get_initial_alias() + field, targets, opts, joins, path, transform_function = self.query.setup_joins(pieces, opts, alias) + alias = joins[-1] + return field, targets, alias, joins, path, opts, transform_function + + def get_from_clause(self): + """ + Return a list of strings that are joined together to go after the + "FROM" part of the query, as well as a list any extra parameters that + need to be included. Subclasses, can override this to create a + from-clause via a "select". + + This should only be called after any SQL construction methods that + might change the tables that are needed. This means the select columns, + ordering, and distinct must be done first. + """ + result = [] + params = [] + for alias in tuple(self.query.alias_map): + if not self.query.alias_refcount[alias]: + continue + try: + from_clause = self.query.alias_map[alias] + except KeyError: + # Extra tables can end up in self.tables, but not in the + # alias_map if they aren't in a join. That's OK. We skip them. + continue + clause_sql, clause_params = self.compile(from_clause) + result.append(clause_sql) + params.extend(clause_params) + for t in self.query.extra_tables: + alias, _ = self.query.table_alias(t) + # Only add the alias if it's not already present (the table_alias() + # call increments the refcount, so an alias refcount of one means + # this is the only reference). + if alias not in self.query.alias_map or self.query.alias_refcount[alias] == 1: + result.append(', %s' % self.quote_name_unless_alias(alias)) + return result, params + + def get_related_selections(self, select, opts=None, root_alias=None, cur_depth=1, + requested=None, restricted=None): + """ + Fill in the information needed for a select_related query. The current + depth is measured as the number of connections away from the root model + (for example, cur_depth=1 means we are looking at models with direct + connections to the root model). + """ + def _get_field_choices(): + direct_choices = (f.name for f in opts.fields if f.is_relation) + reverse_choices = ( + f.field.related_query_name() + for f in opts.related_objects if f.field.unique + ) + return chain(direct_choices, reverse_choices, self.query._filtered_relations) + + related_klass_infos = [] + if not restricted and cur_depth > self.query.max_depth: + # We've recursed far enough; bail out. + return related_klass_infos + + if not opts: + opts = self.query.get_meta() + root_alias = self.query.get_initial_alias() + only_load = self.query.get_loaded_field_names() + + # Setup for the case when only particular related fields should be + # included in the related selection. + fields_found = set() + if requested is None: + restricted = isinstance(self.query.select_related, dict) + if restricted: + requested = self.query.select_related + + def get_related_klass_infos(klass_info, related_klass_infos): + klass_info['related_klass_infos'] = related_klass_infos + + for f in opts.fields: + field_model = f.model._meta.concrete_model + fields_found.add(f.name) + + if restricted: + next = requested.get(f.name, {}) + if not f.is_relation: + # If a non-related field is used like a relation, + # or if a single non-relational field is given. + if next or f.name in requested: + raise FieldError( + "Non-relational field given in select_related: '%s'. " + "Choices are: %s" % ( + f.name, + ", ".join(_get_field_choices()) or '(none)', + ) + ) + else: + next = False + + if not select_related_descend(f, restricted, requested, + only_load.get(field_model)): + continue + klass_info = { + 'model': f.remote_field.model, + 'field': f, + 'reverse': False, + 'local_setter': f.set_cached_value, + 'remote_setter': f.remote_field.set_cached_value if f.unique else lambda x, y: None, + 'from_parent': False, + } + related_klass_infos.append(klass_info) + select_fields = [] + _, _, _, joins, _, _ = self.query.setup_joins( + [f.name], opts, root_alias) + alias = joins[-1] + columns = self.get_default_columns(start_alias=alias, opts=f.remote_field.model._meta) + for col in columns: + select_fields.append(len(select)) + select.append((col, None)) + klass_info['select_fields'] = select_fields + next_klass_infos = self.get_related_selections( + select, f.remote_field.model._meta, alias, cur_depth + 1, next, restricted) + get_related_klass_infos(klass_info, next_klass_infos) + + if restricted: + related_fields = [ + (o.field, o.related_model) + for o in opts.related_objects + if o.field.unique and not o.many_to_many + ] + for f, model in related_fields: + if not select_related_descend(f, restricted, requested, + only_load.get(model), reverse=True): + continue + + related_field_name = f.related_query_name() + fields_found.add(related_field_name) + + join_info = self.query.setup_joins([related_field_name], opts, root_alias) + alias = join_info.joins[-1] + from_parent = issubclass(model, opts.model) and model is not opts.model + klass_info = { + 'model': model, + 'field': f, + 'reverse': True, + 'local_setter': f.remote_field.set_cached_value, + 'remote_setter': f.set_cached_value, + 'from_parent': from_parent, + } + related_klass_infos.append(klass_info) + select_fields = [] + columns = self.get_default_columns( + start_alias=alias, opts=model._meta, from_parent=opts.model) + for col in columns: + select_fields.append(len(select)) + select.append((col, None)) + klass_info['select_fields'] = select_fields + next = requested.get(f.related_query_name(), {}) + next_klass_infos = self.get_related_selections( + select, model._meta, alias, cur_depth + 1, + next, restricted) + get_related_klass_infos(klass_info, next_klass_infos) + fields_not_found = set(requested).difference(fields_found) + for name in list(requested): + # Filtered relations work only on the topmost level. + if cur_depth > 1: + break + if name in self.query._filtered_relations: + fields_found.add(name) + f, _, join_opts, joins, _, _ = self.query.setup_joins([name], opts, root_alias) + model = join_opts.model + alias = joins[-1] + from_parent = issubclass(model, opts.model) and model is not opts.model + + def local_setter(obj, from_obj): + f.remote_field.set_cached_value(from_obj, obj) + + def remote_setter(obj, from_obj): + setattr(from_obj, name, obj) + klass_info = { + 'model': model, + 'field': f, + 'reverse': True, + 'local_setter': local_setter, + 'remote_setter': remote_setter, + 'from_parent': from_parent, + } + related_klass_infos.append(klass_info) + select_fields = [] + columns = self.get_default_columns( + start_alias=alias, opts=model._meta, + from_parent=opts.model, + ) + for col in columns: + select_fields.append(len(select)) + select.append((col, None)) + klass_info['select_fields'] = select_fields + next_requested = requested.get(name, {}) + next_klass_infos = self.get_related_selections( + select, opts=model._meta, root_alias=alias, + cur_depth=cur_depth + 1, requested=next_requested, + restricted=restricted, + ) + get_related_klass_infos(klass_info, next_klass_infos) + fields_not_found = set(requested).difference(fields_found) + if fields_not_found: + invalid_fields = ("'%s'" % s for s in fields_not_found) + raise FieldError( + 'Invalid field name(s) given in select_related: %s. ' + 'Choices are: %s' % ( + ', '.join(invalid_fields), + ', '.join(_get_field_choices()) or '(none)', + ) + ) + return related_klass_infos + + def get_select_for_update_of_arguments(self): + """ + Return a quoted list of arguments for the SELECT FOR UPDATE OF part of + the query. + """ + def _get_field_choices(): + """Yield all allowed field paths in breadth-first search order.""" + queue = collections.deque([(None, self.klass_info)]) + while queue: + parent_path, klass_info = queue.popleft() + if parent_path is None: + path = [] + yield 'self' + else: + field = klass_info['field'] + if klass_info['reverse']: + field = field.remote_field + path = parent_path + [field.name] + yield LOOKUP_SEP.join(path) + queue.extend( + (path, klass_info) + for klass_info in klass_info.get('related_klass_infos', []) + ) + result = [] + invalid_names = [] + for name in self.query.select_for_update_of: + parts = [] if name == 'self' else name.split(LOOKUP_SEP) + klass_info = self.klass_info + for part in parts: + for related_klass_info in klass_info.get('related_klass_infos', []): + field = related_klass_info['field'] + if related_klass_info['reverse']: + field = field.remote_field + if field.name == part: + klass_info = related_klass_info + break + else: + klass_info = None + break + if klass_info is None: + invalid_names.append(name) + continue + select_index = klass_info['select_fields'][0] + col = self.select[select_index][0] + if self.connection.features.select_for_update_of_column: + result.append(self.compile(col)[0]) + else: + result.append(self.quote_name_unless_alias(col.alias)) + if invalid_names: + raise FieldError( + 'Invalid field name(s) given in select_for_update(of=(...)): %s. ' + 'Only relational fields followed in the query are allowed. ' + 'Choices are: %s.' % ( + ', '.join(invalid_names), + ', '.join(_get_field_choices()), + ) + ) + return result + + def deferred_to_columns(self): + """ + Convert the self.deferred_loading data structure to mapping of table + names to sets of column names which are to be loaded. Return the + dictionary. + """ + columns = {} + self.query.deferred_to_data(columns, self.query.get_loaded_field_names_cb) + return columns + + def get_converters(self, expressions): + converters = {} + for i, expression in enumerate(expressions): + if expression: + backend_converters = self.connection.ops.get_db_converters(expression) + field_converters = expression.get_db_converters(self.connection) + if backend_converters or field_converters: + convs = [] + for conv in (backend_converters + field_converters): + if func_supports_parameter(conv, 'context'): + warnings.warn( + 'Remove the context parameter from %s.%s(). Support for it ' + 'will be removed in Django 3.0.' % ( + conv.__self__.__class__.__name__, + conv.__name__, + ), + RemovedInDjango30Warning, + ) + conv = functools.partial(conv, context={}) + convs.append(conv) + converters[i] = (convs, expression) + return converters + + def apply_converters(self, rows, converters): + connection = self.connection + converters = list(converters.items()) + for row in map(list, rows): + for pos, (convs, expression) in converters: + value = row[pos] + for converter in convs: + value = converter(value, expression, connection) + row[pos] = value + yield row + + def results_iter(self, results=None, tuple_expected=False, chunked_fetch=False, + chunk_size=GET_ITERATOR_CHUNK_SIZE): + """Return an iterator over the results from executing this query.""" + if results is None: + results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size) + fields = [s[0] for s in self.select[0:self.col_count]] + converters = self.get_converters(fields) + rows = chain.from_iterable(results) + if converters: + rows = self.apply_converters(rows, converters) + if tuple_expected: + rows = map(tuple, rows) + return rows + + def has_results(self): + """ + Backends (e.g. NoSQL) can override this in order to use optimized + versions of "query has any results." + """ + # This is always executed on a query clone, so we can modify self.query + self.query.add_extra({'a': 1}, None, None, None, None, None) + self.query.set_extra_mask(['a']) + return bool(self.execute_sql(SINGLE)) + + def execute_sql(self, result_type=MULTI, chunked_fetch=False, chunk_size=GET_ITERATOR_CHUNK_SIZE): + """ + Run the query against the database and return the result(s). The + return value is a single data item if result_type is SINGLE, or an + iterator over the results if the result_type is MULTI. + + result_type is either MULTI (use fetchmany() to retrieve all rows), + SINGLE (only retrieve a single row), or None. In this last case, the + cursor is returned if any query is executed, since it's used by + subclasses such as InsertQuery). It's possible, however, that no query + is needed, as the filters describe an empty set. In that case, None is + returned, to avoid any unnecessary database interaction. + """ + result_type = result_type or NO_RESULTS + try: + sql, params = self.as_sql() + if not sql: + raise EmptyResultSet + except EmptyResultSet: + if result_type == MULTI: + return iter([]) + else: + return + if chunked_fetch: + cursor = self.connection.chunked_cursor() + else: + cursor = self.connection.cursor() + try: + cursor.execute(sql, params) + except Exception: + # Might fail for server-side cursors (e.g. connection closed) + cursor.close() + raise + + if result_type == CURSOR: + # Give the caller the cursor to process and close. + return cursor + if result_type == SINGLE: + try: + val = cursor.fetchone() + if val: + return val[0:self.col_count] + return val + finally: + # done with the cursor + cursor.close() + if result_type == NO_RESULTS: + cursor.close() + return + + result = cursor_iter( + cursor, self.connection.features.empty_fetchmany_value, + self.col_count if self.has_extra_select else None, + chunk_size, + ) + if not chunked_fetch and not self.connection.features.can_use_chunked_reads: + try: + # If we are using non-chunked reads, we return the same data + # structure as normally, but ensure it is all read into memory + # before going any further. Use chunked_fetch if requested. + return list(result) + finally: + # done with the cursor + cursor.close() + return result + + def as_subquery_condition(self, alias, columns, compiler): + qn = compiler.quote_name_unless_alias + qn2 = self.connection.ops.quote_name + + for index, select_col in enumerate(self.query.select): + lhs_sql, lhs_params = self.compile(select_col) + rhs = '%s.%s' % (qn(alias), qn2(columns[index])) + self.query.where.add( + QueryWrapper('%s = %s' % (lhs_sql, rhs), lhs_params), 'AND') + + sql, params = self.as_sql() + return 'EXISTS (%s)' % sql, params + + def explain_query(self): + result = list(self.execute_sql()) + # Some backends return 1 item tuples with strings, and others return + # tuples with integers and strings. Flatten them out into strings. + for row in result[0]: + if not isinstance(row, str): + yield ' '.join(str(c) for c in row) + else: + yield row + + +class SQLInsertCompiler(SQLCompiler): + return_id = False + + def field_as_sql(self, field, val): + """ + Take a field and a value intended to be saved on that field, and + return placeholder SQL and accompanying params. Check for raw values, + expressions, and fields with get_placeholder() defined in that order. + + When field is None, consider the value raw and use it as the + placeholder, with no corresponding parameters returned. + """ + if field is None: + # A field value of None means the value is raw. + sql, params = val, [] + elif hasattr(val, 'as_sql'): + # This is an expression, let's compile it. + sql, params = self.compile(val) + elif hasattr(field, 'get_placeholder'): + # Some fields (e.g. geo fields) need special munging before + # they can be inserted. + sql, params = field.get_placeholder(val, self, self.connection), [val] + else: + # Return the common case for the placeholder + sql, params = '%s', [val] + + # The following hook is only used by Oracle Spatial, which sometimes + # needs to yield 'NULL' and [] as its placeholder and params instead + # of '%s' and [None]. The 'NULL' placeholder is produced earlier by + # OracleOperations.get_geom_placeholder(). The following line removes + # the corresponding None parameter. See ticket #10888. + params = self.connection.ops.modify_insert_params(sql, params) + + return sql, params + + def prepare_value(self, field, value): + """ + Prepare a value to be used in a query by resolving it if it is an + expression and otherwise calling the field's get_db_prep_save(). + """ + if hasattr(value, 'resolve_expression'): + value = value.resolve_expression(self.query, allow_joins=False, for_save=True) + # Don't allow values containing Col expressions. They refer to + # existing columns on a row, but in the case of insert the row + # doesn't exist yet. + if value.contains_column_references: + raise ValueError( + 'Failed to insert expression "%s" on %s. F() expressions ' + 'can only be used to update, not to insert.' % (value, field) + ) + if value.contains_aggregate: + raise FieldError("Aggregate functions are not allowed in this query") + if value.contains_over_clause: + raise FieldError('Window expressions are not allowed in this query.') + else: + value = field.get_db_prep_save(value, connection=self.connection) + return value + + def pre_save_val(self, field, obj): + """ + Get the given field's value off the given obj. pre_save() is used for + things like auto_now on DateTimeField. Skip it if this is a raw query. + """ + if self.query.raw: + return getattr(obj, field.attname) + return field.pre_save(obj, add=True) + + def assemble_as_sql(self, fields, value_rows): + """ + Take a sequence of N fields and a sequence of M rows of values, and + generate placeholder SQL and parameters for each field and value. + Return a pair containing: + * a sequence of M rows of N SQL placeholder strings, and + * a sequence of M rows of corresponding parameter values. + + Each placeholder string may contain any number of '%s' interpolation + strings, and each parameter row will contain exactly as many params + as the total number of '%s's in the corresponding placeholder row. + """ + if not value_rows: + return [], [] + + # list of (sql, [params]) tuples for each object to be saved + # Shape: [n_objs][n_fields][2] + rows_of_fields_as_sql = ( + (self.field_as_sql(field, v) for field, v in zip(fields, row)) + for row in value_rows + ) + + # tuple like ([sqls], [[params]s]) for each object to be saved + # Shape: [n_objs][2][n_fields] + sql_and_param_pair_rows = (zip(*row) for row in rows_of_fields_as_sql) + + # Extract separate lists for placeholders and params. + # Each of these has shape [n_objs][n_fields] + placeholder_rows, param_rows = zip(*sql_and_param_pair_rows) + + # Params for each field are still lists, and need to be flattened. + param_rows = [[p for ps in row for p in ps] for row in param_rows] + + return placeholder_rows, param_rows + + def as_sql(self): + # We don't need quote_name_unless_alias() here, since these are all + # going to be column names (so we can avoid the extra overhead). + qn = self.connection.ops.quote_name + opts = self.query.get_meta() + result = ['INSERT INTO %s' % qn(opts.db_table)] + fields = self.query.fields or [opts.pk] + result.append('(%s)' % ', '.join(qn(f.column) for f in fields)) + + if self.query.fields: + value_rows = [ + [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields] + for obj in self.query.objs + ] + else: + # An empty object. + value_rows = [[self.connection.ops.pk_default_value()] for _ in self.query.objs] + fields = [None] + + # Currently the backends just accept values when generating bulk + # queries and generate their own placeholders. Doing that isn't + # necessary and it should be possible to use placeholders and + # expressions in bulk inserts too. + can_bulk = (not self.return_id and self.connection.features.has_bulk_insert) + + placeholder_rows, param_rows = self.assemble_as_sql(fields, value_rows) + + if self.return_id and self.connection.features.can_return_id_from_insert: + if self.connection.features.can_return_ids_from_bulk_insert: + result.append(self.connection.ops.bulk_insert_sql(fields, placeholder_rows)) + params = param_rows + else: + result.append("VALUES (%s)" % ", ".join(placeholder_rows[0])) + params = [param_rows[0]] + col = "%s.%s" % (qn(opts.db_table), qn(opts.pk.column)) + r_fmt, r_params = self.connection.ops.return_insert_id() + # Skip empty r_fmt to allow subclasses to customize behavior for + # 3rd party backends. Refs #19096. + if r_fmt: + result.append(r_fmt % col) + params += [r_params] + return [(" ".join(result), tuple(chain.from_iterable(params)))] + + if can_bulk: + result.append(self.connection.ops.bulk_insert_sql(fields, placeholder_rows)) + return [(" ".join(result), tuple(p for ps in param_rows for p in ps))] + else: + return [ + (" ".join(result + ["VALUES (%s)" % ", ".join(p)]), vals) + for p, vals in zip(placeholder_rows, param_rows) + ] + + def execute_sql(self, return_id=False): + assert not ( + return_id and len(self.query.objs) != 1 and + not self.connection.features.can_return_ids_from_bulk_insert + ) + self.return_id = return_id + with self.connection.cursor() as cursor: + for sql, params in self.as_sql(): + cursor.execute(sql, params) + if not return_id: + return + if self.connection.features.can_return_ids_from_bulk_insert and len(self.query.objs) > 1: + return self.connection.ops.fetch_returned_insert_ids(cursor) + if self.connection.features.can_return_id_from_insert: + assert len(self.query.objs) == 1 + return self.connection.ops.fetch_returned_insert_id(cursor) + return self.connection.ops.last_insert_id( + cursor, self.query.get_meta().db_table, self.query.get_meta().pk.column + ) + + +class SQLDeleteCompiler(SQLCompiler): + def as_sql(self): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. + """ + assert len([t for t in self.query.alias_map if self.query.alias_refcount[t] > 0]) == 1, \ + "Can only delete from one table at a time." + qn = self.quote_name_unless_alias + result = ['DELETE FROM %s' % qn(self.query.base_table)] + where, params = self.compile(self.query.where) + if where: + result.append('WHERE %s' % where) + return ' '.join(result), tuple(params) + + +class SQLUpdateCompiler(SQLCompiler): + def as_sql(self): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. + """ + self.pre_sql_setup() + if not self.query.values: + return '', () + qn = self.quote_name_unless_alias + values, update_params = [], [] + for field, model, val in self.query.values: + if hasattr(val, 'resolve_expression'): + val = val.resolve_expression(self.query, allow_joins=False, for_save=True) + if val.contains_aggregate: + raise FieldError("Aggregate functions are not allowed in this query") + if val.contains_over_clause: + raise FieldError('Window expressions are not allowed in this query.') + elif hasattr(val, 'prepare_database_save'): + if field.remote_field: + val = field.get_db_prep_save( + val.prepare_database_save(field), + connection=self.connection, + ) + else: + raise TypeError( + "Tried to update field %s with a model instance, %r. " + "Use a value compatible with %s." + % (field, val, field.__class__.__name__) + ) + else: + val = field.get_db_prep_save(val, connection=self.connection) + + # Getting the placeholder for the field. + if hasattr(field, 'get_placeholder'): + placeholder = field.get_placeholder(val, self, self.connection) + else: + placeholder = '%s' + name = field.column + if hasattr(val, 'as_sql'): + sql, params = self.compile(val) + values.append('%s = %s' % (qn(name), placeholder % sql)) + update_params.extend(params) + elif val is not None: + values.append('%s = %s' % (qn(name), placeholder)) + update_params.append(val) + else: + values.append('%s = NULL' % qn(name)) + table = self.query.base_table + result = [ + 'UPDATE %s SET' % qn(table), + ', '.join(values), + ] + where, params = self.compile(self.query.where) + if where: + result.append('WHERE %s' % where) + return ' '.join(result), tuple(update_params + params) + + def execute_sql(self, result_type): + """ + Execute the specified update. Return the number of rows affected by + the primary update query. The "primary update query" is the first + non-empty query that is executed. Row counts for any subsequent, + related queries are not available. + """ + cursor = super().execute_sql(result_type) + try: + rows = cursor.rowcount if cursor else 0 + is_empty = cursor is None + finally: + if cursor: + cursor.close() + for query in self.query.get_related_updates(): + aux_rows = query.get_compiler(self.using).execute_sql(result_type) + if is_empty and aux_rows: + rows = aux_rows + is_empty = False + return rows + + def pre_sql_setup(self): + """ + If the update depends on results from other tables, munge the "where" + conditions to match the format required for (portable) SQL updates. + + If multiple updates are required, pull out the id values to update at + this point so that they don't change as a result of the progressive + updates. + """ + refcounts_before = self.query.alias_refcount.copy() + # Ensure base table is in the query + self.query.get_initial_alias() + count = self.query.count_active_tables() + if not self.query.related_updates and count == 1: + return + query = self.query.chain(klass=Query) + query.select_related = False + query.clear_ordering(True) + query._extra = {} + query.select = [] + query.add_fields([query.get_meta().pk.name]) + super().pre_sql_setup() + + must_pre_select = count > 1 and not self.connection.features.update_can_self_select + + # Now we adjust the current query: reset the where clause and get rid + # of all the tables we don't need (since they're in the sub-select). + self.query.where = self.query.where_class() + if self.query.related_updates or must_pre_select: + # Either we're using the idents in multiple update queries (so + # don't want them to change), or the db backend doesn't support + # selecting from the updating table (e.g. MySQL). + idents = [] + for rows in query.get_compiler(self.using).execute_sql(MULTI): + idents.extend(r[0] for r in rows) + self.query.add_filter(('pk__in', idents)) + self.query.related_ids = idents + else: + # The fast path. Filters and updates in one query. + self.query.add_filter(('pk__in', query)) + self.query.reset_refcounts(refcounts_before) + + +class SQLAggregateCompiler(SQLCompiler): + def as_sql(self): + """ + Create the SQL for this query. Return the SQL string and list of + parameters. + """ + sql, params = [], [] + for annotation in self.query.annotation_select.values(): + ann_sql, ann_params = self.compile(annotation, select_format=FORCE) + sql.append(ann_sql) + params.extend(ann_params) + self.col_count = len(self.query.annotation_select) + sql = ', '.join(sql) + params = tuple(params) + + sql = 'SELECT %s FROM (%s) subquery' % (sql, self.query.subquery) + params = params + self.query.sub_params + return sql, params + + +def cursor_iter(cursor, sentinel, col_count, itersize): + """ + Yield blocks of rows from a cursor and ensure the cursor is closed when + done. + """ + try: + for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel): + yield rows if col_count is None else [r[:col_count] for r in rows] + finally: + cursor.close() diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/constants.py b/env/lib/python3.5/site-packages/django/db/models/sql/constants.py new file mode 100644 index 0000000..28f4242 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/sql/constants.py @@ -0,0 +1,27 @@ +""" +Constants specific to the SQL storage portion of the ORM. +""" + +import re + +# Size of each "chunk" for get_iterator calls. +# Larger values are slightly faster at the expense of more storage space. +GET_ITERATOR_CHUNK_SIZE = 100 + +# Namedtuples for sql.* internal use. + +# How many results to expect from a cursor.execute call +MULTI = 'multi' +SINGLE = 'single' +CURSOR = 'cursor' +NO_RESULTS = 'no results' + +ORDER_PATTERN = re.compile(r'\?|[-+]?[.\w]+$') +ORDER_DIR = { + 'ASC': ('ASC', 'DESC'), + 'DESC': ('DESC', 'ASC'), +} + +# SQL join types. +INNER = 'INNER JOIN' +LOUTER = 'LEFT OUTER JOIN' diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/datastructures.py b/env/lib/python3.5/site-packages/django/db/models/sql/datastructures.py new file mode 100644 index 0000000..ab02f65 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/sql/datastructures.py @@ -0,0 +1,170 @@ +""" +Useful auxiliary data structures for query construction. Not useful outside +the SQL domain. +""" +# for backwards-compatibility in Django 1.11 +from django.core.exceptions import EmptyResultSet # NOQA: F401 +from django.db.models.sql.constants import INNER, LOUTER + + +class MultiJoin(Exception): + """ + Used by join construction code to indicate the point at which a + multi-valued join was attempted (if the caller wants to treat that + exceptionally). + """ + def __init__(self, names_pos, path_with_names): + self.level = names_pos + # The path travelled, this includes the path to the multijoin. + self.names_with_path = path_with_names + + +class Empty: + pass + + +class Join: + """ + Used by sql.Query and sql.SQLCompiler to generate JOIN clauses into the + FROM entry. For example, the SQL generated could be + LEFT OUTER JOIN "sometable" T1 ON ("othertable"."sometable_id" = "sometable"."id") + + This class is primarily used in Query.alias_map. All entries in alias_map + must be Join compatible by providing the following attributes and methods: + - table_name (string) + - table_alias (possible alias for the table, can be None) + - join_type (can be None for those entries that aren't joined from + anything) + - parent_alias (which table is this join's parent, can be None similarly + to join_type) + - as_sql() + - relabeled_clone() + """ + def __init__(self, table_name, parent_alias, table_alias, join_type, + join_field, nullable, filtered_relation=None): + # Join table + self.table_name = table_name + self.parent_alias = parent_alias + # Note: table_alias is not necessarily known at instantiation time. + self.table_alias = table_alias + # LOUTER or INNER + self.join_type = join_type + # A list of 2-tuples to use in the ON clause of the JOIN. + # Each 2-tuple will create one join condition in the ON clause. + self.join_cols = join_field.get_joining_columns() + # Along which field (or ForeignObjectRel in the reverse join case) + self.join_field = join_field + # Is this join nullabled? + self.nullable = nullable + self.filtered_relation = filtered_relation + + def as_sql(self, compiler, connection): + """ + Generate the full + LEFT OUTER JOIN sometable ON sometable.somecol = othertable.othercol, params + clause for this join. + """ + join_conditions = [] + params = [] + qn = compiler.quote_name_unless_alias + qn2 = connection.ops.quote_name + + # Add a join condition for each pair of joining columns. + for index, (lhs_col, rhs_col) in enumerate(self.join_cols): + join_conditions.append('%s.%s = %s.%s' % ( + qn(self.parent_alias), + qn2(lhs_col), + qn(self.table_alias), + qn2(rhs_col), + )) + + # Add a single condition inside parentheses for whatever + # get_extra_restriction() returns. + extra_cond = self.join_field.get_extra_restriction( + compiler.query.where_class, self.table_alias, self.parent_alias) + if extra_cond: + extra_sql, extra_params = compiler.compile(extra_cond) + join_conditions.append('(%s)' % extra_sql) + params.extend(extra_params) + if self.filtered_relation: + extra_sql, extra_params = compiler.compile(self.filtered_relation) + if extra_sql: + join_conditions.append('(%s)' % extra_sql) + params.extend(extra_params) + if not join_conditions: + # This might be a rel on the other end of an actual declared field. + declared_field = getattr(self.join_field, 'field', self.join_field) + raise ValueError( + "Join generated an empty ON clause. %s did not yield either " + "joining columns or extra restrictions." % declared_field.__class__ + ) + on_clause_sql = ' AND '.join(join_conditions) + alias_str = '' if self.table_alias == self.table_name else (' %s' % self.table_alias) + sql = '%s %s%s ON (%s)' % (self.join_type, qn(self.table_name), alias_str, on_clause_sql) + return sql, params + + def relabeled_clone(self, change_map): + new_parent_alias = change_map.get(self.parent_alias, self.parent_alias) + new_table_alias = change_map.get(self.table_alias, self.table_alias) + if self.filtered_relation is not None: + filtered_relation = self.filtered_relation.clone() + filtered_relation.path = [change_map.get(p, p) for p in self.filtered_relation.path] + else: + filtered_relation = None + return self.__class__( + self.table_name, new_parent_alias, new_table_alias, self.join_type, + self.join_field, self.nullable, filtered_relation=filtered_relation, + ) + + def equals(self, other, with_filtered_relation): + return ( + isinstance(other, self.__class__) and + self.table_name == other.table_name and + self.parent_alias == other.parent_alias and + self.join_field == other.join_field and + (not with_filtered_relation or self.filtered_relation == other.filtered_relation) + ) + + def __eq__(self, other): + return self.equals(other, with_filtered_relation=True) + + def demote(self): + new = self.relabeled_clone({}) + new.join_type = INNER + return new + + def promote(self): + new = self.relabeled_clone({}) + new.join_type = LOUTER + return new + + +class BaseTable: + """ + The BaseTable class is used for base table references in FROM clause. For + example, the SQL "foo" in + SELECT * FROM "foo" WHERE somecond + could be generated by this class. + """ + join_type = None + parent_alias = None + filtered_relation = None + + def __init__(self, table_name, alias): + self.table_name = table_name + self.table_alias = alias + + def as_sql(self, compiler, connection): + alias_str = '' if self.table_alias == self.table_name else (' %s' % self.table_alias) + base_sql = compiler.quote_name_unless_alias(self.table_name) + return base_sql + alias_str, [] + + def relabeled_clone(self, change_map): + return self.__class__(self.table_name, change_map.get(self.table_alias, self.table_alias)) + + def equals(self, other, with_filtered_relation): + return ( + isinstance(self, other.__class__) and + self.table_name == other.table_name and + self.table_alias == other.table_alias + ) diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/query.py b/env/lib/python3.5/site-packages/django/db/models/sql/query.py new file mode 100644 index 0000000..cf469cd --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/sql/query.py @@ -0,0 +1,2227 @@ +""" +Create SQL statements for QuerySets. + +The code in here encapsulates all of the SQL construction so that QuerySets +themselves do not have to (and could be backed by things other than SQL +databases). The abstraction barrier only works one way: this module has to know +all about the internals of models in order to get the information it needs. +""" +import functools +from collections import Counter, OrderedDict, namedtuple +from collections.abc import Iterator, Mapping +from itertools import chain, count, product +from string import ascii_uppercase + +from django.core.exceptions import ( + EmptyResultSet, FieldDoesNotExist, FieldError, +) +from django.db import DEFAULT_DB_ALIAS, NotSupportedError, connections +from django.db.models.aggregates import Count +from django.db.models.constants import LOOKUP_SEP +from django.db.models.expressions import Col, Ref +from django.db.models.fields import Field +from django.db.models.fields.related_lookups import MultiColSource +from django.db.models.lookups import Lookup +from django.db.models.query_utils import ( + Q, check_rel_lookup_compatibility, refs_expression, +) +from django.db.models.sql.constants import ( + INNER, LOUTER, ORDER_DIR, ORDER_PATTERN, SINGLE, +) +from django.db.models.sql.datastructures import ( + BaseTable, Empty, Join, MultiJoin, +) +from django.db.models.sql.where import ( + AND, OR, ExtraWhere, NothingNode, WhereNode, +) +from django.utils.encoding import force_text +from django.utils.functional import cached_property +from django.utils.tree import Node + +__all__ = ['Query', 'RawQuery'] + + +def get_field_names_from_opts(opts): + return set(chain.from_iterable( + (f.name, f.attname) if f.concrete else (f.name,) + for f in opts.get_fields() + )) + + +def get_children_from_q(q): + for child in q.children: + if isinstance(child, Node): + yield from get_children_from_q(child) + else: + yield child + + +JoinInfo = namedtuple( + 'JoinInfo', + ('final_field', 'targets', 'opts', 'joins', 'path', 'transform_function') +) + + +class RawQuery: + """A single raw SQL query.""" + + def __init__(self, sql, using, params=None): + self.params = params or () + self.sql = sql + self.using = using + self.cursor = None + + # Mirror some properties of a normal query so that + # the compiler can be used to process results. + self.low_mark, self.high_mark = 0, None # Used for offset/limit + self.extra_select = {} + self.annotation_select = {} + + def chain(self, using): + return self.clone(using) + + def clone(self, using): + return RawQuery(self.sql, using, params=self.params) + + def get_columns(self): + if self.cursor is None: + self._execute_query() + converter = connections[self.using].introspection.column_name_converter + return [converter(column_meta[0]) + for column_meta in self.cursor.description] + + def __iter__(self): + # Always execute a new query for a new iterator. + # This could be optimized with a cache at the expense of RAM. + self._execute_query() + if not connections[self.using].features.can_use_chunked_reads: + # If the database can't use chunked reads we need to make sure we + # evaluate the entire query up front. + result = list(self.cursor) + else: + result = self.cursor + return iter(result) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self) + + @property + def params_type(self): + return dict if isinstance(self.params, Mapping) else tuple + + def __str__(self): + return self.sql % self.params_type(self.params) + + def _execute_query(self): + connection = connections[self.using] + + # Adapt parameters to the database, as much as possible considering + # that the target type isn't known. See #17755. + params_type = self.params_type + adapter = connection.ops.adapt_unknown_value + if params_type is tuple: + params = tuple(adapter(val) for val in self.params) + elif params_type is dict: + params = {key: adapter(val) for key, val in self.params.items()} + else: + raise RuntimeError("Unexpected params type: %s" % params_type) + + self.cursor = connection.cursor() + self.cursor.execute(self.sql, params) + + +class Query: + """A single SQL query.""" + + alias_prefix = 'T' + subq_aliases = frozenset([alias_prefix]) + + compiler = 'SQLCompiler' + + def __init__(self, model, where=WhereNode): + self.model = model + self.alias_refcount = {} + # alias_map is the most important data structure regarding joins. + # It's used for recording which joins exist in the query and what + # types they are. The key is the alias of the joined table (possibly + # the table name) and the value is a Join-like object (see + # sql.datastructures.Join for more information). + self.alias_map = OrderedDict() + # Sometimes the query contains references to aliases in outer queries (as + # a result of split_exclude). Correct alias quoting needs to know these + # aliases too. + self.external_aliases = set() + self.table_map = {} # Maps table names to list of aliases. + self.default_cols = True + self.default_ordering = True + self.standard_ordering = True + self.used_aliases = set() + self.filter_is_sticky = False + self.subquery = False + + # SQL-related attributes + # Select and related select clauses are expressions to use in the + # SELECT clause of the query. + # The select is used for cases where we want to set up the select + # clause to contain other than default fields (values(), subqueries...) + # Note that annotations go to annotations dictionary. + self.select = () + self.where = where() + self.where_class = where + # The group_by attribute can have one of the following forms: + # - None: no group by at all in the query + # - A tuple of expressions: group by (at least) those expressions. + # String refs are also allowed for now. + # - True: group by all select fields of the model + # See compiler.get_group_by() for details. + self.group_by = None + self.order_by = () + self.low_mark, self.high_mark = 0, None # Used for offset/limit + self.distinct = False + self.distinct_fields = () + self.select_for_update = False + self.select_for_update_nowait = False + self.select_for_update_skip_locked = False + self.select_for_update_of = () + + self.select_related = False + # Arbitrary limit for select_related to prevents infinite recursion. + self.max_depth = 5 + + # Holds the selects defined by a call to values() or values_list() + # excluding annotation_select and extra_select. + self.values_select = () + + # SQL annotation-related attributes + # The _annotations will be an OrderedDict when used. Due to the cost + # of creating OrderedDict this attribute is created lazily (in + # self.annotations property). + self._annotations = None # Maps alias -> Annotation Expression + self.annotation_select_mask = None + self._annotation_select_cache = None + + # Set combination attributes + self.combinator = None + self.combinator_all = False + self.combined_queries = () + + # These are for extensions. The contents are more or less appended + # verbatim to the appropriate clause. + # The _extra attribute is an OrderedDict, lazily created similarly to + # .annotations + self._extra = None # Maps col_alias -> (col_sql, params). + self.extra_select_mask = None + self._extra_select_cache = None + + self.extra_tables = () + self.extra_order_by = () + + # A tuple that is a set of model field names and either True, if these + # are the fields to defer, or False if these are the only fields to + # load. + self.deferred_loading = (frozenset(), True) + + self._filtered_relations = {} + + self.explain_query = False + self.explain_format = None + self.explain_options = {} + + @property + def extra(self): + if self._extra is None: + self._extra = OrderedDict() + return self._extra + + @property + def annotations(self): + if self._annotations is None: + self._annotations = OrderedDict() + return self._annotations + + @property + def has_select_fields(self): + return bool(self.select or self.annotation_select_mask or self.extra_select_mask) + + @cached_property + def base_table(self): + for alias in self.alias_map: + return alias + + def __str__(self): + """ + Return the query as a string of SQL with the parameter values + substituted in (use sql_with_params() to see the unsubstituted string). + + Parameter values won't necessarily be quoted correctly, since that is + done by the database interface at execution time. + """ + sql, params = self.sql_with_params() + return sql % params + + def sql_with_params(self): + """ + Return the query as an SQL string and the parameters that will be + substituted into the query. + """ + return self.get_compiler(DEFAULT_DB_ALIAS).as_sql() + + def __deepcopy__(self, memo): + """Limit the amount of work when a Query is deepcopied.""" + result = self.clone() + memo[id(self)] = result + return result + + def _prepare(self, field): + return self + + def get_compiler(self, using=None, connection=None): + if using is None and connection is None: + raise ValueError("Need either using or connection") + if using: + connection = connections[using] + return connection.ops.compiler(self.compiler)(self, connection, using) + + def get_meta(self): + """ + Return the Options instance (the model._meta) from which to start + processing. Normally, this is self.model._meta, but it can be changed + by subclasses. + """ + return self.model._meta + + def clone(self): + """ + Return a copy of the current Query. A lightweight alternative to + to deepcopy(). + """ + obj = Empty() + obj.__class__ = self.__class__ + # Copy references to everything. + obj.__dict__ = self.__dict__.copy() + # Clone attributes that can't use shallow copy. + obj.alias_refcount = self.alias_refcount.copy() + obj.alias_map = self.alias_map.copy() + obj.external_aliases = self.external_aliases.copy() + obj.table_map = self.table_map.copy() + obj.where = self.where.clone() + obj._annotations = self._annotations.copy() if self._annotations is not None else None + if self.annotation_select_mask is None: + obj.annotation_select_mask = None + else: + obj.annotation_select_mask = self.annotation_select_mask.copy() + # _annotation_select_cache cannot be copied, as doing so breaks the + # (necessary) state in which both annotations and + # _annotation_select_cache point to the same underlying objects. + # It will get re-populated in the cloned queryset the next time it's + # used. + obj._annotation_select_cache = None + obj._extra = self._extra.copy() if self._extra is not None else None + if self.extra_select_mask is None: + obj.extra_select_mask = None + else: + obj.extra_select_mask = self.extra_select_mask.copy() + if self._extra_select_cache is None: + obj._extra_select_cache = None + else: + obj._extra_select_cache = self._extra_select_cache.copy() + if 'subq_aliases' in self.__dict__: + obj.subq_aliases = self.subq_aliases.copy() + obj.used_aliases = self.used_aliases.copy() + obj._filtered_relations = self._filtered_relations.copy() + # Clear the cached_property + try: + del obj.base_table + except AttributeError: + pass + return obj + + def chain(self, klass=None): + """ + Return a copy of the current Query that's ready for another operation. + The klass argument changes the type of the Query, e.g. UpdateQuery. + """ + obj = self.clone() + if klass and obj.__class__ != klass: + obj.__class__ = klass + if not obj.filter_is_sticky: + obj.used_aliases = set() + obj.filter_is_sticky = False + if hasattr(obj, '_setup_query'): + obj._setup_query() + return obj + + def relabeled_clone(self, change_map): + clone = self.clone() + clone.change_aliases(change_map) + return clone + + def rewrite_cols(self, annotation, col_cnt): + # We must make sure the inner query has the referred columns in it. + # If we are aggregating over an annotation, then Django uses Ref() + # instances to note this. However, if we are annotating over a column + # of a related model, then it might be that column isn't part of the + # SELECT clause of the inner query, and we must manually make sure + # the column is selected. An example case is: + # .aggregate(Sum('author__awards')) + # Resolving this expression results in a join to author, but there + # is no guarantee the awards column of author is in the select clause + # of the query. Thus we must manually add the column to the inner + # query. + orig_exprs = annotation.get_source_expressions() + new_exprs = [] + for expr in orig_exprs: + # FIXME: These conditions are fairly arbitrary. Identify a better + # method of having expressions decide which code path they should + # take. + if isinstance(expr, Ref): + # Its already a Ref to subquery (see resolve_ref() for + # details) + new_exprs.append(expr) + elif isinstance(expr, (WhereNode, Lookup)): + # Decompose the subexpressions further. The code here is + # copied from the else clause, but this condition must appear + # before the contains_aggregate/is_summary condition below. + new_expr, col_cnt = self.rewrite_cols(expr, col_cnt) + new_exprs.append(new_expr) + elif isinstance(expr, Col) or (expr.contains_aggregate and not expr.is_summary): + # Reference to column. Make sure the referenced column + # is selected. + col_cnt += 1 + col_alias = '__col%d' % col_cnt + self.annotations[col_alias] = expr + self.append_annotation_mask([col_alias]) + new_exprs.append(Ref(col_alias, expr)) + else: + # Some other expression not referencing database values + # directly. Its subexpression might contain Cols. + new_expr, col_cnt = self.rewrite_cols(expr, col_cnt) + new_exprs.append(new_expr) + annotation.set_source_expressions(new_exprs) + return annotation, col_cnt + + def get_aggregation(self, using, added_aggregate_names): + """ + Return the dictionary with the values of the existing aggregations. + """ + if not self.annotation_select: + return {} + has_limit = self.low_mark != 0 or self.high_mark is not None + has_existing_annotations = any( + annotation for alias, annotation + in self.annotations.items() + if alias not in added_aggregate_names + ) + # Decide if we need to use a subquery. + # + # Existing annotations would cause incorrect results as get_aggregation() + # must produce just one result and thus must not use GROUP BY. But we + # aren't smart enough to remove the existing annotations from the + # query, so those would force us to use GROUP BY. + # + # If the query has limit or distinct, or uses set operations, then + # those operations must be done in a subquery so that the query + # aggregates on the limit and/or distinct results instead of applying + # the distinct and limit after the aggregation. + if (isinstance(self.group_by, tuple) or has_limit or has_existing_annotations or + self.distinct or self.combinator): + from django.db.models.sql.subqueries import AggregateQuery + outer_query = AggregateQuery(self.model) + inner_query = self.clone() + inner_query.select_for_update = False + inner_query.select_related = False + if not has_limit and not self.distinct_fields: + # Queries with distinct_fields need ordering and when a limit + # is applied we must take the slice from the ordered query. + # Otherwise no need for ordering. + inner_query.clear_ordering(True) + if not inner_query.distinct: + # If the inner query uses default select and it has some + # aggregate annotations, then we must make sure the inner + # query is grouped by the main model's primary key. However, + # clearing the select clause can alter results if distinct is + # used. + if inner_query.default_cols and has_existing_annotations: + inner_query.group_by = (self.model._meta.pk.get_col(inner_query.get_initial_alias()),) + inner_query.default_cols = False + + relabels = {t: 'subquery' for t in inner_query.alias_map} + relabels[None] = 'subquery' + # Remove any aggregates marked for reduction from the subquery + # and move them to the outer AggregateQuery. + col_cnt = 0 + for alias, expression in list(inner_query.annotation_select.items()): + if expression.is_summary: + expression, col_cnt = inner_query.rewrite_cols(expression, col_cnt) + outer_query.annotations[alias] = expression.relabeled_clone(relabels) + del inner_query.annotations[alias] + # Make sure the annotation_select wont use cached results. + inner_query.set_annotation_mask(inner_query.annotation_select_mask) + if inner_query.select == () and not inner_query.default_cols and not inner_query.annotation_select_mask: + # In case of Model.objects[0:3].count(), there would be no + # field selected in the inner query, yet we must use a subquery. + # So, make sure at least one field is selected. + inner_query.select = (self.model._meta.pk.get_col(inner_query.get_initial_alias()),) + try: + outer_query.add_subquery(inner_query, using) + except EmptyResultSet: + return { + alias: None + for alias in outer_query.annotation_select + } + else: + outer_query = self + self.select = () + self.default_cols = False + self._extra = {} + + outer_query.clear_ordering(True) + outer_query.clear_limits() + outer_query.select_for_update = False + outer_query.select_related = False + compiler = outer_query.get_compiler(using) + result = compiler.execute_sql(SINGLE) + if result is None: + result = [None] * len(outer_query.annotation_select) + + converters = compiler.get_converters(outer_query.annotation_select.values()) + result = next(compiler.apply_converters((result,), converters)) + + return dict(zip(outer_query.annotation_select, result)) + + def get_count(self, using): + """ + Perform a COUNT() query using the current filter constraints. + """ + obj = self.clone() + obj.add_annotation(Count('*'), alias='__count', is_summary=True) + number = obj.get_aggregation(using, ['__count'])['__count'] + if number is None: + number = 0 + return number + + def has_filters(self): + return self.where + + def has_results(self, using): + q = self.clone() + if not q.distinct: + if q.group_by is True: + q.add_fields((f.attname for f in self.model._meta.concrete_fields), False) + q.set_group_by() + q.clear_select_clause() + q.clear_ordering(True) + q.set_limits(high=1) + compiler = q.get_compiler(using=using) + return compiler.has_results() + + def explain(self, using, format=None, **options): + q = self.clone() + q.explain_query = True + q.explain_format = format + q.explain_options = options + compiler = q.get_compiler(using=using) + return '\n'.join(compiler.explain_query()) + + def combine(self, rhs, connector): + """ + Merge the 'rhs' query into the current one (with any 'rhs' effects + being applied *after* (that is, "to the right of") anything in the + current query. 'rhs' is not modified during a call to this function. + + The 'connector' parameter describes how to connect filters from the + 'rhs' query. + """ + assert self.model == rhs.model, \ + "Cannot combine queries on two different base models." + assert self.can_filter(), \ + "Cannot combine queries once a slice has been taken." + assert self.distinct == rhs.distinct, \ + "Cannot combine a unique query with a non-unique query." + assert self.distinct_fields == rhs.distinct_fields, \ + "Cannot combine queries with different distinct fields." + + # Work out how to relabel the rhs aliases, if necessary. + change_map = {} + conjunction = (connector == AND) + + # Determine which existing joins can be reused. When combining the + # query with AND we must recreate all joins for m2m filters. When + # combining with OR we can reuse joins. The reason is that in AND + # case a single row can't fulfill a condition like: + # revrel__col=1 & revrel__col=2 + # But, there might be two different related rows matching this + # condition. In OR case a single True is enough, so single row is + # enough, too. + # + # Note that we will be creating duplicate joins for non-m2m joins in + # the AND case. The results will be correct but this creates too many + # joins. This is something that could be fixed later on. + reuse = set() if conjunction else set(self.alias_map) + # Base table must be present in the query - this is the same + # table on both sides. + self.get_initial_alias() + joinpromoter = JoinPromoter(connector, 2, False) + joinpromoter.add_votes( + j for j in self.alias_map if self.alias_map[j].join_type == INNER) + rhs_votes = set() + # Now, add the joins from rhs query into the new query (skipping base + # table). + rhs_tables = list(rhs.alias_map)[1:] + for alias in rhs_tables: + join = rhs.alias_map[alias] + # If the left side of the join was already relabeled, use the + # updated alias. + join = join.relabeled_clone(change_map) + new_alias = self.join(join, reuse=reuse) + if join.join_type == INNER: + rhs_votes.add(new_alias) + # We can't reuse the same join again in the query. If we have two + # distinct joins for the same connection in rhs query, then the + # combined query must have two joins, too. + reuse.discard(new_alias) + if alias != new_alias: + change_map[alias] = new_alias + if not rhs.alias_refcount[alias]: + # The alias was unused in the rhs query. Unref it so that it + # will be unused in the new query, too. We have to add and + # unref the alias so that join promotion has information of + # the join type for the unused alias. + self.unref_alias(new_alias) + joinpromoter.add_votes(rhs_votes) + joinpromoter.update_join_types(self) + + # Now relabel a copy of the rhs where-clause and add it to the current + # one. + w = rhs.where.clone() + w.relabel_aliases(change_map) + self.where.add(w, connector) + + # Selection columns and extra extensions are those provided by 'rhs'. + if rhs.select: + self.set_select([col.relabeled_clone(change_map) for col in rhs.select]) + else: + self.select = () + + if connector == OR: + # It would be nice to be able to handle this, but the queries don't + # really make sense (or return consistent value sets). Not worth + # the extra complexity when you can write a real query instead. + if self._extra and rhs._extra: + raise ValueError("When merging querysets using 'or', you cannot have extra(select=...) on both sides.") + self.extra.update(rhs.extra) + extra_select_mask = set() + if self.extra_select_mask is not None: + extra_select_mask.update(self.extra_select_mask) + if rhs.extra_select_mask is not None: + extra_select_mask.update(rhs.extra_select_mask) + if extra_select_mask: + self.set_extra_mask(extra_select_mask) + self.extra_tables += rhs.extra_tables + + # Ordering uses the 'rhs' ordering, unless it has none, in which case + # the current ordering is used. + self.order_by = rhs.order_by or self.order_by + self.extra_order_by = rhs.extra_order_by or self.extra_order_by + + def deferred_to_data(self, target, callback): + """ + Convert the self.deferred_loading data structure to an alternate data + structure, describing the field that *will* be loaded. This is used to + compute the columns to select from the database and also by the + QuerySet class to work out which fields are being initialized on each + model. Models that have all their fields included aren't mentioned in + the result, only those that have field restrictions in place. + + The "target" parameter is the instance that is populated (in place). + The "callback" is a function that is called whenever a (model, field) + pair need to be added to "target". It accepts three parameters: + "target", and the model and list of fields being added for that model. + """ + field_names, defer = self.deferred_loading + if not field_names: + return + orig_opts = self.get_meta() + seen = {} + must_include = {orig_opts.concrete_model: {orig_opts.pk}} + for field_name in field_names: + parts = field_name.split(LOOKUP_SEP) + cur_model = self.model._meta.concrete_model + opts = orig_opts + for name in parts[:-1]: + old_model = cur_model + if name in self._filtered_relations: + name = self._filtered_relations[name].relation_name + source = opts.get_field(name) + if is_reverse_o2o(source): + cur_model = source.related_model + else: + cur_model = source.remote_field.model + opts = cur_model._meta + # Even if we're "just passing through" this model, we must add + # both the current model's pk and the related reference field + # (if it's not a reverse relation) to the things we select. + if not is_reverse_o2o(source): + must_include[old_model].add(source) + add_to_dict(must_include, cur_model, opts.pk) + field = opts.get_field(parts[-1]) + is_reverse_object = field.auto_created and not field.concrete + model = field.related_model if is_reverse_object else field.model + model = model._meta.concrete_model + if model == opts.model: + model = cur_model + if not is_reverse_o2o(field): + add_to_dict(seen, model, field) + + if defer: + # We need to load all fields for each model, except those that + # appear in "seen" (for all models that appear in "seen"). The only + # slight complexity here is handling fields that exist on parent + # models. + workset = {} + for model, values in seen.items(): + for field in model._meta.local_fields: + if field not in values: + m = field.model._meta.concrete_model + add_to_dict(workset, m, field) + for model, values in must_include.items(): + # If we haven't included a model in workset, we don't add the + # corresponding must_include fields for that model, since an + # empty set means "include all fields". That's why there's no + # "else" branch here. + if model in workset: + workset[model].update(values) + for model, values in workset.items(): + callback(target, model, values) + else: + for model, values in must_include.items(): + if model in seen: + seen[model].update(values) + else: + # As we've passed through this model, but not explicitly + # included any fields, we have to make sure it's mentioned + # so that only the "must include" fields are pulled in. + seen[model] = values + # Now ensure that every model in the inheritance chain is mentioned + # in the parent list. Again, it must be mentioned to ensure that + # only "must include" fields are pulled in. + for model in orig_opts.get_parent_list(): + seen.setdefault(model, set()) + for model, values in seen.items(): + callback(target, model, values) + + def table_alias(self, table_name, create=False, filtered_relation=None): + """ + Return a table alias for the given table_name and whether this is a + new alias or not. + + If 'create' is true, a new alias is always created. Otherwise, the + most recently created alias for the table (if one exists) is reused. + """ + alias_list = self.table_map.get(table_name) + if not create and alias_list: + alias = alias_list[0] + self.alias_refcount[alias] += 1 + return alias, False + + # Create a new alias for this table. + if alias_list: + alias = '%s%d' % (self.alias_prefix, len(self.alias_map) + 1) + alias_list.append(alias) + else: + # The first occurrence of a table uses the table name directly. + alias = filtered_relation.alias if filtered_relation is not None else table_name + self.table_map[table_name] = [alias] + self.alias_refcount[alias] = 1 + return alias, True + + def ref_alias(self, alias): + """Increases the reference count for this alias.""" + self.alias_refcount[alias] += 1 + + def unref_alias(self, alias, amount=1): + """Decreases the reference count for this alias.""" + self.alias_refcount[alias] -= amount + + def promote_joins(self, aliases): + """ + Promote recursively the join type of given aliases and its children to + an outer join. If 'unconditional' is False, only promote the join if + it is nullable or the parent join is an outer join. + + The children promotion is done to avoid join chains that contain a LOUTER + b INNER c. So, if we have currently a INNER b INNER c and a->b is promoted, + then we must also promote b->c automatically, or otherwise the promotion + of a->b doesn't actually change anything in the query results. + """ + aliases = list(aliases) + while aliases: + alias = aliases.pop(0) + if self.alias_map[alias].join_type is None: + # This is the base table (first FROM entry) - this table + # isn't really joined at all in the query, so we should not + # alter its join type. + continue + # Only the first alias (skipped above) should have None join_type + assert self.alias_map[alias].join_type is not None + parent_alias = self.alias_map[alias].parent_alias + parent_louter = parent_alias and self.alias_map[parent_alias].join_type == LOUTER + already_louter = self.alias_map[alias].join_type == LOUTER + if ((self.alias_map[alias].nullable or parent_louter) and + not already_louter): + self.alias_map[alias] = self.alias_map[alias].promote() + # Join type of 'alias' changed, so re-examine all aliases that + # refer to this one. + aliases.extend( + join for join in self.alias_map + if self.alias_map[join].parent_alias == alias and join not in aliases + ) + + def demote_joins(self, aliases): + """ + Change join type from LOUTER to INNER for all joins in aliases. + + Similarly to promote_joins(), this method must ensure no join chains + containing first an outer, then an inner join are generated. If we + are demoting b->c join in chain a LOUTER b LOUTER c then we must + demote a->b automatically, or otherwise the demotion of b->c doesn't + actually change anything in the query results. . + """ + aliases = list(aliases) + while aliases: + alias = aliases.pop(0) + if self.alias_map[alias].join_type == LOUTER: + self.alias_map[alias] = self.alias_map[alias].demote() + parent_alias = self.alias_map[alias].parent_alias + if self.alias_map[parent_alias].join_type == INNER: + aliases.append(parent_alias) + + def reset_refcounts(self, to_counts): + """ + Reset reference counts for aliases so that they match the value passed + in `to_counts`. + """ + for alias, cur_refcount in self.alias_refcount.copy().items(): + unref_amount = cur_refcount - to_counts.get(alias, 0) + self.unref_alias(alias, unref_amount) + + def change_aliases(self, change_map): + """ + Change the aliases in change_map (which maps old-alias -> new-alias), + relabelling any references to them in select columns and the where + clause. + """ + assert set(change_map).isdisjoint(change_map.values()) + + # 1. Update references in "select" (normal columns plus aliases), + # "group by" and "where". + self.where.relabel_aliases(change_map) + if isinstance(self.group_by, tuple): + self.group_by = tuple([col.relabeled_clone(change_map) for col in self.group_by]) + self.select = tuple([col.relabeled_clone(change_map) for col in self.select]) + self._annotations = self._annotations and OrderedDict( + (key, col.relabeled_clone(change_map)) for key, col in self._annotations.items() + ) + + # 2. Rename the alias in the internal table/alias datastructures. + for old_alias, new_alias in change_map.items(): + if old_alias not in self.alias_map: + continue + alias_data = self.alias_map[old_alias].relabeled_clone(change_map) + self.alias_map[new_alias] = alias_data + self.alias_refcount[new_alias] = self.alias_refcount[old_alias] + del self.alias_refcount[old_alias] + del self.alias_map[old_alias] + + table_aliases = self.table_map[alias_data.table_name] + for pos, alias in enumerate(table_aliases): + if alias == old_alias: + table_aliases[pos] = new_alias + break + self.external_aliases = {change_map.get(alias, alias) + for alias in self.external_aliases} + + def bump_prefix(self, outer_query): + """ + Change the alias prefix to the next letter in the alphabet in a way + that the outer query's aliases and this query's aliases will not + conflict. Even tables that previously had no alias will get an alias + after this call. + """ + def prefix_gen(): + """ + Generate a sequence of characters in alphabetical order: + -> 'A', 'B', 'C', ... + + When the alphabet is finished, the sequence will continue with the + Cartesian product: + -> 'AA', 'AB', 'AC', ... + """ + alphabet = ascii_uppercase + prefix = chr(ord(self.alias_prefix) + 1) + yield prefix + for n in count(1): + seq = alphabet[alphabet.index(prefix):] if prefix else alphabet + for s in product(seq, repeat=n): + yield ''.join(s) + prefix = None + + if self.alias_prefix != outer_query.alias_prefix: + # No clashes between self and outer query should be possible. + return + + local_recursion_limit = 127 # explicitly avoid infinite loop + for pos, prefix in enumerate(prefix_gen()): + if prefix not in self.subq_aliases: + self.alias_prefix = prefix + break + if pos > local_recursion_limit: + raise RuntimeError( + 'Maximum recursion depth exceeded: too many subqueries.' + ) + self.subq_aliases = self.subq_aliases.union([self.alias_prefix]) + outer_query.subq_aliases = outer_query.subq_aliases.union(self.subq_aliases) + change_map = OrderedDict() + for pos, alias in enumerate(self.alias_map): + new_alias = '%s%d' % (self.alias_prefix, pos) + change_map[alias] = new_alias + self.change_aliases(change_map) + + def get_initial_alias(self): + """ + Return the first alias for this query, after increasing its reference + count. + """ + if self.alias_map: + alias = self.base_table + self.ref_alias(alias) + else: + alias = self.join(BaseTable(self.get_meta().db_table, None)) + return alias + + def count_active_tables(self): + """ + Return the number of tables in this query with a non-zero reference + count. After execution, the reference counts are zeroed, so tables + added in compiler will not be seen by this method. + """ + return len([1 for count in self.alias_refcount.values() if count]) + + def join(self, join, reuse=None, reuse_with_filtered_relation=False): + """ + Return an alias for the 'join', either reusing an existing alias for + that join or creating a new one. 'join' is either a + sql.datastructures.BaseTable or Join. + + The 'reuse' parameter can be either None which means all joins are + reusable, or it can be a set containing the aliases that can be reused. + + The 'reuse_with_filtered_relation' parameter is used when computing + FilteredRelation instances. + + A join is always created as LOUTER if the lhs alias is LOUTER to make + sure chains like t1 LOUTER t2 INNER t3 aren't generated. All new + joins are created as LOUTER if the join is nullable. + """ + if reuse_with_filtered_relation and reuse: + reuse_aliases = [ + a for a, j in self.alias_map.items() + if a in reuse and j.equals(join, with_filtered_relation=False) + ] + else: + reuse_aliases = [ + a for a, j in self.alias_map.items() + if (reuse is None or a in reuse) and j == join + ] + if reuse_aliases: + self.ref_alias(reuse_aliases[0]) + return reuse_aliases[0] + + # No reuse is possible, so we need a new alias. + alias, _ = self.table_alias(join.table_name, create=True, filtered_relation=join.filtered_relation) + if join.join_type: + if self.alias_map[join.parent_alias].join_type == LOUTER or join.nullable: + join_type = LOUTER + else: + join_type = INNER + join.join_type = join_type + join.table_alias = alias + self.alias_map[alias] = join + return alias + + def join_parent_model(self, opts, model, alias, seen): + """ + Make sure the given 'model' is joined in the query. If 'model' isn't + a parent of 'opts' or if it is None this method is a no-op. + + The 'alias' is the root alias for starting the join, 'seen' is a dict + of model -> alias of existing joins. It must also contain a mapping + of None -> some alias. This will be returned in the no-op case. + """ + if model in seen: + return seen[model] + chain = opts.get_base_chain(model) + if not chain: + return alias + curr_opts = opts + for int_model in chain: + if int_model in seen: + curr_opts = int_model._meta + alias = seen[int_model] + continue + # Proxy model have elements in base chain + # with no parents, assign the new options + # object and skip to the next base in that + # case + if not curr_opts.parents[int_model]: + curr_opts = int_model._meta + continue + link_field = curr_opts.get_ancestor_link(int_model) + join_info = self.setup_joins([link_field.name], curr_opts, alias) + curr_opts = int_model._meta + alias = seen[int_model] = join_info.joins[-1] + return alias or seen[None] + + def add_annotation(self, annotation, alias, is_summary=False): + """Add a single annotation expression to the Query.""" + annotation = annotation.resolve_expression(self, allow_joins=True, reuse=None, + summarize=is_summary) + self.append_annotation_mask([alias]) + self.annotations[alias] = annotation + + def resolve_expression(self, query, *args, **kwargs): + clone = self.clone() + # Subqueries need to use a different set of aliases than the outer query. + clone.bump_prefix(query) + clone.subquery = True + # It's safe to drop ordering if the queryset isn't using slicing, + # distinct(*fields) or select_for_update(). + if (self.low_mark == 0 and self.high_mark is None and + not self.distinct_fields and + not self.select_for_update): + clone.clear_ordering(True) + return clone + + def as_sql(self, compiler, connection): + return self.get_compiler(connection=connection).as_sql() + + def resolve_lookup_value(self, value, can_reuse, allow_joins): + if hasattr(value, 'resolve_expression'): + value = value.resolve_expression(self, reuse=can_reuse, allow_joins=allow_joins) + elif isinstance(value, (list, tuple)): + # The items of the iterable may be expressions and therefore need + # to be resolved independently. + for sub_value in value: + if hasattr(sub_value, 'resolve_expression'): + sub_value.resolve_expression(self, reuse=can_reuse, allow_joins=allow_joins) + return value + + def solve_lookup_type(self, lookup): + """ + Solve the lookup type from the lookup (e.g.: 'foobar__id__icontains'). + """ + lookup_splitted = lookup.split(LOOKUP_SEP) + if self._annotations: + expression, expression_lookups = refs_expression(lookup_splitted, self.annotations) + if expression: + return expression_lookups, (), expression + _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta()) + field_parts = lookup_splitted[0:len(lookup_splitted) - len(lookup_parts)] + if len(lookup_parts) > 1 and not field_parts: + raise FieldError( + 'Invalid lookup "%s" for model %s".' % + (lookup, self.get_meta().model.__name__) + ) + return lookup_parts, field_parts, False + + def check_query_object_type(self, value, opts, field): + """ + Check whether the object passed while querying is of the correct type. + If not, raise a ValueError specifying the wrong object. + """ + if hasattr(value, '_meta'): + if not check_rel_lookup_compatibility(value._meta.model, opts, field): + raise ValueError( + 'Cannot query "%s": Must be "%s" instance.' % + (value, opts.object_name)) + + def check_related_objects(self, field, value, opts): + """Check the type of object passed to query relations.""" + if field.is_relation: + # Check that the field and the queryset use the same model in a + # query like .filter(author=Author.objects.all()). For example, the + # opts would be Author's (from the author field) and value.model + # would be Author.objects.all() queryset's .model (Author also). + # The field is the related field on the lhs side. + if (isinstance(value, Query) and not value.has_select_fields and + not check_rel_lookup_compatibility(value.model, opts, field)): + raise ValueError( + 'Cannot use QuerySet for "%s": Use a QuerySet for "%s".' % + (value.model._meta.object_name, opts.object_name) + ) + elif hasattr(value, '_meta'): + self.check_query_object_type(value, opts, field) + elif hasattr(value, '__iter__'): + for v in value: + self.check_query_object_type(v, opts, field) + + def build_lookup(self, lookups, lhs, rhs): + """ + Try to extract transforms and lookup from given lhs. + + The lhs value is something that works like SQLExpression. + The rhs value is what the lookup is going to compare against. + The lookups is a list of names to extract using get_lookup() + and get_transform(). + """ + # __exact is the default lookup if one isn't given. + lookups = lookups or ['exact'] + for name in lookups[:-1]: + lhs = self.try_transform(lhs, name) + # First try get_lookup() so that the lookup takes precedence if the lhs + # supports both transform and lookup for the name. + lookup_name = lookups[-1] + lookup_class = lhs.get_lookup(lookup_name) + if not lookup_class: + if lhs.field.is_relation: + raise FieldError('Related Field got invalid lookup: {}'.format(lookup_name)) + # A lookup wasn't found. Try to interpret the name as a transform + # and do an Exact lookup against it. + lhs = self.try_transform(lhs, lookup_name) + lookup_name = 'exact' + lookup_class = lhs.get_lookup(lookup_name) + if not lookup_class: + return + + lookup = lookup_class(lhs, rhs) + # Interpret '__exact=None' as the sql 'is NULL'; otherwise, reject all + # uses of None as a query value unless the lookup supports it. + if lookup.rhs is None and not lookup.can_use_none_as_rhs: + if lookup_name not in ('exact', 'iexact'): + raise ValueError("Cannot use None as a query value") + return lhs.get_lookup('isnull')(lhs, True) + + # For Oracle '' is equivalent to null. The check must be done at this + # stage because join promotion can't be done in the compiler. Using + # DEFAULT_DB_ALIAS isn't nice but it's the best that can be done here. + # A similar thing is done in is_nullable(), too. + if (connections[DEFAULT_DB_ALIAS].features.interprets_empty_strings_as_nulls and + lookup_name == 'exact' and lookup.rhs == ''): + return lhs.get_lookup('isnull')(lhs, True) + + return lookup + + def try_transform(self, lhs, name): + """ + Helper method for build_lookup(). Try to fetch and initialize + a transform for name parameter from lhs. + """ + transform_class = lhs.get_transform(name) + if transform_class: + return transform_class(lhs) + else: + raise FieldError( + "Unsupported lookup '%s' for %s or join on the field not " + "permitted." % + (name, lhs.output_field.__class__.__name__)) + + def build_filter(self, filter_expr, branch_negated=False, current_negated=False, + can_reuse=None, allow_joins=True, split_subq=True, + reuse_with_filtered_relation=False): + """ + Build a WhereNode for a single filter clause but don't add it + to this Query. Query.add_q() will then add this filter to the where + Node. + + The 'branch_negated' tells us if the current branch contains any + negations. This will be used to determine if subqueries are needed. + + The 'current_negated' is used to determine if the current filter is + negated or not and this will be used to determine if IS NULL filtering + is needed. + + The difference between current_negated and branch_negated is that + branch_negated is set on first negation, but current_negated is + flipped for each negation. + + Note that add_filter will not do any negating itself, that is done + upper in the code by add_q(). + + The 'can_reuse' is a set of reusable joins for multijoins. + + If 'reuse_with_filtered_relation' is True, then only joins in can_reuse + will be reused. + + The method will create a filter clause that can be added to the current + query. However, if the filter isn't added to the query then the caller + is responsible for unreffing the joins used. + """ + if isinstance(filter_expr, dict): + raise FieldError("Cannot parse keyword query as dict") + arg, value = filter_expr + if not arg: + raise FieldError("Cannot parse keyword query %r" % arg) + lookups, parts, reffed_expression = self.solve_lookup_type(arg) + + if not getattr(reffed_expression, 'filterable', True): + raise NotSupportedError( + reffed_expression.__class__.__name__ + ' is disallowed in ' + 'the filter clause.' + ) + + if not allow_joins and len(parts) > 1: + raise FieldError("Joined field references are not permitted in this query") + + pre_joins = self.alias_refcount.copy() + value = self.resolve_lookup_value(value, can_reuse, allow_joins) + used_joins = {k for k, v in self.alias_refcount.items() if v > pre_joins.get(k, 0)} + + clause = self.where_class() + if reffed_expression: + condition = self.build_lookup(lookups, reffed_expression, value) + clause.add(condition, AND) + return clause, [] + + opts = self.get_meta() + alias = self.get_initial_alias() + allow_many = not branch_negated or not split_subq + + try: + join_info = self.setup_joins( + parts, opts, alias, can_reuse=can_reuse, allow_many=allow_many, + reuse_with_filtered_relation=reuse_with_filtered_relation, + ) + + # Prevent iterator from being consumed by check_related_objects() + if isinstance(value, Iterator): + value = list(value) + self.check_related_objects(join_info.final_field, value, join_info.opts) + + # split_exclude() needs to know which joins were generated for the + # lookup parts + self._lookup_joins = join_info.joins + except MultiJoin as e: + return self.split_exclude(filter_expr, can_reuse, e.names_with_path) + + # Update used_joins before trimming since they are reused to determine + # which joins could be later promoted to INNER. + used_joins.update(join_info.joins) + targets, alias, join_list = self.trim_joins(join_info.targets, join_info.joins, join_info.path) + if can_reuse is not None: + can_reuse.update(join_list) + + if join_info.final_field.is_relation: + # No support for transforms for relational fields + num_lookups = len(lookups) + if num_lookups > 1: + raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0])) + if len(targets) == 1: + col = targets[0].get_col(alias, join_info.final_field) + else: + col = MultiColSource(alias, targets, join_info.targets, join_info.final_field) + else: + col = targets[0].get_col(alias, join_info.final_field) + + condition = self.build_lookup(lookups, col, value) + lookup_type = condition.lookup_name + clause.add(condition, AND) + + require_outer = lookup_type == 'isnull' and condition.rhs is True and not current_negated + if current_negated and (lookup_type != 'isnull' or condition.rhs is False) and condition.rhs is not None: + require_outer = True + if (lookup_type != 'isnull' and ( + self.is_nullable(targets[0]) or + self.alias_map[join_list[-1]].join_type == LOUTER)): + # The condition added here will be SQL like this: + # NOT (col IS NOT NULL), where the first NOT is added in + # upper layers of code. The reason for addition is that if col + # is null, then col != someval will result in SQL "unknown" + # which isn't the same as in Python. The Python None handling + # is wanted, and it can be gotten by + # (col IS NULL OR col != someval) + # <=> + # NOT (col IS NOT NULL AND col = someval). + lookup_class = targets[0].get_lookup('isnull') + clause.add(lookup_class(targets[0].get_col(alias, join_info.targets[0]), False), AND) + return clause, used_joins if not require_outer else () + + def add_filter(self, filter_clause): + self.add_q(Q(**{filter_clause[0]: filter_clause[1]})) + + def add_q(self, q_object): + """ + A preprocessor for the internal _add_q(). Responsible for doing final + join promotion. + """ + # For join promotion this case is doing an AND for the added q_object + # and existing conditions. So, any existing inner join forces the join + # type to remain inner. Existing outer joins can however be demoted. + # (Consider case where rel_a is LOUTER and rel_a__col=1 is added - if + # rel_a doesn't produce any rows, then the whole condition must fail. + # So, demotion is OK. + existing_inner = {a for a in self.alias_map if self.alias_map[a].join_type == INNER} + clause, _ = self._add_q(q_object, self.used_aliases) + if clause: + self.where.add(clause, AND) + self.demote_joins(existing_inner) + + def _add_q(self, q_object, used_aliases, branch_negated=False, + current_negated=False, allow_joins=True, split_subq=True): + """Add a Q-object to the current filter.""" + connector = q_object.connector + current_negated = current_negated ^ q_object.negated + branch_negated = branch_negated or q_object.negated + target_clause = self.where_class(connector=connector, + negated=q_object.negated) + joinpromoter = JoinPromoter(q_object.connector, len(q_object.children), current_negated) + for child in q_object.children: + if isinstance(child, Node): + child_clause, needed_inner = self._add_q( + child, used_aliases, branch_negated, + current_negated, allow_joins, split_subq) + joinpromoter.add_votes(needed_inner) + else: + child_clause, needed_inner = self.build_filter( + child, can_reuse=used_aliases, branch_negated=branch_negated, + current_negated=current_negated, allow_joins=allow_joins, + split_subq=split_subq, + ) + joinpromoter.add_votes(needed_inner) + if child_clause: + target_clause.add(child_clause, connector) + needed_inner = joinpromoter.update_join_types(self) + return target_clause, needed_inner + + def build_filtered_relation_q(self, q_object, reuse, branch_negated=False, current_negated=False): + """Add a FilteredRelation object to the current filter.""" + connector = q_object.connector + current_negated ^= q_object.negated + branch_negated = branch_negated or q_object.negated + target_clause = self.where_class(connector=connector, negated=q_object.negated) + for child in q_object.children: + if isinstance(child, Node): + child_clause = self.build_filtered_relation_q( + child, reuse=reuse, branch_negated=branch_negated, + current_negated=current_negated, + ) + else: + child_clause, _ = self.build_filter( + child, can_reuse=reuse, branch_negated=branch_negated, + current_negated=current_negated, + allow_joins=True, split_subq=False, + reuse_with_filtered_relation=True, + ) + target_clause.add(child_clause, connector) + return target_clause + + def add_filtered_relation(self, filtered_relation, alias): + filtered_relation.alias = alias + lookups = dict(get_children_from_q(filtered_relation.condition)) + for lookup in chain((filtered_relation.relation_name,), lookups): + lookup_parts, field_parts, _ = self.solve_lookup_type(lookup) + shift = 2 if not lookup_parts else 1 + if len(field_parts) > (shift + len(lookup_parts)): + raise ValueError( + "FilteredRelation's condition doesn't support nested " + "relations (got %r)." % lookup + ) + self._filtered_relations[filtered_relation.alias] = filtered_relation + + def names_to_path(self, names, opts, allow_many=True, fail_on_missing=False): + """ + Walk the list of names and turns them into PathInfo tuples. A single + name in 'names' can generate multiple PathInfos (m2m, for example). + + 'names' is the path of names to travel, 'opts' is the model Options we + start the name resolving from, 'allow_many' is as for setup_joins(). + If fail_on_missing is set to True, then a name that can't be resolved + will generate a FieldError. + + Return a list of PathInfo tuples. In addition return the final field + (the last used join field) and target (which is a field guaranteed to + contain the same value as the final field). Finally, return those names + that weren't found (which are likely transforms and the final lookup). + """ + path, names_with_path = [], [] + for pos, name in enumerate(names): + cur_names_with_path = (name, []) + if name == 'pk': + name = opts.pk.name + + field = None + filtered_relation = None + try: + field = opts.get_field(name) + except FieldDoesNotExist: + if name in self.annotation_select: + field = self.annotation_select[name].output_field + elif name in self._filtered_relations and pos == 0: + filtered_relation = self._filtered_relations[name] + field = opts.get_field(filtered_relation.relation_name) + if field is not None: + # Fields that contain one-to-many relations with a generic + # model (like a GenericForeignKey) cannot generate reverse + # relations and therefore cannot be used for reverse querying. + if field.is_relation and not field.related_model: + raise FieldError( + "Field %r does not generate an automatic reverse " + "relation and therefore cannot be used for reverse " + "querying. If it is a GenericForeignKey, consider " + "adding a GenericRelation." % name + ) + try: + model = field.model._meta.concrete_model + except AttributeError: + # QuerySet.annotate() may introduce fields that aren't + # attached to a model. + model = None + else: + # We didn't find the current field, so move position back + # one step. + pos -= 1 + if pos == -1 or fail_on_missing: + field_names = list(get_field_names_from_opts(opts)) + available = sorted( + field_names + list(self.annotation_select) + + list(self._filtered_relations) + ) + raise FieldError("Cannot resolve keyword '%s' into field. " + "Choices are: %s" % (name, ", ".join(available))) + break + # Check if we need any joins for concrete inheritance cases (the + # field lives in parent, but we are currently in one of its + # children) + if model is not opts.model: + path_to_parent = opts.get_path_to_parent(model) + if path_to_parent: + path.extend(path_to_parent) + cur_names_with_path[1].extend(path_to_parent) + opts = path_to_parent[-1].to_opts + if hasattr(field, 'get_path_info'): + pathinfos = field.get_path_info(filtered_relation) + if not allow_many: + for inner_pos, p in enumerate(pathinfos): + if p.m2m: + cur_names_with_path[1].extend(pathinfos[0:inner_pos + 1]) + names_with_path.append(cur_names_with_path) + raise MultiJoin(pos + 1, names_with_path) + last = pathinfos[-1] + path.extend(pathinfos) + final_field = last.join_field + opts = last.to_opts + targets = last.target_fields + cur_names_with_path[1].extend(pathinfos) + names_with_path.append(cur_names_with_path) + else: + # Local non-relational field. + final_field = field + targets = (field,) + if fail_on_missing and pos + 1 != len(names): + raise FieldError( + "Cannot resolve keyword %r into field. Join on '%s'" + " not permitted." % (names[pos + 1], name)) + break + return path, final_field, targets, names[pos + 1:] + + def setup_joins(self, names, opts, alias, can_reuse=None, allow_many=True, + reuse_with_filtered_relation=False): + """ + Compute the necessary table joins for the passage through the fields + given in 'names'. 'opts' is the Options class for the current model + (which gives the table we are starting from), 'alias' is the alias for + the table to start the joining from. + + The 'can_reuse' defines the reverse foreign key joins we can reuse. It + can be None in which case all joins are reusable or a set of aliases + that can be reused. Note that non-reverse foreign keys are always + reusable when using setup_joins(). + + The 'reuse_with_filtered_relation' can be used to force 'can_reuse' + parameter and force the relation on the given connections. + + If 'allow_many' is False, then any reverse foreign key seen will + generate a MultiJoin exception. + + Return the final field involved in the joins, the target field (used + for any 'where' constraint), the final 'opts' value, the joins, the + field path traveled to generate the joins, and a transform function + that takes a field and alias and is equivalent to `field.get_col(alias)` + in the simple case but wraps field transforms if they were included in + names. + + The target field is the field containing the concrete value. Final + field can be something different, for example foreign key pointing to + that value. Final field is needed for example in some value + conversions (convert 'obj' in fk__id=obj to pk val using the foreign + key field for example). + """ + joins = [alias] + # The transform can't be applied yet, as joins must be trimmed later. + # To avoid making every caller of this method look up transforms + # directly, compute transforms here and create a partial that converts + # fields to the appropriate wrapped version. + + def final_transformer(field, alias): + return field.get_col(alias) + + # Try resolving all the names as fields first. If there's an error, + # treat trailing names as lookups until a field can be resolved. + last_field_exception = None + for pivot in range(len(names), 0, -1): + try: + path, final_field, targets, rest = self.names_to_path( + names[:pivot], opts, allow_many, fail_on_missing=True, + ) + except FieldError as exc: + if pivot == 1: + # The first item cannot be a lookup, so it's safe + # to raise the field error here. + raise + else: + last_field_exception = exc + else: + # The transforms are the remaining items that couldn't be + # resolved into fields. + transforms = names[pivot:] + break + for name in transforms: + def transform(field, alias, *, name, previous): + try: + wrapped = previous(field, alias) + return self.try_transform(wrapped, name) + except FieldError: + # FieldError is raised if the transform doesn't exist. + if isinstance(final_field, Field) and last_field_exception: + raise last_field_exception + else: + raise + final_transformer = functools.partial(transform, name=name, previous=final_transformer) + # Then, add the path to the query's joins. Note that we can't trim + # joins at this stage - we will need the information about join type + # of the trimmed joins. + for join in path: + if join.filtered_relation: + filtered_relation = join.filtered_relation.clone() + table_alias = filtered_relation.alias + else: + filtered_relation = None + table_alias = None + opts = join.to_opts + if join.direct: + nullable = self.is_nullable(join.join_field) + else: + nullable = True + connection = Join( + opts.db_table, alias, table_alias, INNER, join.join_field, + nullable, filtered_relation=filtered_relation, + ) + reuse = can_reuse if join.m2m or reuse_with_filtered_relation else None + alias = self.join( + connection, reuse=reuse, + reuse_with_filtered_relation=reuse_with_filtered_relation, + ) + joins.append(alias) + if filtered_relation: + filtered_relation.path = joins[:] + return JoinInfo(final_field, targets, opts, joins, path, final_transformer) + + def trim_joins(self, targets, joins, path): + """ + The 'target' parameter is the final field being joined to, 'joins' + is the full list of join aliases. The 'path' contain the PathInfos + used to create the joins. + + Return the final target field and table alias and the new active + joins. + + Always trim any direct join if the target column is already in the + previous table. Can't trim reverse joins as it's unknown if there's + anything on the other side of the join. + """ + joins = joins[:] + for pos, info in enumerate(reversed(path)): + if len(joins) == 1 or not info.direct: + break + if info.filtered_relation: + break + join_targets = {t.column for t in info.join_field.foreign_related_fields} + cur_targets = {t.column for t in targets} + if not cur_targets.issubset(join_targets): + break + targets_dict = {r[1].column: r[0] for r in info.join_field.related_fields if r[1].column in cur_targets} + targets = tuple(targets_dict[t.column] for t in targets) + self.unref_alias(joins.pop()) + return targets, joins[-1], joins + + def resolve_ref(self, name, allow_joins=True, reuse=None, summarize=False): + if not allow_joins and LOOKUP_SEP in name: + raise FieldError("Joined field references are not permitted in this query") + if name in self.annotations: + if summarize: + # Summarize currently means we are doing an aggregate() query + # which is executed as a wrapped subquery if any of the + # aggregate() elements reference an existing annotation. In + # that case we need to return a Ref to the subquery's annotation. + return Ref(name, self.annotation_select[name]) + else: + return self.annotations[name] + else: + field_list = name.split(LOOKUP_SEP) + join_info = self.setup_joins(field_list, self.get_meta(), self.get_initial_alias(), can_reuse=reuse) + targets, final_alias, join_list = self.trim_joins(join_info.targets, join_info.joins, join_info.path) + if len(targets) > 1: + raise FieldError("Referencing multicolumn fields with F() objects " + "isn't supported") + # Verify that the last lookup in name is a field or a transform: + # transform_function() raises FieldError if not. + join_info.transform_function(targets[0], final_alias) + if reuse is not None: + reuse.update(join_list) + col = targets[0].get_col(join_list[-1], join_info.targets[0]) + return col + + def split_exclude(self, filter_expr, can_reuse, names_with_path): + """ + When doing an exclude against any kind of N-to-many relation, we need + to use a subquery. This method constructs the nested query, given the + original exclude filter (filter_expr) and the portion up to the first + N-to-many relation field. + + For example, if the origin filter is ~Q(child__name='foo'), filter_expr + is ('child__name', 'foo') and can_reuse is a set of joins usable for + filters in the original query. + + We will turn this into equivalent of: + WHERE NOT (pk IN (SELECT parent_id FROM thetable + WHERE name = 'foo' AND parent_id IS NOT NULL)) + + It might be worth it to consider using WHERE NOT EXISTS as that has + saner null handling, and is easier for the backend's optimizer to + handle. + """ + # Generate the inner query. + query = Query(self.model) + query.add_filter(filter_expr) + query.clear_ordering(True) + # Try to have as simple as possible subquery -> trim leading joins from + # the subquery. + trimmed_prefix, contains_louter = query.trim_start(names_with_path) + + # Add extra check to make sure the selected field will not be null + # since we are adding an IN clause. This prevents the + # database from tripping over IN (...,NULL,...) selects and returning + # nothing + col = query.select[0] + select_field = col.target + alias = col.alias + if self.is_nullable(select_field): + lookup_class = select_field.get_lookup('isnull') + lookup = lookup_class(select_field.get_col(alias), False) + query.where.add(lookup, AND) + if alias in can_reuse: + pk = select_field.model._meta.pk + # Need to add a restriction so that outer query's filters are in effect for + # the subquery, too. + query.bump_prefix(self) + lookup_class = select_field.get_lookup('exact') + # Note that the query.select[0].alias is different from alias + # due to bump_prefix above. + lookup = lookup_class(pk.get_col(query.select[0].alias), + pk.get_col(alias)) + query.where.add(lookup, AND) + query.external_aliases.add(alias) + + condition, needed_inner = self.build_filter( + ('%s__in' % trimmed_prefix, query), + current_negated=True, branch_negated=True, can_reuse=can_reuse) + if contains_louter: + or_null_condition, _ = self.build_filter( + ('%s__isnull' % trimmed_prefix, True), + current_negated=True, branch_negated=True, can_reuse=can_reuse) + condition.add(or_null_condition, OR) + # Note that the end result will be: + # (outercol NOT IN innerq AND outercol IS NOT NULL) OR outercol IS NULL. + # This might look crazy but due to how IN works, this seems to be + # correct. If the IS NOT NULL check is removed then outercol NOT + # IN will return UNKNOWN. If the IS NULL check is removed, then if + # outercol IS NULL we will not match the row. + return condition, needed_inner + + def set_empty(self): + self.where.add(NothingNode(), AND) + + def is_empty(self): + return any(isinstance(c, NothingNode) for c in self.where.children) + + def set_limits(self, low=None, high=None): + """ + Adjust the limits on the rows retrieved. Use low/high to set these, + as it makes it more Pythonic to read and write. When the SQL query is + created, convert them to the appropriate offset and limit values. + + Apply any limits passed in here to the existing constraints. Add low + to the current low value and clamp both to any existing high value. + """ + if high is not None: + if self.high_mark is not None: + self.high_mark = min(self.high_mark, self.low_mark + high) + else: + self.high_mark = self.low_mark + high + if low is not None: + if self.high_mark is not None: + self.low_mark = min(self.high_mark, self.low_mark + low) + else: + self.low_mark = self.low_mark + low + + if self.low_mark == self.high_mark: + self.set_empty() + + def clear_limits(self): + """Clear any existing limits.""" + self.low_mark, self.high_mark = 0, None + + def has_limit_one(self): + return self.high_mark is not None and (self.high_mark - self.low_mark) == 1 + + def can_filter(self): + """ + Return True if adding filters to this instance is still possible. + + Typically, this means no limits or offsets have been put on the results. + """ + return not self.low_mark and self.high_mark is None + + def clear_select_clause(self): + """Remove all fields from SELECT clause.""" + self.select = () + self.default_cols = False + self.select_related = False + self.set_extra_mask(()) + self.set_annotation_mask(()) + + def clear_select_fields(self): + """ + Clear the list of fields to select (but not extra_select columns). + Some queryset types completely replace any existing list of select + columns. + """ + self.select = () + self.values_select = () + + def set_select(self, cols): + self.default_cols = False + self.select = tuple(cols) + + def add_distinct_fields(self, *field_names): + """ + Add and resolve the given fields to the query's "distinct on" clause. + """ + self.distinct_fields = field_names + self.distinct = True + + def add_fields(self, field_names, allow_m2m=True): + """ + Add the given (model) fields to the select set. Add the field names in + the order specified. + """ + alias = self.get_initial_alias() + opts = self.get_meta() + + try: + cols = [] + for name in field_names: + # Join promotion note - we must not remove any rows here, so + # if there is no existing joins, use outer join. + join_info = self.setup_joins(name.split(LOOKUP_SEP), opts, alias, allow_many=allow_m2m) + targets, final_alias, joins = self.trim_joins( + join_info.targets, + join_info.joins, + join_info.path, + ) + for target in targets: + cols.append(join_info.transform_function(target, final_alias)) + if cols: + self.set_select(cols) + except MultiJoin: + raise FieldError("Invalid field name: '%s'" % name) + except FieldError: + if LOOKUP_SEP in name: + # For lookups spanning over relationships, show the error + # from the model on which the lookup failed. + raise + else: + names = sorted( + list(get_field_names_from_opts(opts)) + list(self.extra) + + list(self.annotation_select) + list(self._filtered_relations) + ) + raise FieldError("Cannot resolve keyword %r into field. " + "Choices are: %s" % (name, ", ".join(names))) + + def add_ordering(self, *ordering): + """ + Add items from the 'ordering' sequence to the query's "order by" + clause. These items are either field names (not column names) -- + possibly with a direction prefix ('-' or '?') -- or OrderBy + expressions. + + If 'ordering' is empty, clear all ordering from the query. + """ + errors = [] + for item in ordering: + if not hasattr(item, 'resolve_expression') and not ORDER_PATTERN.match(item): + errors.append(item) + if getattr(item, 'contains_aggregate', False): + raise FieldError( + 'Using an aggregate in order_by() without also including ' + 'it in annotate() is not allowed: %s' % item + ) + if errors: + raise FieldError('Invalid order_by arguments: %s' % errors) + if ordering: + self.order_by += ordering + else: + self.default_ordering = False + + def clear_ordering(self, force_empty): + """ + Remove any ordering settings. If 'force_empty' is True, there will be + no ordering in the resulting query (not even the model's default). + """ + self.order_by = () + self.extra_order_by = () + if force_empty: + self.default_ordering = False + + def set_group_by(self): + """ + Expand the GROUP BY clause required by the query. + + This will usually be the set of all non-aggregate fields in the + return data. If the database backend supports grouping by the + primary key, and the query would be equivalent, the optimization + will be made automatically. + """ + group_by = list(self.select) + if self.annotation_select: + for annotation in self.annotation_select.values(): + for col in annotation.get_group_by_cols(): + group_by.append(col) + self.group_by = tuple(group_by) + + def add_select_related(self, fields): + """ + Set up the select_related data structure so that we only select + certain related models (as opposed to all models, when + self.select_related=True). + """ + if isinstance(self.select_related, bool): + field_dict = {} + else: + field_dict = self.select_related + for field in fields: + d = field_dict + for part in field.split(LOOKUP_SEP): + d = d.setdefault(part, {}) + self.select_related = field_dict + + def add_extra(self, select, select_params, where, params, tables, order_by): + """ + Add data to the various extra_* attributes for user-created additions + to the query. + """ + if select: + # We need to pair any placeholder markers in the 'select' + # dictionary with their parameters in 'select_params' so that + # subsequent updates to the select dictionary also adjust the + # parameters appropriately. + select_pairs = OrderedDict() + if select_params: + param_iter = iter(select_params) + else: + param_iter = iter([]) + for name, entry in select.items(): + entry = force_text(entry) + entry_params = [] + pos = entry.find("%s") + while pos != -1: + if pos == 0 or entry[pos - 1] != '%': + entry_params.append(next(param_iter)) + pos = entry.find("%s", pos + 2) + select_pairs[name] = (entry, entry_params) + # This is order preserving, since self.extra_select is an OrderedDict. + self.extra.update(select_pairs) + if where or params: + self.where.add(ExtraWhere(where, params), AND) + if tables: + self.extra_tables += tuple(tables) + if order_by: + self.extra_order_by = order_by + + def clear_deferred_loading(self): + """Remove any fields from the deferred loading set.""" + self.deferred_loading = (frozenset(), True) + + def add_deferred_loading(self, field_names): + """ + Add the given list of model field names to the set of fields to + exclude from loading from the database when automatic column selection + is done. Add the new field names to any existing field names that + are deferred (or removed from any existing field names that are marked + as the only ones for immediate loading). + """ + # Fields on related models are stored in the literal double-underscore + # format, so that we can use a set datastructure. We do the foo__bar + # splitting and handling when computing the SQL column names (as part of + # get_columns()). + existing, defer = self.deferred_loading + if defer: + # Add to existing deferred names. + self.deferred_loading = existing.union(field_names), True + else: + # Remove names from the set of any existing "immediate load" names. + self.deferred_loading = existing.difference(field_names), False + + def add_immediate_loading(self, field_names): + """ + Add the given list of model field names to the set of fields to + retrieve when the SQL is executed ("immediate loading" fields). The + field names replace any existing immediate loading field names. If + there are field names already specified for deferred loading, remove + those names from the new field_names before storing the new names + for immediate loading. (That is, immediate loading overrides any + existing immediate values, but respects existing deferrals.) + """ + existing, defer = self.deferred_loading + field_names = set(field_names) + if 'pk' in field_names: + field_names.remove('pk') + field_names.add(self.get_meta().pk.name) + + if defer: + # Remove any existing deferred names from the current set before + # setting the new names. + self.deferred_loading = field_names.difference(existing), False + else: + # Replace any existing "immediate load" field names. + self.deferred_loading = frozenset(field_names), False + + def get_loaded_field_names(self): + """ + If any fields are marked to be deferred, return a dictionary mapping + models to a set of names in those fields that will be loaded. If a + model is not in the returned dictionary, none of its fields are + deferred. + + If no fields are marked for deferral, return an empty dictionary. + """ + # We cache this because we call this function multiple times + # (compiler.fill_related_selections, query.iterator) + try: + return self._loaded_field_names_cache + except AttributeError: + collection = {} + self.deferred_to_data(collection, self.get_loaded_field_names_cb) + self._loaded_field_names_cache = collection + return collection + + def get_loaded_field_names_cb(self, target, model, fields): + """Callback used by get_deferred_field_names().""" + target[model] = {f.attname for f in fields} + + def set_annotation_mask(self, names): + """Set the mask of annotations that will be returned by the SELECT.""" + if names is None: + self.annotation_select_mask = None + else: + self.annotation_select_mask = set(names) + self._annotation_select_cache = None + + def append_annotation_mask(self, names): + if self.annotation_select_mask is not None: + self.set_annotation_mask(self.annotation_select_mask.union(names)) + + def set_extra_mask(self, names): + """ + Set the mask of extra select items that will be returned by SELECT. + Don't remove them from the Query since they might be used later. + """ + if names is None: + self.extra_select_mask = None + else: + self.extra_select_mask = set(names) + self._extra_select_cache = None + + def set_values(self, fields): + self.select_related = False + self.clear_deferred_loading() + self.clear_select_fields() + + if self.group_by is True: + self.add_fields((f.attname for f in self.model._meta.concrete_fields), False) + self.set_group_by() + self.clear_select_fields() + + if fields: + field_names = [] + extra_names = [] + annotation_names = [] + if not self._extra and not self._annotations: + # Shortcut - if there are no extra or annotations, then + # the values() clause must be just field names. + field_names = list(fields) + else: + self.default_cols = False + for f in fields: + if f in self.extra_select: + extra_names.append(f) + elif f in self.annotation_select: + annotation_names.append(f) + else: + field_names.append(f) + self.set_extra_mask(extra_names) + self.set_annotation_mask(annotation_names) + else: + field_names = [f.attname for f in self.model._meta.concrete_fields] + + self.values_select = tuple(field_names) + self.add_fields(field_names, True) + + @property + def annotation_select(self): + """ + Return the OrderedDict of aggregate columns that are not masked and + should be used in the SELECT clause. Cache this result for performance. + """ + if self._annotation_select_cache is not None: + return self._annotation_select_cache + elif not self._annotations: + return {} + elif self.annotation_select_mask is not None: + self._annotation_select_cache = OrderedDict( + (k, v) for k, v in self.annotations.items() + if k in self.annotation_select_mask + ) + return self._annotation_select_cache + else: + return self.annotations + + @property + def extra_select(self): + if self._extra_select_cache is not None: + return self._extra_select_cache + if not self._extra: + return {} + elif self.extra_select_mask is not None: + self._extra_select_cache = OrderedDict( + (k, v) for k, v in self.extra.items() + if k in self.extra_select_mask + ) + return self._extra_select_cache + else: + return self.extra + + def trim_start(self, names_with_path): + """ + Trim joins from the start of the join path. The candidates for trim + are the PathInfos in names_with_path structure that are m2m joins. + + Also set the select column so the start matches the join. + + This method is meant to be used for generating the subquery joins & + cols in split_exclude(). + + Return a lookup usable for doing outerq.filter(lookup=self) and a + boolean indicating if the joins in the prefix contain a LEFT OUTER join. + _""" + all_paths = [] + for _, paths in names_with_path: + all_paths.extend(paths) + contains_louter = False + # Trim and operate only on tables that were generated for + # the lookup part of the query. That is, avoid trimming + # joins generated for F() expressions. + lookup_tables = [ + t for t in self.alias_map + if t in self._lookup_joins or t == self.base_table + ] + for trimmed_paths, path in enumerate(all_paths): + if path.m2m: + break + if self.alias_map[lookup_tables[trimmed_paths + 1]].join_type == LOUTER: + contains_louter = True + alias = lookup_tables[trimmed_paths] + self.unref_alias(alias) + # The path.join_field is a Rel, lets get the other side's field + join_field = path.join_field.field + # Build the filter prefix. + paths_in_prefix = trimmed_paths + trimmed_prefix = [] + for name, path in names_with_path: + if paths_in_prefix - len(path) < 0: + break + trimmed_prefix.append(name) + paths_in_prefix -= len(path) + trimmed_prefix.append( + join_field.foreign_related_fields[0].name) + trimmed_prefix = LOOKUP_SEP.join(trimmed_prefix) + # Lets still see if we can trim the first join from the inner query + # (that is, self). We can't do this for LEFT JOINs because we would + # miss those rows that have nothing on the outer side. + if self.alias_map[lookup_tables[trimmed_paths + 1]].join_type != LOUTER: + select_fields = [r[0] for r in join_field.related_fields] + select_alias = lookup_tables[trimmed_paths + 1] + self.unref_alias(lookup_tables[trimmed_paths]) + extra_restriction = join_field.get_extra_restriction( + self.where_class, None, lookup_tables[trimmed_paths + 1]) + if extra_restriction: + self.where.add(extra_restriction, AND) + else: + # TODO: It might be possible to trim more joins from the start of the + # inner query if it happens to have a longer join chain containing the + # values in select_fields. Lets punt this one for now. + select_fields = [r[1] for r in join_field.related_fields] + select_alias = lookup_tables[trimmed_paths] + # The found starting point is likely a Join instead of a BaseTable reference. + # But the first entry in the query's FROM clause must not be a JOIN. + for table in self.alias_map: + if self.alias_refcount[table] > 0: + self.alias_map[table] = BaseTable(self.alias_map[table].table_name, table) + break + self.set_select([f.get_col(select_alias) for f in select_fields]) + return trimmed_prefix, contains_louter + + def is_nullable(self, field): + """ + Check if the given field should be treated as nullable. + + Some backends treat '' as null and Django treats such fields as + nullable for those backends. In such situations field.null can be + False even if we should treat the field as nullable. + """ + # We need to use DEFAULT_DB_ALIAS here, as QuerySet does not have + # (nor should it have) knowledge of which connection is going to be + # used. The proper fix would be to defer all decisions where + # is_nullable() is needed to the compiler stage, but that is not easy + # to do currently. + return ( + connections[DEFAULT_DB_ALIAS].features.interprets_empty_strings_as_nulls and + field.empty_strings_allowed + ) or field.null + + +def get_order_dir(field, default='ASC'): + """ + Return the field name and direction for an order specification. For + example, '-foo' is returned as ('foo', 'DESC'). + + The 'default' param is used to indicate which way no prefix (or a '+' + prefix) should sort. The '-' prefix always sorts the opposite way. + """ + dirn = ORDER_DIR[default] + if field[0] == '-': + return field[1:], dirn[1] + return field, dirn[0] + + +def add_to_dict(data, key, value): + """ + Add "value" to the set of values for "key", whether or not "key" already + exists. + """ + if key in data: + data[key].add(value) + else: + data[key] = {value} + + +def is_reverse_o2o(field): + """ + Check if the given field is reverse-o2o. The field is expected to be some + sort of relation field or related object. + """ + return field.is_relation and field.one_to_one and not field.concrete + + +class JoinPromoter: + """ + A class to abstract away join promotion problems for complex filter + conditions. + """ + + def __init__(self, connector, num_children, negated): + self.connector = connector + self.negated = negated + if self.negated: + if connector == AND: + self.effective_connector = OR + else: + self.effective_connector = AND + else: + self.effective_connector = self.connector + self.num_children = num_children + # Maps of table alias to how many times it is seen as required for + # inner and/or outer joins. + self.votes = Counter() + + def add_votes(self, votes): + """ + Add single vote per item to self.votes. Parameter can be any + iterable. + """ + self.votes.update(votes) + + def update_join_types(self, query): + """ + Change join types so that the generated query is as efficient as + possible, but still correct. So, change as many joins as possible + to INNER, but don't make OUTER joins INNER if that could remove + results from the query. + """ + to_promote = set() + to_demote = set() + # The effective_connector is used so that NOT (a AND b) is treated + # similarly to (a OR b) for join promotion. + for table, votes in self.votes.items(): + # We must use outer joins in OR case when the join isn't contained + # in all of the joins. Otherwise the INNER JOIN itself could remove + # valid results. Consider the case where a model with rel_a and + # rel_b relations is queried with rel_a__col=1 | rel_b__col=2. Now, + # if rel_a join doesn't produce any results is null (for example + # reverse foreign key or null value in direct foreign key), and + # there is a matching row in rel_b with col=2, then an INNER join + # to rel_a would remove a valid match from the query. So, we need + # to promote any existing INNER to LOUTER (it is possible this + # promotion in turn will be demoted later on). + if self.effective_connector == 'OR' and votes < self.num_children: + to_promote.add(table) + # If connector is AND and there is a filter that can match only + # when there is a joinable row, then use INNER. For example, in + # rel_a__col=1 & rel_b__col=2, if either of the rels produce NULL + # as join output, then the col=1 or col=2 can't match (as + # NULL=anything is always false). + # For the OR case, if all children voted for a join to be inner, + # then we can use INNER for the join. For example: + # (rel_a__col__icontains=Alex | rel_a__col__icontains=Russell) + # then if rel_a doesn't produce any rows, the whole condition + # can't match. Hence we can safely use INNER join. + if self.effective_connector == 'AND' or ( + self.effective_connector == 'OR' and votes == self.num_children): + to_demote.add(table) + # Finally, what happens in cases where we have: + # (rel_a__col=1|rel_b__col=2) & rel_a__col__gte=0 + # Now, we first generate the OR clause, and promote joins for it + # in the first if branch above. Both rel_a and rel_b are promoted + # to LOUTER joins. After that we do the AND case. The OR case + # voted no inner joins but the rel_a__col__gte=0 votes inner join + # for rel_a. We demote it back to INNER join (in AND case a single + # vote is enough). The demotion is OK, if rel_a doesn't produce + # rows, then the rel_a__col__gte=0 clause can't be true, and thus + # the whole clause must be false. So, it is safe to use INNER + # join. + # Note that in this example we could just as well have the __gte + # clause and the OR clause swapped. Or we could replace the __gte + # clause with an OR clause containing rel_a__col=1|rel_a__col=2, + # and again we could safely demote to INNER. + query.promote_joins(to_promote) + query.demote_joins(to_demote) + return to_demote diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/subqueries.py b/env/lib/python3.5/site-packages/django/db/models/sql/subqueries.py new file mode 100644 index 0000000..e877daa --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/sql/subqueries.py @@ -0,0 +1,193 @@ +""" +Query subclasses which provide extra functionality beyond simple data retrieval. +""" + +from django.core.exceptions import FieldError +from django.db import connections +from django.db.models.query_utils import Q +from django.db.models.sql.constants import ( + CURSOR, GET_ITERATOR_CHUNK_SIZE, NO_RESULTS, +) +from django.db.models.sql.query import Query + +__all__ = ['DeleteQuery', 'UpdateQuery', 'InsertQuery', 'AggregateQuery'] + + +class DeleteQuery(Query): + """A DELETE SQL query.""" + + compiler = 'SQLDeleteCompiler' + + def do_query(self, table, where, using): + self.alias_map = {table: self.alias_map[table]} + self.where = where + cursor = self.get_compiler(using).execute_sql(CURSOR) + return cursor.rowcount if cursor else 0 + + def delete_batch(self, pk_list, using): + """ + Set up and execute delete queries for all the objects in pk_list. + + More than one physical query may be executed if there are a + lot of values in pk_list. + """ + # number of objects deleted + num_deleted = 0 + field = self.get_meta().pk + for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): + self.where = self.where_class() + self.add_q(Q( + **{field.attname + '__in': pk_list[offset:offset + GET_ITERATOR_CHUNK_SIZE]})) + num_deleted += self.do_query(self.get_meta().db_table, self.where, using=using) + return num_deleted + + def delete_qs(self, query, using): + """ + Delete the queryset in one SQL query (if possible). For simple queries + this is done by copying the query.query.where to self.query, for + complex queries by using subquery. + """ + innerq = query.query + # Make sure the inner query has at least one table in use. + innerq.get_initial_alias() + # The same for our new query. + self.get_initial_alias() + innerq_used_tables = tuple([t for t in innerq.alias_map if innerq.alias_refcount[t]]) + if not innerq_used_tables or innerq_used_tables == tuple(self.alias_map): + # There is only the base table in use in the query. + self.where = innerq.where + else: + pk = query.model._meta.pk + if not connections[using].features.update_can_self_select: + # We can't do the delete using subquery. + values = list(query.values_list('pk', flat=True)) + if not values: + return 0 + return self.delete_batch(values, using) + else: + innerq.clear_select_clause() + innerq.select = [ + pk.get_col(self.get_initial_alias()) + ] + values = innerq + self.where = self.where_class() + self.add_q(Q(pk__in=values)) + cursor = self.get_compiler(using).execute_sql(CURSOR) + return cursor.rowcount if cursor else 0 + + +class UpdateQuery(Query): + """An UPDATE SQL query.""" + + compiler = 'SQLUpdateCompiler' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._setup_query() + + def _setup_query(self): + """ + Run on initialization and at the end of chaining. Any attributes that + would normally be set in __init__() should go here instead. + """ + self.values = [] + self.related_ids = None + self.related_updates = {} + + def clone(self): + obj = super().clone() + obj.related_updates = self.related_updates.copy() + return obj + + def update_batch(self, pk_list, values, using): + self.add_update_values(values) + for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): + self.where = self.where_class() + self.add_q(Q(pk__in=pk_list[offset: offset + GET_ITERATOR_CHUNK_SIZE])) + self.get_compiler(using).execute_sql(NO_RESULTS) + + def add_update_values(self, values): + """ + Convert a dictionary of field name to value mappings into an update + query. This is the entry point for the public update() method on + querysets. + """ + values_seq = [] + for name, val in values.items(): + field = self.get_meta().get_field(name) + direct = not (field.auto_created and not field.concrete) or not field.concrete + model = field.model._meta.concrete_model + if not direct or (field.is_relation and field.many_to_many): + raise FieldError( + 'Cannot update model field %r (only non-relations and ' + 'foreign keys permitted).' % field + ) + if model is not self.get_meta().concrete_model: + self.add_related_update(model, field, val) + continue + values_seq.append((field, model, val)) + return self.add_update_fields(values_seq) + + def add_update_fields(self, values_seq): + """ + Append a sequence of (field, model, value) triples to the internal list + that will be used to generate the UPDATE query. Might be more usefully + called add_update_targets() to hint at the extra information here. + """ + for field, model, val in values_seq: + if hasattr(val, 'resolve_expression'): + # Resolve expressions here so that annotations are no longer needed + val = val.resolve_expression(self, allow_joins=False, for_save=True) + self.values.append((field, model, val)) + + def add_related_update(self, model, field, value): + """ + Add (name, value) to an update query for an ancestor model. + + Update are coalesced so that only one update query per ancestor is run. + """ + self.related_updates.setdefault(model, []).append((field, None, value)) + + def get_related_updates(self): + """ + Return a list of query objects: one for each update required to an + ancestor model. Each query will have the same filtering conditions as + the current query but will only update a single table. + """ + if not self.related_updates: + return [] + result = [] + for model, values in self.related_updates.items(): + query = UpdateQuery(model) + query.values = values + if self.related_ids is not None: + query.add_filter(('pk__in', self.related_ids)) + result.append(query) + return result + + +class InsertQuery(Query): + compiler = 'SQLInsertCompiler' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields = [] + self.objs = [] + + def insert_values(self, fields, objs, raw=False): + self.fields = fields + self.objs = objs + self.raw = raw + + +class AggregateQuery(Query): + """ + Take another query as a parameter to the FROM clause and only select the + elements in the provided list. + """ + + compiler = 'SQLAggregateCompiler' + + def add_subquery(self, query, using): + query.subquery = True + self.subquery, self.sub_params = query.get_compiler(using).as_sql(with_col_aliases=True) diff --git a/env/lib/python3.5/site-packages/django/db/models/sql/where.py b/env/lib/python3.5/site-packages/django/db/models/sql/where.py new file mode 100644 index 0000000..879de04 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/sql/where.py @@ -0,0 +1,228 @@ +""" +Code to manage the creation and SQL rendering of 'where' constraints. +""" + +from django.core.exceptions import EmptyResultSet +from django.utils import tree +from django.utils.functional import cached_property + +# Connection types +AND = 'AND' +OR = 'OR' + + +class WhereNode(tree.Node): + """ + An SQL WHERE clause. + + The class is tied to the Query class that created it (in order to create + the correct SQL). + + A child is usually an expression producing boolean values. Most likely the + expression is a Lookup instance. + + However, a child could also be any class with as_sql() and either + relabeled_clone() method or relabel_aliases() and clone() methods and + contains_aggregate attribute. + """ + default = AND + resolved = False + conditional = True + + def split_having(self, negated=False): + """ + Return two possibly None nodes: one for those parts of self that + should be included in the WHERE clause and one for those parts of + self that must be included in the HAVING clause. + """ + if not self.contains_aggregate: + return self, None + in_negated = negated ^ self.negated + # If the effective connector is OR and this node contains an aggregate, + # then we need to push the whole branch to HAVING clause. + may_need_split = ( + (in_negated and self.connector == AND) or + (not in_negated and self.connector == OR)) + if may_need_split and self.contains_aggregate: + return None, self + where_parts = [] + having_parts = [] + for c in self.children: + if hasattr(c, 'split_having'): + where_part, having_part = c.split_having(in_negated) + if where_part is not None: + where_parts.append(where_part) + if having_part is not None: + having_parts.append(having_part) + elif c.contains_aggregate: + having_parts.append(c) + else: + where_parts.append(c) + having_node = self.__class__(having_parts, self.connector, self.negated) if having_parts else None + where_node = self.__class__(where_parts, self.connector, self.negated) if where_parts else None + return where_node, having_node + + def as_sql(self, compiler, connection): + """ + Return the SQL version of the where clause and the value to be + substituted in. Return '', [] if this node matches everything, + None, [] if this node is empty, and raise EmptyResultSet if this + node can't match anything. + """ + result = [] + result_params = [] + if self.connector == AND: + full_needed, empty_needed = len(self.children), 1 + else: + full_needed, empty_needed = 1, len(self.children) + + for child in self.children: + try: + sql, params = compiler.compile(child) + except EmptyResultSet: + empty_needed -= 1 + else: + if sql: + result.append(sql) + result_params.extend(params) + else: + full_needed -= 1 + # Check if this node matches nothing or everything. + # First check the amount of full nodes and empty nodes + # to make this node empty/full. + # Now, check if this node is full/empty using the + # counts. + if empty_needed == 0: + if self.negated: + return '', [] + else: + raise EmptyResultSet + if full_needed == 0: + if self.negated: + raise EmptyResultSet + else: + return '', [] + conn = ' %s ' % self.connector + sql_string = conn.join(result) + if sql_string: + if self.negated: + # Some backends (Oracle at least) need parentheses + # around the inner SQL in the negated case, even if the + # inner SQL contains just a single expression. + sql_string = 'NOT (%s)' % sql_string + elif len(result) > 1 or self.resolved: + sql_string = '(%s)' % sql_string + return sql_string, result_params + + def get_group_by_cols(self): + cols = [] + for child in self.children: + cols.extend(child.get_group_by_cols()) + return cols + + def get_source_expressions(self): + return self.children[:] + + def set_source_expressions(self, children): + assert len(children) == len(self.children) + self.children = children + + def relabel_aliases(self, change_map): + """ + Relabel the alias values of any children. 'change_map' is a dictionary + mapping old (current) alias values to the new values. + """ + for pos, child in enumerate(self.children): + if hasattr(child, 'relabel_aliases'): + # For example another WhereNode + child.relabel_aliases(change_map) + elif hasattr(child, 'relabeled_clone'): + self.children[pos] = child.relabeled_clone(change_map) + + def clone(self): + """ + Create a clone of the tree. Must only be called on root nodes (nodes + with empty subtree_parents). Childs must be either (Constraint, lookup, + value) tuples, or objects supporting .clone(). + """ + clone = self.__class__._new_instance( + children=[], connector=self.connector, negated=self.negated) + for child in self.children: + if hasattr(child, 'clone'): + clone.children.append(child.clone()) + else: + clone.children.append(child) + return clone + + def relabeled_clone(self, change_map): + clone = self.clone() + clone.relabel_aliases(change_map) + return clone + + @classmethod + def _contains_aggregate(cls, obj): + if isinstance(obj, tree.Node): + return any(cls._contains_aggregate(c) for c in obj.children) + return obj.contains_aggregate + + @cached_property + def contains_aggregate(self): + return self._contains_aggregate(self) + + @classmethod + def _contains_over_clause(cls, obj): + if isinstance(obj, tree.Node): + return any(cls._contains_over_clause(c) for c in obj.children) + return obj.contains_over_clause + + @cached_property + def contains_over_clause(self): + return self._contains_over_clause(self) + + @property + def is_summary(self): + return any(child.is_summary for child in self.children) + + def resolve_expression(self, *args, **kwargs): + clone = self.clone() + clone.resolved = True + return clone + + +class NothingNode: + """A node that matches nothing.""" + contains_aggregate = False + + def as_sql(self, compiler=None, connection=None): + raise EmptyResultSet + + +class ExtraWhere: + # The contents are a black box - assume no aggregates are used. + contains_aggregate = False + + def __init__(self, sqls, params): + self.sqls = sqls + self.params = params + + def as_sql(self, compiler=None, connection=None): + sqls = ["(%s)" % sql for sql in self.sqls] + return " AND ".join(sqls), list(self.params or ()) + + +class SubqueryConstraint: + # Even if aggregates would be used in a subquery, the outer query isn't + # interested about those. + contains_aggregate = False + + def __init__(self, alias, columns, targets, query_object): + self.alias = alias + self.columns = columns + self.targets = targets + self.query_object = query_object + + def as_sql(self, compiler, connection): + query = self.query_object + query.set_values(self.targets) + query_compiler = query.get_compiler(connection=connection) + return query_compiler.as_subquery_condition(self.alias, self.columns, compiler) diff --git a/env/lib/python3.5/site-packages/django/db/models/utils.py b/env/lib/python3.5/site-packages/django/db/models/utils.py new file mode 100644 index 0000000..b966029 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/models/utils.py @@ -0,0 +1,21 @@ +def make_model_tuple(model): + """ + Take a model or a string of the form "app_label.ModelName" and return a + corresponding ("app_label", "modelname") tuple. If a tuple is passed in, + assume it's a valid model tuple already and return it unchanged. + """ + try: + if isinstance(model, tuple): + model_tuple = model + elif isinstance(model, str): + app_label, model_name = model.split(".") + model_tuple = app_label, model_name.lower() + else: + model_tuple = model._meta.app_label, model._meta.model_name + assert len(model_tuple) == 2 + return model_tuple + except (ValueError, AssertionError): + raise ValueError( + "Invalid model reference '%s'. String model references " + "must be of the form 'app_label.ModelName'." % model + ) diff --git a/env/lib/python3.5/site-packages/django/db/transaction.py b/env/lib/python3.5/site-packages/django/db/transaction.py new file mode 100644 index 0000000..a184796 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/transaction.py @@ -0,0 +1,289 @@ +from contextlib import ContextDecorator + +from django.db import ( + DEFAULT_DB_ALIAS, DatabaseError, Error, ProgrammingError, connections, +) + + +class TransactionManagementError(ProgrammingError): + """Transaction management is used improperly.""" + pass + + +def get_connection(using=None): + """ + Get a database connection by name, or the default database connection + if no name is provided. This is a private API. + """ + if using is None: + using = DEFAULT_DB_ALIAS + return connections[using] + + +def get_autocommit(using=None): + """Get the autocommit status of the connection.""" + return get_connection(using).get_autocommit() + + +def set_autocommit(autocommit, using=None): + """Set the autocommit status of the connection.""" + return get_connection(using).set_autocommit(autocommit) + + +def commit(using=None): + """Commit a transaction.""" + get_connection(using).commit() + + +def rollback(using=None): + """Roll back a transaction.""" + get_connection(using).rollback() + + +def savepoint(using=None): + """ + Create a savepoint (if supported and required by the backend) inside the + current transaction. Return an identifier for the savepoint that will be + used for the subsequent rollback or commit. + """ + return get_connection(using).savepoint() + + +def savepoint_rollback(sid, using=None): + """ + Roll back the most recent savepoint (if one exists). Do nothing if + savepoints are not supported. + """ + get_connection(using).savepoint_rollback(sid) + + +def savepoint_commit(sid, using=None): + """ + Commit the most recent savepoint (if one exists). Do nothing if + savepoints are not supported. + """ + get_connection(using).savepoint_commit(sid) + + +def clean_savepoints(using=None): + """ + Reset the counter used to generate unique savepoint ids in this thread. + """ + get_connection(using).clean_savepoints() + + +def get_rollback(using=None): + """Get the "needs rollback" flag -- for *advanced use* only.""" + return get_connection(using).get_rollback() + + +def set_rollback(rollback, using=None): + """ + Set or unset the "needs rollback" flag -- for *advanced use* only. + + When `rollback` is `True`, trigger a rollback when exiting the innermost + enclosing atomic block that has `savepoint=True` (that's the default). Use + this to force a rollback without raising an exception. + + When `rollback` is `False`, prevent such a rollback. Use this only after + rolling back to a known-good state! Otherwise, you break the atomic block + and data corruption may occur. + """ + return get_connection(using).set_rollback(rollback) + + +def on_commit(func, using=None): + """ + Register `func` to be called when the current transaction is committed. + If the current transaction is rolled back, `func` will not be called. + """ + get_connection(using).on_commit(func) + + +################################# +# Decorators / context managers # +################################# + +class Atomic(ContextDecorator): + """ + Guarantee the atomic execution of a given block. + + An instance can be used either as a decorator or as a context manager. + + When it's used as a decorator, __call__ wraps the execution of the + decorated function in the instance itself, used as a context manager. + + When it's used as a context manager, __enter__ creates a transaction or a + savepoint, depending on whether a transaction is already in progress, and + __exit__ commits the transaction or releases the savepoint on normal exit, + and rolls back the transaction or to the savepoint on exceptions. + + It's possible to disable the creation of savepoints if the goal is to + ensure that some code runs within a transaction without creating overhead. + + A stack of savepoints identifiers is maintained as an attribute of the + connection. None denotes the absence of a savepoint. + + This allows reentrancy even if the same AtomicWrapper is reused. For + example, it's possible to define `oa = atomic('other')` and use `@oa` or + `with oa:` multiple times. + + Since database connections are thread-local, this is thread-safe. + + This is a private API. + """ + + def __init__(self, using, savepoint): + self.using = using + self.savepoint = savepoint + + def __enter__(self): + connection = get_connection(self.using) + + if not connection.in_atomic_block: + # Reset state when entering an outermost atomic block. + connection.commit_on_exit = True + connection.needs_rollback = False + if not connection.get_autocommit(): + # Some database adapters (namely sqlite3) don't handle + # transactions and savepoints properly when autocommit is off. + # Turning autocommit back on isn't an option; it would trigger + # a premature commit. Give up if that happens. + if connection.features.autocommits_when_autocommit_is_off: + raise TransactionManagementError( + "Your database backend doesn't behave properly when " + "autocommit is off. Turn it on before using 'atomic'.") + # Pretend we're already in an atomic block to bypass the code + # that disables autocommit to enter a transaction, and make a + # note to deal with this case in __exit__. + connection.in_atomic_block = True + connection.commit_on_exit = False + + if connection.in_atomic_block: + # We're already in a transaction; create a savepoint, unless we + # were told not to or we're already waiting for a rollback. The + # second condition avoids creating useless savepoints and prevents + # overwriting needs_rollback until the rollback is performed. + if self.savepoint and not connection.needs_rollback: + sid = connection.savepoint() + connection.savepoint_ids.append(sid) + else: + connection.savepoint_ids.append(None) + else: + connection.set_autocommit(False, force_begin_transaction_with_broken_autocommit=True) + connection.in_atomic_block = True + + def __exit__(self, exc_type, exc_value, traceback): + connection = get_connection(self.using) + + if connection.savepoint_ids: + sid = connection.savepoint_ids.pop() + else: + # Prematurely unset this flag to allow using commit or rollback. + connection.in_atomic_block = False + + try: + if connection.closed_in_transaction: + # The database will perform a rollback by itself. + # Wait until we exit the outermost block. + pass + + elif exc_type is None and not connection.needs_rollback: + if connection.in_atomic_block: + # Release savepoint if there is one + if sid is not None: + try: + connection.savepoint_commit(sid) + except DatabaseError: + try: + connection.savepoint_rollback(sid) + # The savepoint won't be reused. Release it to + # minimize overhead for the database server. + connection.savepoint_commit(sid) + except Error: + # If rolling back to a savepoint fails, mark for + # rollback at a higher level and avoid shadowing + # the original exception. + connection.needs_rollback = True + raise + else: + # Commit transaction + try: + connection.commit() + except DatabaseError: + try: + connection.rollback() + except Error: + # An error during rollback means that something + # went wrong with the connection. Drop it. + connection.close() + raise + else: + # This flag will be set to True again if there isn't a savepoint + # allowing to perform the rollback at this level. + connection.needs_rollback = False + if connection.in_atomic_block: + # Roll back to savepoint if there is one, mark for rollback + # otherwise. + if sid is None: + connection.needs_rollback = True + else: + try: + connection.savepoint_rollback(sid) + # The savepoint won't be reused. Release it to + # minimize overhead for the database server. + connection.savepoint_commit(sid) + except Error: + # If rolling back to a savepoint fails, mark for + # rollback at a higher level and avoid shadowing + # the original exception. + connection.needs_rollback = True + else: + # Roll back transaction + try: + connection.rollback() + except Error: + # An error during rollback means that something + # went wrong with the connection. Drop it. + connection.close() + + finally: + # Outermost block exit when autocommit was enabled. + if not connection.in_atomic_block: + if connection.closed_in_transaction: + connection.connection = None + else: + connection.set_autocommit(True) + # Outermost block exit when autocommit was disabled. + elif not connection.savepoint_ids and not connection.commit_on_exit: + if connection.closed_in_transaction: + connection.connection = None + else: + connection.in_atomic_block = False + + +def atomic(using=None, savepoint=True): + # Bare decorator: @atomic -- although the first argument is called + # `using`, it's actually the function being decorated. + if callable(using): + return Atomic(DEFAULT_DB_ALIAS, savepoint)(using) + # Decorator: @atomic(...) or context manager: with atomic(...): ... + else: + return Atomic(using, savepoint) + + +def _non_atomic_requests(view, using): + try: + view._non_atomic_requests.add(using) + except AttributeError: + view._non_atomic_requests = {using} + return view + + +def non_atomic_requests(using=None): + if callable(using): + return _non_atomic_requests(using, DEFAULT_DB_ALIAS) + else: + if using is None: + using = DEFAULT_DB_ALIAS + return lambda view: _non_atomic_requests(view, using) diff --git a/env/lib/python3.5/site-packages/django/db/utils.py b/env/lib/python3.5/site-packages/django/db/utils.py new file mode 100644 index 0000000..6202a9a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/db/utils.py @@ -0,0 +1,308 @@ +import pkgutil +from importlib import import_module +from pathlib import Path +from threading import local + +from django.conf import settings +from django.core.exceptions import ImproperlyConfigured +from django.utils.functional import cached_property +from django.utils.module_loading import import_string + +DEFAULT_DB_ALIAS = 'default' +DJANGO_VERSION_PICKLE_KEY = '_django_version' + + +class Error(Exception): + pass + + +class InterfaceError(Error): + pass + + +class DatabaseError(Error): + pass + + +class DataError(DatabaseError): + pass + + +class OperationalError(DatabaseError): + pass + + +class IntegrityError(DatabaseError): + pass + + +class InternalError(DatabaseError): + pass + + +class ProgrammingError(DatabaseError): + pass + + +class NotSupportedError(DatabaseError): + pass + + +class DatabaseErrorWrapper: + """ + Context manager and decorator that reraises backend-specific database + exceptions using Django's common wrappers. + """ + + def __init__(self, wrapper): + """ + wrapper is a database wrapper. + + It must have a Database attribute defining PEP-249 exceptions. + """ + self.wrapper = wrapper + + def __enter__(self): + pass + + def __exit__(self, exc_type, exc_value, traceback): + if exc_type is None: + return + for dj_exc_type in ( + DataError, + OperationalError, + IntegrityError, + InternalError, + ProgrammingError, + NotSupportedError, + DatabaseError, + InterfaceError, + Error, + ): + db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__) + if issubclass(exc_type, db_exc_type): + dj_exc_value = dj_exc_type(*exc_value.args) + # Only set the 'errors_occurred' flag for errors that may make + # the connection unusable. + if dj_exc_type not in (DataError, IntegrityError): + self.wrapper.errors_occurred = True + raise dj_exc_value.with_traceback(traceback) from exc_value + + def __call__(self, func): + # Note that we are intentionally not using @wraps here for performance + # reasons. Refs #21109. + def inner(*args, **kwargs): + with self: + return func(*args, **kwargs) + return inner + + +def load_backend(backend_name): + """ + Return a database backend's "base" module given a fully qualified database + backend name, or raise an error if it doesn't exist. + """ + # This backend was renamed in Django 1.9. + if backend_name == 'django.db.backends.postgresql_psycopg2': + backend_name = 'django.db.backends.postgresql' + + try: + return import_module('%s.base' % backend_name) + except ImportError as e_user: + # The database backend wasn't found. Display a helpful error message + # listing all built-in database backends. + backend_dir = str(Path(__file__).parent / 'backends') + builtin_backends = [ + name for _, name, ispkg in pkgutil.iter_modules([backend_dir]) + if ispkg and name not in {'base', 'dummy', 'postgresql_psycopg2'} + ] + if backend_name not in ['django.db.backends.%s' % b for b in builtin_backends]: + backend_reprs = map(repr, sorted(builtin_backends)) + raise ImproperlyConfigured( + "%r isn't an available database backend.\n" + "Try using 'django.db.backends.XXX', where XXX is one of:\n" + " %s" % (backend_name, ", ".join(backend_reprs)) + ) from e_user + else: + # If there's some other error, this must be an error in Django + raise + + +class ConnectionDoesNotExist(Exception): + pass + + +class ConnectionHandler: + def __init__(self, databases=None): + """ + databases is an optional dictionary of database definitions (structured + like settings.DATABASES). + """ + self._databases = databases + self._connections = local() + + @cached_property + def databases(self): + if self._databases is None: + self._databases = settings.DATABASES + if self._databases == {}: + self._databases = { + DEFAULT_DB_ALIAS: { + 'ENGINE': 'django.db.backends.dummy', + }, + } + if self._databases[DEFAULT_DB_ALIAS] == {}: + self._databases[DEFAULT_DB_ALIAS]['ENGINE'] = 'django.db.backends.dummy' + + if DEFAULT_DB_ALIAS not in self._databases: + raise ImproperlyConfigured("You must define a '%s' database" % DEFAULT_DB_ALIAS) + return self._databases + + def ensure_defaults(self, alias): + """ + Put the defaults into the settings dictionary for a given connection + where no settings is provided. + """ + try: + conn = self.databases[alias] + except KeyError: + raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias) + + conn.setdefault('ATOMIC_REQUESTS', False) + conn.setdefault('AUTOCOMMIT', True) + conn.setdefault('ENGINE', 'django.db.backends.dummy') + if conn['ENGINE'] == 'django.db.backends.' or not conn['ENGINE']: + conn['ENGINE'] = 'django.db.backends.dummy' + conn.setdefault('CONN_MAX_AGE', 0) + conn.setdefault('OPTIONS', {}) + conn.setdefault('TIME_ZONE', None) + for setting in ['NAME', 'USER', 'PASSWORD', 'HOST', 'PORT']: + conn.setdefault(setting, '') + + def prepare_test_settings(self, alias): + """ + Make sure the test settings are available in the 'TEST' sub-dictionary. + """ + try: + conn = self.databases[alias] + except KeyError: + raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias) + + test_settings = conn.setdefault('TEST', {}) + for key in ['CHARSET', 'COLLATION', 'NAME', 'MIRROR']: + test_settings.setdefault(key, None) + + def __getitem__(self, alias): + if hasattr(self._connections, alias): + return getattr(self._connections, alias) + + self.ensure_defaults(alias) + self.prepare_test_settings(alias) + db = self.databases[alias] + backend = load_backend(db['ENGINE']) + conn = backend.DatabaseWrapper(db, alias) + setattr(self._connections, alias, conn) + return conn + + def __setitem__(self, key, value): + setattr(self._connections, key, value) + + def __delitem__(self, key): + delattr(self._connections, key) + + def __iter__(self): + return iter(self.databases) + + def all(self): + return [self[alias] for alias in self] + + def close_all(self): + for alias in self: + try: + connection = getattr(self._connections, alias) + except AttributeError: + continue + connection.close() + + +class ConnectionRouter: + def __init__(self, routers=None): + """ + If routers is not specified, default to settings.DATABASE_ROUTERS. + """ + self._routers = routers + + @cached_property + def routers(self): + if self._routers is None: + self._routers = settings.DATABASE_ROUTERS + routers = [] + for r in self._routers: + if isinstance(r, str): + router = import_string(r)() + else: + router = r + routers.append(router) + return routers + + def _router_func(action): + def _route_db(self, model, **hints): + chosen_db = None + for router in self.routers: + try: + method = getattr(router, action) + except AttributeError: + # If the router doesn't have a method, skip to the next one. + pass + else: + chosen_db = method(model, **hints) + if chosen_db: + return chosen_db + instance = hints.get('instance') + if instance is not None and instance._state.db: + return instance._state.db + return DEFAULT_DB_ALIAS + return _route_db + + db_for_read = _router_func('db_for_read') + db_for_write = _router_func('db_for_write') + + def allow_relation(self, obj1, obj2, **hints): + for router in self.routers: + try: + method = router.allow_relation + except AttributeError: + # If the router doesn't have a method, skip to the next one. + pass + else: + allow = method(obj1, obj2, **hints) + if allow is not None: + return allow + return obj1._state.db == obj2._state.db + + def allow_migrate(self, db, app_label, **hints): + for router in self.routers: + try: + method = router.allow_migrate + except AttributeError: + # If the router doesn't have a method, skip to the next one. + continue + + allow = method(db, app_label, **hints) + + if allow is not None: + return allow + return True + + def allow_migrate_model(self, db, model): + return self.allow_migrate( + db, + model._meta.app_label, + model_name=model._meta.model_name, + model=model, + ) + + def get_migratable_models(self, app_config, db, include_auto_created=False): + """Return app models allowed to be migrated on provided db.""" + models = app_config.get_models(include_auto_created=include_auto_created) + return [model for model in models if self.allow_migrate_model(db, model)] diff --git a/env/lib/python3.5/site-packages/django/dispatch/__init__.py b/env/lib/python3.5/site-packages/django/dispatch/__init__.py new file mode 100644 index 0000000..a615f99 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/dispatch/__init__.py @@ -0,0 +1,9 @@ +"""Multi-consumer multi-producer dispatching mechanism + +Originally based on pydispatch (BSD) https://pypi.org/project/PyDispatcher/2.0.1/ +See license.txt for original license. + +Heavily modified for Django's purposes. +""" + +from django.dispatch.dispatcher import Signal, receiver # NOQA diff --git a/env/lib/python3.5/site-packages/django/dispatch/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/dispatch/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdcecf2db95cb75dc05d3a06bb6f17ea404e912e GIT binary patch literal 456 zcmYjNJx{|h6m-(kR*||gFd%P`p)qu$LI|M_EPP1WA|xxd-Sm~jwrr;&{3HGlLslmK z0uxSYD=hhZPkz3;=i~7>nzGr;X@Jld`nN*QZ~eB|14k(H7$6>^GC);`vJh20l=V=+ zdnk?j@1GBK>0rW?v~?v6uC}E%ir37S9IVbATY)TaCD-~D9ujz_GPjUejvh_?judl!v``)9q-_0MqH(d20dBSQ1Xdf(vU!aO~zI Zl!63DX`-8UbnR2urMMY-CEMu_!e8liip&52 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/dispatch/__pycache__/dispatcher.cpython-35.pyc b/env/lib/python3.5/site-packages/django/dispatch/__pycache__/dispatcher.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a751e01b16957c3eaf6678f3a0acd436d177e850 GIT binary patch literal 8961 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 T77eSd^VN2}U2Rqu|M&j@nM0NQ literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/dispatch/dispatcher.py b/env/lib/python3.5/site-packages/django/dispatch/dispatcher.py new file mode 100644 index 0000000..9100243 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/dispatch/dispatcher.py @@ -0,0 +1,292 @@ +import threading +import weakref + +from django.utils.inspect import func_accepts_kwargs + + +def _make_id(target): + if hasattr(target, '__func__'): + return (id(target.__self__), id(target.__func__)) + return id(target) + + +NONE_ID = _make_id(None) + +# A marker for caching +NO_RECEIVERS = object() + + +class Signal: + """ + Base class for all signals + + Internal attributes: + + receivers + { receiverkey (id) : weakref(receiver) } + """ + def __init__(self, providing_args=None, use_caching=False): + """ + Create a new signal. + + providing_args + A list of the arguments this signal can pass along in a send() call. + """ + self.receivers = [] + if providing_args is None: + providing_args = [] + self.providing_args = set(providing_args) + self.lock = threading.Lock() + self.use_caching = use_caching + # For convenience we create empty caches even if they are not used. + # A note about caching: if use_caching is defined, then for each + # distinct sender we cache the receivers that sender has in + # 'sender_receivers_cache'. The cache is cleaned when .connect() or + # .disconnect() is called and populated on send(). + self.sender_receivers_cache = weakref.WeakKeyDictionary() if use_caching else {} + self._dead_receivers = False + + def connect(self, receiver, sender=None, weak=True, dispatch_uid=None): + """ + Connect receiver to sender for signal. + + Arguments: + + receiver + A function or an instance method which is to receive signals. + Receivers must be hashable objects. + + If weak is True, then receiver must be weak referenceable. + + Receivers must be able to accept keyword arguments. + + If a receiver is connected with a dispatch_uid argument, it + will not be added if another receiver was already connected + with that dispatch_uid. + + sender + The sender to which the receiver should respond. Must either be + a Python object, or None to receive events from any sender. + + weak + Whether to use weak references to the receiver. By default, the + module will attempt to use weak references to the receiver + objects. If this parameter is false, then strong references will + be used. + + dispatch_uid + An identifier used to uniquely identify a particular instance of + a receiver. This will usually be a string, though it may be + anything hashable. + """ + from django.conf import settings + + # If DEBUG is on, check that we got a good receiver + if settings.configured and settings.DEBUG: + assert callable(receiver), "Signal receivers must be callable." + + # Check for **kwargs + if not func_accepts_kwargs(receiver): + raise ValueError("Signal receivers must accept keyword arguments (**kwargs).") + + if dispatch_uid: + lookup_key = (dispatch_uid, _make_id(sender)) + else: + lookup_key = (_make_id(receiver), _make_id(sender)) + + if weak: + ref = weakref.ref + receiver_object = receiver + # Check for bound methods + if hasattr(receiver, '__self__') and hasattr(receiver, '__func__'): + ref = weakref.WeakMethod + receiver_object = receiver.__self__ + receiver = ref(receiver) + weakref.finalize(receiver_object, self._remove_receiver) + + with self.lock: + self._clear_dead_receivers() + if not any(r_key == lookup_key for r_key, _ in self.receivers): + self.receivers.append((lookup_key, receiver)) + self.sender_receivers_cache.clear() + + def disconnect(self, receiver=None, sender=None, dispatch_uid=None): + """ + Disconnect receiver from sender for signal. + + If weak references are used, disconnect need not be called. The receiver + will be removed from dispatch automatically. + + Arguments: + + receiver + The registered receiver to disconnect. May be none if + dispatch_uid is specified. + + sender + The registered sender to disconnect + + dispatch_uid + the unique identifier of the receiver to disconnect + """ + if dispatch_uid: + lookup_key = (dispatch_uid, _make_id(sender)) + else: + lookup_key = (_make_id(receiver), _make_id(sender)) + + disconnected = False + with self.lock: + self._clear_dead_receivers() + for index in range(len(self.receivers)): + (r_key, _) = self.receivers[index] + if r_key == lookup_key: + disconnected = True + del self.receivers[index] + break + self.sender_receivers_cache.clear() + return disconnected + + def has_listeners(self, sender=None): + return bool(self._live_receivers(sender)) + + def send(self, sender, **named): + """ + Send signal from sender to all connected receivers. + + If any receiver raises an error, the error propagates back through send, + terminating the dispatch loop. So it's possible that all receivers + won't be called if an error is raised. + + Arguments: + + sender + The sender of the signal. Either a specific object or None. + + named + Named arguments which will be passed to receivers. + + Return a list of tuple pairs [(receiver, response), ... ]. + """ + if not self.receivers or self.sender_receivers_cache.get(sender) is NO_RECEIVERS: + return [] + + return [ + (receiver, receiver(signal=self, sender=sender, **named)) + for receiver in self._live_receivers(sender) + ] + + def send_robust(self, sender, **named): + """ + Send signal from sender to all connected receivers catching errors. + + Arguments: + + sender + The sender of the signal. Can be any Python object (normally one + registered with a connect if you actually want something to + occur). + + named + Named arguments which will be passed to receivers. These + arguments must be a subset of the argument names defined in + providing_args. + + Return a list of tuple pairs [(receiver, response), ... ]. + + If any receiver raises an error (specifically any subclass of + Exception), return the error instance as the result for that receiver. + """ + if not self.receivers or self.sender_receivers_cache.get(sender) is NO_RECEIVERS: + return [] + + # Call each receiver with whatever arguments it can accept. + # Return a list of tuple pairs [(receiver, response), ... ]. + responses = [] + for receiver in self._live_receivers(sender): + try: + response = receiver(signal=self, sender=sender, **named) + except Exception as err: + responses.append((receiver, err)) + else: + responses.append((receiver, response)) + return responses + + def _clear_dead_receivers(self): + # Note: caller is assumed to hold self.lock. + if self._dead_receivers: + self._dead_receivers = False + self.receivers = [ + r for r in self.receivers + if not(isinstance(r[1], weakref.ReferenceType) and r[1]() is None) + ] + + def _live_receivers(self, sender): + """ + Filter sequence of receivers to get resolved, live receivers. + + This checks for weak references and resolves them, then returning only + live receivers. + """ + receivers = None + if self.use_caching and not self._dead_receivers: + receivers = self.sender_receivers_cache.get(sender) + # We could end up here with NO_RECEIVERS even if we do check this case in + # .send() prior to calling _live_receivers() due to concurrent .send() call. + if receivers is NO_RECEIVERS: + return [] + if receivers is None: + with self.lock: + self._clear_dead_receivers() + senderkey = _make_id(sender) + receivers = [] + for (receiverkey, r_senderkey), receiver in self.receivers: + if r_senderkey == NONE_ID or r_senderkey == senderkey: + receivers.append(receiver) + if self.use_caching: + if not receivers: + self.sender_receivers_cache[sender] = NO_RECEIVERS + else: + # Note, we must cache the weakref versions. + self.sender_receivers_cache[sender] = receivers + non_weak_receivers = [] + for receiver in receivers: + if isinstance(receiver, weakref.ReferenceType): + # Dereference the weak reference. + receiver = receiver() + if receiver is not None: + non_weak_receivers.append(receiver) + else: + non_weak_receivers.append(receiver) + return non_weak_receivers + + def _remove_receiver(self, receiver=None): + # Mark that the self.receivers list has dead weakrefs. If so, we will + # clean those up in connect, disconnect and _live_receivers while + # holding self.lock. Note that doing the cleanup here isn't a good + # idea, _remove_receiver() will be called as side effect of garbage + # collection, and so the call can happen while we are already holding + # self.lock. + self._dead_receivers = True + + +def receiver(signal, **kwargs): + """ + A decorator for connecting receivers to signals. Used by passing in the + signal (or list of signals) and keyword arguments to connect:: + + @receiver(post_save, sender=MyModel) + def signal_receiver(sender, **kwargs): + ... + + @receiver([post_save, post_delete], sender=MyModel) + def signals_receiver(sender, **kwargs): + ... + """ + def _decorator(func): + if isinstance(signal, (list, tuple)): + for s in signal: + s.connect(func, **kwargs) + else: + signal.connect(func, **kwargs) + return func + return _decorator diff --git a/env/lib/python3.5/site-packages/django/dispatch/license.txt b/env/lib/python3.5/site-packages/django/dispatch/license.txt new file mode 100644 index 0000000..505090d --- /dev/null +++ b/env/lib/python3.5/site-packages/django/dispatch/license.txt @@ -0,0 +1,36 @@ +django.dispatch was originally forked from PyDispatcher. + +PyDispatcher License: + + Copyright (c) 2001-2003, Patrick K. O'Brien and Contributors + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + The name of Patrick K. O'Brien, or the name of any Contributor, + may not be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/env/lib/python3.5/site-packages/django/forms/__init__.py b/env/lib/python3.5/site-packages/django/forms/__init__.py new file mode 100644 index 0000000..1c31921 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/__init__.py @@ -0,0 +1,11 @@ +""" +Django validation and HTML form handling. +""" + +from django.core.exceptions import ValidationError # NOQA +from django.forms.boundfield import * # NOQA +from django.forms.fields import * # NOQA +from django.forms.forms import * # NOQA +from django.forms.formsets import * # NOQA +from django.forms.models import * # NOQA +from django.forms.widgets import * # NOQA diff --git a/env/lib/python3.5/site-packages/django/forms/__pycache__/__init__.cpython-35.pyc b/env/lib/python3.5/site-packages/django/forms/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbf4dacfd3ae410c04aceadf1ab994b92af609cf GIT binary patch literal 475 zcmZWk%TB{E5L~BEA{7via?Q1%CQ>g5gb)XiH~<%_9xNm)josqn*pZ#``Xhd+S5Eu_ zCpMu(6l{4sJG(nxcRL+_kR0D-1mGQhEf4t_9ydbZ02Gk`_dpRyJ)jC(iS+Q2d+Q{l~+iScY_~)}&PfhR`E6L+r8Xd%%2baU^t6*Ym8r);3q@ITU2Mz)~ zve+0^wHMYJixSzt>8&kVjB%4NM!UQ;4HIKUD4r9M6~@jMf1-QKWZ~|@v6*W=kwS60 zy^<(3N4HkRqKEGO*F^6A^rwak<><~z?UUqFEPVspz)?#0JdE-*i!zz@$8)K8U(eVP oA3WsIcjwPljvFy1wagg{vzJBt1mBn|aauz!w~o;CHi=*DFUYfn1poj5 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/forms/__pycache__/boundfield.cpython-35.pyc b/env/lib/python3.5/site-packages/django/forms/__pycache__/boundfield.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5dc5fe4566504b0ca36371271d0c502f42ba9e41 GIT binary patch literal 10223 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 XN4&~umo8WrfVHmRSu54b8~^%0_Mq@K literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/forms/__pycache__/fields.cpython-35.pyc b/env/lib/python3.5/site-packages/django/forms/__pycache__/fields.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f60eda760904f0728c5b630772b806f87082d22c GIT binary patch literal 40316 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 b+@85TGh=hd@b}2vok;)C+&%a^IhX%GbOYh- literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/forms/__pycache__/forms.cpython-35.pyc b/env/lib/python3.5/site-packages/django/forms/__pycache__/forms.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bcce1f4caa6024e1de6272bfb1878a1244ce6c8 GIT binary patch literal 16416 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

    B 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

    *Wg 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 NW^&nmdU4d5%8ngQJQ$dOBv>Fo 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 literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/forms/__pycache__/widgets.cpython-35.pyc b/env/lib/python3.5/site-packages/django/forms/__pycache__/widgets.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dbb8a6dff521ecef3a64cb9518996653056cbe6 GIT binary patch literal 38645 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 J(|1f4{y#C!)8haD literal 0 HcmV?d00001 diff --git a/env/lib/python3.5/site-packages/django/forms/boundfield.py b/env/lib/python3.5/site-packages/django/forms/boundfield.py new file mode 100644 index 0000000..7f40fbb --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/boundfield.py @@ -0,0 +1,266 @@ +import datetime + +from django.forms.utils import flatatt, pretty_name +from django.forms.widgets import Textarea, TextInput +from django.utils.functional import cached_property +from django.utils.html import conditional_escape, format_html, html_safe +from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ + +__all__ = ('BoundField',) + + +@html_safe +class BoundField: + "A Field plus data" + def __init__(self, form, field, name): + self.form = form + self.field = field + self.name = name + self.html_name = form.add_prefix(name) + self.html_initial_name = form.add_initial_prefix(name) + self.html_initial_id = form.add_initial_prefix(self.auto_id) + if self.field.label is None: + self.label = pretty_name(name) + else: + self.label = self.field.label + self.help_text = field.help_text or '' + + def __str__(self): + """Render this field as an HTML widget.""" + if self.field.show_hidden_initial: + return self.as_widget() + self.as_hidden(only_initial=True) + return self.as_widget() + + @cached_property + def subwidgets(self): + """ + Most widgets yield a single subwidget, but others like RadioSelect and + CheckboxSelectMultiple produce one subwidget for each choice. + + This property is cached so that only one database query occurs when + rendering ModelChoiceFields. + """ + id_ = self.field.widget.attrs.get('id') or self.auto_id + attrs = {'id': id_} if id_ else {} + attrs = self.build_widget_attrs(attrs) + return [ + BoundWidget(self.field.widget, widget, self.form.renderer) + for widget in self.field.widget.subwidgets(self.html_name, self.value(), attrs=attrs) + ] + + def __bool__(self): + # BoundField evaluates to True even if it doesn't have subwidgets. + return True + + def __iter__(self): + return iter(self.subwidgets) + + def __len__(self): + return len(self.subwidgets) + + def __getitem__(self, idx): + # Prevent unnecessary reevaluation when accessing BoundField's attrs + # from templates. + if not isinstance(idx, (int, slice)): + raise TypeError + return self.subwidgets[idx] + + @property + def errors(self): + """ + Return an ErrorList (empty if there are no errors) for this field. + """ + return self.form.errors.get(self.name, self.form.error_class()) + + def as_widget(self, widget=None, attrs=None, only_initial=False): + """ + Render the field by rendering the passed widget, adding any HTML + attributes passed as attrs. If a widget isn't specified, use the + field's default widget. + """ + widget = widget or self.field.widget + if self.field.localize: + widget.is_localized = True + attrs = attrs or {} + attrs = self.build_widget_attrs(attrs, widget) + if self.auto_id and 'id' not in widget.attrs: + attrs.setdefault('id', self.html_initial_id if only_initial else self.auto_id) + return widget.render( + name=self.html_initial_name if only_initial else self.html_name, + value=self.value(), + attrs=attrs, + renderer=self.form.renderer, + ) + + def as_text(self, attrs=None, **kwargs): + """ + Return a string of HTML for representing this as an . + """ + return self.as_widget(TextInput(), attrs, **kwargs) + + def as_textarea(self, attrs=None, **kwargs): + """Return a string of HTML for representing this as a diff --git a/env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/time.html b/env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/time.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/time.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/url.html b/env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/url.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/jinja2/django/forms/widgets/url.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/models.py b/env/lib/python3.5/site-packages/django/forms/models.py new file mode 100644 index 0000000..cf66f10 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/models.py @@ -0,0 +1,1362 @@ +""" +Helper functions for creating Form classes from Django models +and database field objects. +""" + +from collections import OrderedDict +from itertools import chain + +from django.core.exceptions import ( + NON_FIELD_ERRORS, FieldError, ImproperlyConfigured, ValidationError, +) +from django.forms.fields import ChoiceField, Field +from django.forms.forms import BaseForm, DeclarativeFieldsMetaclass +from django.forms.formsets import BaseFormSet, formset_factory +from django.forms.utils import ErrorList +from django.forms.widgets import ( + HiddenInput, MultipleHiddenInput, SelectMultiple, +) +from django.utils.text import capfirst, get_text_list +from django.utils.translation import gettext, gettext_lazy as _ + +__all__ = ( + 'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model', + 'ModelChoiceField', 'ModelMultipleChoiceField', 'ALL_FIELDS', + 'BaseModelFormSet', 'modelformset_factory', 'BaseInlineFormSet', + 'inlineformset_factory', 'modelform_factory', +) + +ALL_FIELDS = '__all__' + + +def construct_instance(form, instance, fields=None, exclude=None): + """ + Construct and return a model instance from the bound ``form``'s + ``cleaned_data``, but do not save the returned instance to the database. + """ + from django.db import models + opts = instance._meta + + cleaned_data = form.cleaned_data + file_field_list = [] + for f in opts.fields: + if not f.editable or isinstance(f, models.AutoField) \ + or f.name not in cleaned_data: + continue + if fields is not None and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + # Leave defaults for fields that aren't in POST data, except for + # checkbox inputs because they don't appear in POST data if not checked. + if (f.has_default() and + form[f.name].field.widget.value_omitted_from_data(form.data, form.files, form.add_prefix(f.name))): + continue + # Defer saving file-type fields until after the other fields, so a + # callable upload_to can use the values from other fields. + if isinstance(f, models.FileField): + file_field_list.append(f) + else: + f.save_form_data(instance, cleaned_data[f.name]) + + for f in file_field_list: + f.save_form_data(instance, cleaned_data[f.name]) + + return instance + + +# ModelForms ################################################################# + +def model_to_dict(instance, fields=None, exclude=None): + """ + Return a dict containing the data in ``instance`` suitable for passing as + a Form's ``initial`` keyword argument. + + ``fields`` is an optional list of field names. If provided, return only the + named. + + ``exclude`` is an optional list of field names. If provided, exclude the + named from the returned dict, even if they are listed in the ``fields`` + argument. + """ + opts = instance._meta + data = {} + for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many): + if not getattr(f, 'editable', False): + continue + if fields and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + data[f.name] = f.value_from_object(instance) + return data + + +def apply_limit_choices_to_to_formfield(formfield): + """Apply limit_choices_to to the formfield's queryset if needed.""" + if hasattr(formfield, 'queryset') and hasattr(formfield, 'get_limit_choices_to'): + limit_choices_to = formfield.get_limit_choices_to() + if limit_choices_to is not None: + formfield.queryset = formfield.queryset.complex_filter(limit_choices_to) + + +def fields_for_model(model, fields=None, exclude=None, widgets=None, + formfield_callback=None, localized_fields=None, + labels=None, help_texts=None, error_messages=None, + field_classes=None, *, apply_limit_choices_to=True): + """ + Return an ``OrderedDict`` containing form fields for the given model. + + ``fields`` is an optional list of field names. If provided, return only the + named fields. + + ``exclude`` is an optional list of field names. If provided, exclude the + named fields from the returned fields, even if they are listed in the + ``fields`` argument. + + ``widgets`` is a dictionary of model field names mapped to a widget. + + ``formfield_callback`` is a callable that takes a model field and returns + a form field. + + ``localized_fields`` is a list of names of fields which should be localized. + + ``labels`` is a dictionary of model field names mapped to a label. + + ``help_texts`` is a dictionary of model field names mapped to a help text. + + ``error_messages`` is a dictionary of model field names mapped to a + dictionary of error messages. + + ``field_classes`` is a dictionary of model field names mapped to a form + field class. + + ``apply_limit_choices_to`` is a boolean indicating if limit_choices_to + should be applied to a field's queryset. + """ + field_list = [] + ignored = [] + opts = model._meta + # Avoid circular import + from django.db.models.fields import Field as ModelField + sortable_private_fields = [f for f in opts.private_fields if isinstance(f, ModelField)] + for f in sorted(chain(opts.concrete_fields, sortable_private_fields, opts.many_to_many)): + if not getattr(f, 'editable', False): + if (fields is not None and f.name in fields and + (exclude is None or f.name not in exclude)): + raise FieldError( + "'%s' cannot be specified for %s model form as it is a non-editable field" % ( + f.name, model.__name__) + ) + continue + if fields is not None and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + + kwargs = {} + if widgets and f.name in widgets: + kwargs['widget'] = widgets[f.name] + if localized_fields == ALL_FIELDS or (localized_fields and f.name in localized_fields): + kwargs['localize'] = True + if labels and f.name in labels: + kwargs['label'] = labels[f.name] + if help_texts and f.name in help_texts: + kwargs['help_text'] = help_texts[f.name] + if error_messages and f.name in error_messages: + kwargs['error_messages'] = error_messages[f.name] + if field_classes and f.name in field_classes: + kwargs['form_class'] = field_classes[f.name] + + if formfield_callback is None: + formfield = f.formfield(**kwargs) + elif not callable(formfield_callback): + raise TypeError('formfield_callback must be a function or callable') + else: + formfield = formfield_callback(f, **kwargs) + + if formfield: + if apply_limit_choices_to: + apply_limit_choices_to_to_formfield(formfield) + field_list.append((f.name, formfield)) + else: + ignored.append(f.name) + field_dict = OrderedDict(field_list) + if fields: + field_dict = OrderedDict( + [(f, field_dict.get(f)) for f in fields + if ((not exclude) or (exclude and f not in exclude)) and (f not in ignored)] + ) + return field_dict + + +class ModelFormOptions: + def __init__(self, options=None): + self.model = getattr(options, 'model', None) + self.fields = getattr(options, 'fields', None) + self.exclude = getattr(options, 'exclude', None) + self.widgets = getattr(options, 'widgets', None) + self.localized_fields = getattr(options, 'localized_fields', None) + self.labels = getattr(options, 'labels', None) + self.help_texts = getattr(options, 'help_texts', None) + self.error_messages = getattr(options, 'error_messages', None) + self.field_classes = getattr(options, 'field_classes', None) + + +class ModelFormMetaclass(DeclarativeFieldsMetaclass): + def __new__(mcs, name, bases, attrs): + base_formfield_callback = None + for b in bases: + if hasattr(b, 'Meta') and hasattr(b.Meta, 'formfield_callback'): + base_formfield_callback = b.Meta.formfield_callback + break + + formfield_callback = attrs.pop('formfield_callback', base_formfield_callback) + + new_class = super(ModelFormMetaclass, mcs).__new__(mcs, name, bases, attrs) + + if bases == (BaseModelForm,): + return new_class + + opts = new_class._meta = ModelFormOptions(getattr(new_class, 'Meta', None)) + + # We check if a string was passed to `fields` or `exclude`, + # which is likely to be a mistake where the user typed ('foo') instead + # of ('foo',) + for opt in ['fields', 'exclude', 'localized_fields']: + value = getattr(opts, opt) + if isinstance(value, str) and value != ALL_FIELDS: + msg = ("%(model)s.Meta.%(opt)s cannot be a string. " + "Did you mean to type: ('%(value)s',)?" % { + 'model': new_class.__name__, + 'opt': opt, + 'value': value, + }) + raise TypeError(msg) + + if opts.model: + # If a model is defined, extract form fields from it. + if opts.fields is None and opts.exclude is None: + raise ImproperlyConfigured( + "Creating a ModelForm without either the 'fields' attribute " + "or the 'exclude' attribute is prohibited; form %s " + "needs updating." % name + ) + + if opts.fields == ALL_FIELDS: + # Sentinel for fields_for_model to indicate "get the list of + # fields from the model" + opts.fields = None + + fields = fields_for_model( + opts.model, opts.fields, opts.exclude, opts.widgets, + formfield_callback, opts.localized_fields, opts.labels, + opts.help_texts, opts.error_messages, opts.field_classes, + # limit_choices_to will be applied during ModelForm.__init__(). + apply_limit_choices_to=False, + ) + + # make sure opts.fields doesn't specify an invalid field + none_model_fields = {k for k, v in fields.items() if not v} + missing_fields = none_model_fields.difference(new_class.declared_fields) + if missing_fields: + message = 'Unknown field(s) (%s) specified for %s' + message = message % (', '.join(missing_fields), + opts.model.__name__) + raise FieldError(message) + # Override default model fields with any custom declared ones + # (plus, include all the other declared fields). + fields.update(new_class.declared_fields) + else: + fields = new_class.declared_fields + + new_class.base_fields = fields + + return new_class + + +class BaseModelForm(BaseForm): + def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, + initial=None, error_class=ErrorList, label_suffix=None, + empty_permitted=False, instance=None, use_required_attribute=None, + renderer=None): + opts = self._meta + if opts.model is None: + raise ValueError('ModelForm has no model class specified.') + if instance is None: + # if we didn't get an instance, instantiate a new one + self.instance = opts.model() + object_data = {} + else: + self.instance = instance + object_data = model_to_dict(instance, opts.fields, opts.exclude) + # if initial was provided, it should override the values from instance + if initial is not None: + object_data.update(initial) + # self._validate_unique will be set to True by BaseModelForm.clean(). + # It is False by default so overriding self.clean() and failing to call + # super will stop validate_unique from being called. + self._validate_unique = False + super().__init__( + data, files, auto_id, prefix, object_data, error_class, + label_suffix, empty_permitted, use_required_attribute=use_required_attribute, + renderer=renderer, + ) + for formfield in self.fields.values(): + apply_limit_choices_to_to_formfield(formfield) + + def _get_validation_exclusions(self): + """ + For backwards-compatibility, exclude several types of fields from model + validation. See tickets #12507, #12521, #12553. + """ + exclude = [] + # Build up a list of fields that should be excluded from model field + # validation and unique checks. + for f in self.instance._meta.fields: + field = f.name + # Exclude fields that aren't on the form. The developer may be + # adding these values to the model after form validation. + if field not in self.fields: + exclude.append(f.name) + + # Don't perform model validation on fields that were defined + # manually on the form and excluded via the ModelForm's Meta + # class. See #12901. + elif self._meta.fields and field not in self._meta.fields: + exclude.append(f.name) + elif self._meta.exclude and field in self._meta.exclude: + exclude.append(f.name) + + # Exclude fields that failed form validation. There's no need for + # the model fields to validate them as well. + elif field in self._errors: + exclude.append(f.name) + + # Exclude empty fields that are not required by the form, if the + # underlying model field is required. This keeps the model field + # from raising a required error. Note: don't exclude the field from + # validation if the model field allows blanks. If it does, the blank + # value may be included in a unique check, so cannot be excluded + # from validation. + else: + form_field = self.fields[field] + field_value = self.cleaned_data.get(field) + if not f.blank and not form_field.required and field_value in form_field.empty_values: + exclude.append(f.name) + return exclude + + def clean(self): + self._validate_unique = True + return self.cleaned_data + + def _update_errors(self, errors): + # Override any validation error messages defined at the model level + # with those defined at the form level. + opts = self._meta + + # Allow the model generated by construct_instance() to raise + # ValidationError and have them handled in the same way as others. + if hasattr(errors, 'error_dict'): + error_dict = errors.error_dict + else: + error_dict = {NON_FIELD_ERRORS: errors} + + for field, messages in error_dict.items(): + if (field == NON_FIELD_ERRORS and opts.error_messages and + NON_FIELD_ERRORS in opts.error_messages): + error_messages = opts.error_messages[NON_FIELD_ERRORS] + elif field in self.fields: + error_messages = self.fields[field].error_messages + else: + continue + + for message in messages: + if (isinstance(message, ValidationError) and + message.code in error_messages): + message.message = error_messages[message.code] + + self.add_error(None, errors) + + def _post_clean(self): + opts = self._meta + + exclude = self._get_validation_exclusions() + + # Foreign Keys being used to represent inline relationships + # are excluded from basic field value validation. This is for two + # reasons: firstly, the value may not be supplied (#12507; the + # case of providing new values to the admin); secondly the + # object being referred to may not yet fully exist (#12749). + # However, these fields *must* be included in uniqueness checks, + # so this can't be part of _get_validation_exclusions(). + for name, field in self.fields.items(): + if isinstance(field, InlineForeignKeyField): + exclude.append(name) + + try: + self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude) + except ValidationError as e: + self._update_errors(e) + + try: + self.instance.full_clean(exclude=exclude, validate_unique=False) + except ValidationError as e: + self._update_errors(e) + + # Validate uniqueness if needed. + if self._validate_unique: + self.validate_unique() + + def validate_unique(self): + """ + Call the instance's validate_unique() method and update the form's + validation errors if any were raised. + """ + exclude = self._get_validation_exclusions() + try: + self.instance.validate_unique(exclude=exclude) + except ValidationError as e: + self._update_errors(e) + + def _save_m2m(self): + """ + Save the many-to-many fields and generic relations for this form. + """ + cleaned_data = self.cleaned_data + exclude = self._meta.exclude + fields = self._meta.fields + opts = self.instance._meta + # Note that for historical reasons we want to include also + # private_fields here. (GenericRelation was previously a fake + # m2m field). + for f in chain(opts.many_to_many, opts.private_fields): + if not hasattr(f, 'save_form_data'): + continue + if fields and f.name not in fields: + continue + if exclude and f.name in exclude: + continue + if f.name in cleaned_data: + f.save_form_data(self.instance, cleaned_data[f.name]) + + def save(self, commit=True): + """ + Save this form's self.instance object if commit=True. Otherwise, add + a save_m2m() method to the form which can be called after the instance + is saved manually at a later time. Return the model instance. + """ + if self.errors: + raise ValueError( + "The %s could not be %s because the data didn't validate." % ( + self.instance._meta.object_name, + 'created' if self.instance._state.adding else 'changed', + ) + ) + if commit: + # If committing, save the instance and the m2m data immediately. + self.instance.save() + self._save_m2m() + else: + # If not committing, add a method to the form to allow deferred + # saving of m2m data. + self.save_m2m = self._save_m2m + return self.instance + + save.alters_data = True + + +class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass): + pass + + +def modelform_factory(model, form=ModelForm, fields=None, exclude=None, + formfield_callback=None, widgets=None, localized_fields=None, + labels=None, help_texts=None, error_messages=None, + field_classes=None): + """ + Return a ModelForm containing form fields for the given model. + + ``fields`` is an optional list of field names. If provided, include only + the named fields in the returned fields. If omitted or '__all__', use all + fields. + + ``exclude`` is an optional list of field names. If provided, exclude the + named fields from the returned fields, even if they are listed in the + ``fields`` argument. + + ``widgets`` is a dictionary of model field names mapped to a widget. + + ``localized_fields`` is a list of names of fields which should be localized. + + ``formfield_callback`` is a callable that takes a model field and returns + a form field. + + ``labels`` is a dictionary of model field names mapped to a label. + + ``help_texts`` is a dictionary of model field names mapped to a help text. + + ``error_messages`` is a dictionary of model field names mapped to a + dictionary of error messages. + + ``field_classes`` is a dictionary of model field names mapped to a form + field class. + """ + # Create the inner Meta class. FIXME: ideally, we should be able to + # construct a ModelForm without creating and passing in a temporary + # inner class. + + # Build up a list of attributes that the Meta object will have. + attrs = {'model': model} + if fields is not None: + attrs['fields'] = fields + if exclude is not None: + attrs['exclude'] = exclude + if widgets is not None: + attrs['widgets'] = widgets + if localized_fields is not None: + attrs['localized_fields'] = localized_fields + if labels is not None: + attrs['labels'] = labels + if help_texts is not None: + attrs['help_texts'] = help_texts + if error_messages is not None: + attrs['error_messages'] = error_messages + if field_classes is not None: + attrs['field_classes'] = field_classes + + # If parent form class already has an inner Meta, the Meta we're + # creating needs to inherit from the parent's inner meta. + bases = (form.Meta,) if hasattr(form, 'Meta') else () + Meta = type('Meta', bases, attrs) + if formfield_callback: + Meta.formfield_callback = staticmethod(formfield_callback) + # Give this new form class a reasonable name. + class_name = model.__name__ + 'Form' + + # Class attributes for the new form class. + form_class_attrs = { + 'Meta': Meta, + 'formfield_callback': formfield_callback + } + + if (getattr(Meta, 'fields', None) is None and + getattr(Meta, 'exclude', None) is None): + raise ImproperlyConfigured( + "Calling modelform_factory without defining 'fields' or " + "'exclude' explicitly is prohibited." + ) + + # Instantiate type(form) in order to use the same metaclass as form. + return type(form)(class_name, (form,), form_class_attrs) + + +# ModelFormSets ############################################################## + +class BaseModelFormSet(BaseFormSet): + """ + A ``FormSet`` for editing a queryset and/or adding new objects to it. + """ + model = None + + # Set of fields that must be unique among forms of this set. + unique_fields = set() + + def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, + queryset=None, *, initial=None, **kwargs): + self.queryset = queryset + self.initial_extra = initial + super().__init__(**{'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix, **kwargs}) + + def initial_form_count(self): + """Return the number of forms that are required in this FormSet.""" + if not (self.data or self.files): + return len(self.get_queryset()) + return super().initial_form_count() + + def _existing_object(self, pk): + if not hasattr(self, '_object_dict'): + self._object_dict = {o.pk: o for o in self.get_queryset()} + return self._object_dict.get(pk) + + def _get_to_python(self, field): + """ + If the field is a related field, fetch the concrete field's (that + is, the ultimate pointed-to field's) to_python. + """ + while field.remote_field is not None: + field = field.remote_field.get_related_field() + return field.to_python + + def _construct_form(self, i, **kwargs): + pk_required = i < self.initial_form_count() + if pk_required: + if self.is_bound: + pk_key = '%s-%s' % (self.add_prefix(i), self.model._meta.pk.name) + try: + pk = self.data[pk_key] + except KeyError: + # The primary key is missing. The user may have tampered + # with POST data. + pass + else: + to_python = self._get_to_python(self.model._meta.pk) + try: + pk = to_python(pk) + except ValidationError: + # The primary key exists but is an invalid value. The + # user may have tampered with POST data. + pass + else: + kwargs['instance'] = self._existing_object(pk) + else: + kwargs['instance'] = self.get_queryset()[i] + elif self.initial_extra: + # Set initial values for extra forms + try: + kwargs['initial'] = self.initial_extra[i - self.initial_form_count()] + except IndexError: + pass + form = super()._construct_form(i, **kwargs) + if pk_required: + form.fields[self.model._meta.pk.name].required = True + return form + + def get_queryset(self): + if not hasattr(self, '_queryset'): + if self.queryset is not None: + qs = self.queryset + else: + qs = self.model._default_manager.get_queryset() + + # If the queryset isn't already ordered we need to add an + # artificial ordering here to make sure that all formsets + # constructed from this queryset have the same form order. + if not qs.ordered: + qs = qs.order_by(self.model._meta.pk.name) + + # Removed queryset limiting here. As per discussion re: #13023 + # on django-dev, max_num should not prevent existing + # related objects/inlines from being displayed. + self._queryset = qs + return self._queryset + + def save_new(self, form, commit=True): + """Save and return a new model instance for the given form.""" + return form.save(commit=commit) + + def save_existing(self, form, instance, commit=True): + """Save and return an existing model instance for the given form.""" + return form.save(commit=commit) + + def delete_existing(self, obj, commit=True): + """Deletes an existing model instance.""" + if commit: + obj.delete() + + def save(self, commit=True): + """ + Save model instances for every form, adding and changing instances + as necessary, and return the list of instances. + """ + if not commit: + self.saved_forms = [] + + def save_m2m(): + for form in self.saved_forms: + form.save_m2m() + self.save_m2m = save_m2m + return self.save_existing_objects(commit) + self.save_new_objects(commit) + + save.alters_data = True + + def clean(self): + self.validate_unique() + + def validate_unique(self): + # Collect unique_checks and date_checks to run from all the forms. + all_unique_checks = set() + all_date_checks = set() + forms_to_delete = self.deleted_forms + valid_forms = [form for form in self.forms if form.is_valid() and form not in forms_to_delete] + for form in valid_forms: + exclude = form._get_validation_exclusions() + unique_checks, date_checks = form.instance._get_unique_checks(exclude=exclude) + all_unique_checks.update(unique_checks) + all_date_checks.update(date_checks) + + errors = [] + # Do each of the unique checks (unique and unique_together) + for uclass, unique_check in all_unique_checks: + seen_data = set() + for form in valid_forms: + # Get the data for the set of fields that must be unique among the forms. + row_data = ( + field if field in self.unique_fields else form.cleaned_data[field] + for field in unique_check if field in form.cleaned_data + ) + # Reduce Model instances to their primary key values + row_data = tuple(d._get_pk_val() if hasattr(d, '_get_pk_val') else d + for d in row_data) + if row_data and None not in row_data: + # if we've already seen it then we have a uniqueness failure + if row_data in seen_data: + # poke error messages into the right places and mark + # the form as invalid + errors.append(self.get_unique_error_message(unique_check)) + form._errors[NON_FIELD_ERRORS] = self.error_class([self.get_form_error()]) + # remove the data from the cleaned_data dict since it was invalid + for field in unique_check: + if field in form.cleaned_data: + del form.cleaned_data[field] + # mark the data as seen + seen_data.add(row_data) + # iterate over each of the date checks now + for date_check in all_date_checks: + seen_data = set() + uclass, lookup, field, unique_for = date_check + for form in valid_forms: + # see if we have data for both fields + if (form.cleaned_data and form.cleaned_data[field] is not None and + form.cleaned_data[unique_for] is not None): + # if it's a date lookup we need to get the data for all the fields + if lookup == 'date': + date = form.cleaned_data[unique_for] + date_data = (date.year, date.month, date.day) + # otherwise it's just the attribute on the date/datetime + # object + else: + date_data = (getattr(form.cleaned_data[unique_for], lookup),) + data = (form.cleaned_data[field],) + date_data + # if we've already seen it then we have a uniqueness failure + if data in seen_data: + # poke error messages into the right places and mark + # the form as invalid + errors.append(self.get_date_error_message(date_check)) + form._errors[NON_FIELD_ERRORS] = self.error_class([self.get_form_error()]) + # remove the data from the cleaned_data dict since it was invalid + del form.cleaned_data[field] + # mark the data as seen + seen_data.add(data) + + if errors: + raise ValidationError(errors) + + def get_unique_error_message(self, unique_check): + if len(unique_check) == 1: + return gettext("Please correct the duplicate data for %(field)s.") % { + "field": unique_check[0], + } + else: + return gettext("Please correct the duplicate data for %(field)s, which must be unique.") % { + "field": get_text_list(unique_check, _("and")), + } + + def get_date_error_message(self, date_check): + return gettext( + "Please correct the duplicate data for %(field_name)s " + "which must be unique for the %(lookup)s in %(date_field)s." + ) % { + 'field_name': date_check[2], + 'date_field': date_check[3], + 'lookup': str(date_check[1]), + } + + def get_form_error(self): + return gettext("Please correct the duplicate values below.") + + def save_existing_objects(self, commit=True): + self.changed_objects = [] + self.deleted_objects = [] + if not self.initial_forms: + return [] + + saved_instances = [] + forms_to_delete = self.deleted_forms + for form in self.initial_forms: + obj = form.instance + # If the pk is None, it means either: + # 1. The object is an unexpected empty model, created by invalid + # POST data such as an object outside the formset's queryset. + # 2. The object was already deleted from the database. + if obj.pk is None: + continue + if form in forms_to_delete: + self.deleted_objects.append(obj) + self.delete_existing(obj, commit=commit) + elif form.has_changed(): + self.changed_objects.append((obj, form.changed_data)) + saved_instances.append(self.save_existing(form, obj, commit=commit)) + if not commit: + self.saved_forms.append(form) + return saved_instances + + def save_new_objects(self, commit=True): + self.new_objects = [] + for form in self.extra_forms: + if not form.has_changed(): + continue + # If someone has marked an add form for deletion, don't save the + # object. + if self.can_delete and self._should_delete_form(form): + continue + self.new_objects.append(self.save_new(form, commit=commit)) + if not commit: + self.saved_forms.append(form) + return self.new_objects + + def add_fields(self, form, index): + """Add a hidden field for the object's primary key.""" + from django.db.models import AutoField, OneToOneField, ForeignKey + self._pk_field = pk = self.model._meta.pk + # If a pk isn't editable, then it won't be on the form, so we need to + # add it here so we can tell which object is which when we get the + # data back. Generally, pk.editable should be false, but for some + # reason, auto_created pk fields and AutoField's editable attribute is + # True, so check for that as well. + + def pk_is_not_editable(pk): + return ( + (not pk.editable) or (pk.auto_created or isinstance(pk, AutoField)) or ( + pk.remote_field and pk.remote_field.parent_link and + pk_is_not_editable(pk.remote_field.model._meta.pk) + ) + ) + if pk_is_not_editable(pk) or pk.name not in form.fields: + if form.is_bound: + # If we're adding the related instance, ignore its primary key + # as it could be an auto-generated default which isn't actually + # in the database. + pk_value = None if form.instance._state.adding else form.instance.pk + else: + try: + if index is not None: + pk_value = self.get_queryset()[index].pk + else: + pk_value = None + except IndexError: + pk_value = None + if isinstance(pk, (ForeignKey, OneToOneField)): + qs = pk.remote_field.model._default_manager.get_queryset() + else: + qs = self.model._default_manager.get_queryset() + qs = qs.using(form.instance._state.db) + if form._meta.widgets: + widget = form._meta.widgets.get(self._pk_field.name, HiddenInput) + else: + widget = HiddenInput + form.fields[self._pk_field.name] = ModelChoiceField(qs, initial=pk_value, required=False, widget=widget) + super().add_fields(form, index) + + +def modelformset_factory(model, form=ModelForm, formfield_callback=None, + formset=BaseModelFormSet, extra=1, can_delete=False, + can_order=False, max_num=None, fields=None, exclude=None, + widgets=None, validate_max=False, localized_fields=None, + labels=None, help_texts=None, error_messages=None, + min_num=None, validate_min=False, field_classes=None): + """Return a FormSet class for the given Django model class.""" + meta = getattr(form, 'Meta', None) + if (getattr(meta, 'fields', fields) is None and + getattr(meta, 'exclude', exclude) is None): + raise ImproperlyConfigured( + "Calling modelformset_factory without defining 'fields' or " + "'exclude' explicitly is prohibited." + ) + + form = modelform_factory(model, form=form, fields=fields, exclude=exclude, + formfield_callback=formfield_callback, + widgets=widgets, localized_fields=localized_fields, + labels=labels, help_texts=help_texts, + error_messages=error_messages, field_classes=field_classes) + FormSet = formset_factory(form, formset, extra=extra, min_num=min_num, max_num=max_num, + can_order=can_order, can_delete=can_delete, + validate_min=validate_min, validate_max=validate_max) + FormSet.model = model + return FormSet + + +# InlineFormSets ############################################################# + +class BaseInlineFormSet(BaseModelFormSet): + """A formset for child objects related to a parent.""" + def __init__(self, data=None, files=None, instance=None, + save_as_new=False, prefix=None, queryset=None, **kwargs): + if instance is None: + self.instance = self.fk.remote_field.model() + else: + self.instance = instance + self.save_as_new = save_as_new + if queryset is None: + queryset = self.model._default_manager + if self.instance.pk is not None: + qs = queryset.filter(**{self.fk.name: self.instance}) + else: + qs = queryset.none() + self.unique_fields = {self.fk.name} + super().__init__(data, files, prefix=prefix, queryset=qs, **kwargs) + + # Add the generated field to form._meta.fields if it's defined to make + # sure validation isn't skipped on that field. + if self.form._meta.fields and self.fk.name not in self.form._meta.fields: + if isinstance(self.form._meta.fields, tuple): + self.form._meta.fields = list(self.form._meta.fields) + self.form._meta.fields.append(self.fk.name) + + def initial_form_count(self): + if self.save_as_new: + return 0 + return super().initial_form_count() + + def _construct_form(self, i, **kwargs): + form = super()._construct_form(i, **kwargs) + if self.save_as_new: + mutable = getattr(form.data, '_mutable', None) + # Allow modifying an immutable QueryDict. + if mutable is not None: + form.data._mutable = True + # Remove the primary key from the form's data, we are only + # creating new instances + form.data[form.add_prefix(self._pk_field.name)] = None + # Remove the foreign key from the form's data + form.data[form.add_prefix(self.fk.name)] = None + if mutable is not None: + form.data._mutable = mutable + + # Set the fk value here so that the form can do its validation. + fk_value = self.instance.pk + if self.fk.remote_field.field_name != self.fk.remote_field.model._meta.pk.name: + fk_value = getattr(self.instance, self.fk.remote_field.field_name) + fk_value = getattr(fk_value, 'pk', fk_value) + setattr(form.instance, self.fk.get_attname(), fk_value) + return form + + @classmethod + def get_default_prefix(cls): + return cls.fk.remote_field.get_accessor_name(model=cls.model).replace('+', '') + + def save_new(self, form, commit=True): + # Ensure the latest copy of the related instance is present on each + # form (it may have been saved after the formset was originally + # instantiated). + setattr(form.instance, self.fk.name, self.instance) + # Use commit=False so we can assign the parent key afterwards, then + # save the object. + obj = form.save(commit=False) + pk_value = getattr(self.instance, self.fk.remote_field.field_name) + setattr(obj, self.fk.get_attname(), getattr(pk_value, 'pk', pk_value)) + if commit: + obj.save() + # form.save_m2m() can be called via the formset later on if commit=False + if commit and hasattr(form, 'save_m2m'): + form.save_m2m() + return obj + + def add_fields(self, form, index): + super().add_fields(form, index) + if self._pk_field == self.fk: + name = self._pk_field.name + kwargs = {'pk_field': True} + else: + # The foreign key field might not be on the form, so we poke at the + # Model field to get the label, since we need that for error messages. + name = self.fk.name + kwargs = { + 'label': getattr(form.fields.get(name), 'label', capfirst(self.fk.verbose_name)) + } + if self.fk.remote_field.field_name != self.fk.remote_field.model._meta.pk.name: + kwargs['to_field'] = self.fk.remote_field.field_name + + # If we're adding a new object, ignore a parent's auto-generated key + # as it will be regenerated on the save request. + if self.instance._state.adding: + if kwargs.get('to_field') is not None: + to_field = self.instance._meta.get_field(kwargs['to_field']) + else: + to_field = self.instance._meta.pk + if to_field.has_default(): + setattr(self.instance, to_field.attname, None) + + form.fields[name] = InlineForeignKeyField(self.instance, **kwargs) + + def get_unique_error_message(self, unique_check): + unique_check = [field for field in unique_check if field != self.fk.name] + return super().get_unique_error_message(unique_check) + + +def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False): + """ + Find and return the ForeignKey from model to parent if there is one + (return None if can_fail is True and no such field exists). If fk_name is + provided, assume it is the name of the ForeignKey field. Unless can_fail is + True, raise an exception if there isn't a ForeignKey from model to + parent_model. + """ + # avoid circular import + from django.db.models import ForeignKey + opts = model._meta + if fk_name: + fks_to_parent = [f for f in opts.fields if f.name == fk_name] + if len(fks_to_parent) == 1: + fk = fks_to_parent[0] + if not isinstance(fk, ForeignKey) or \ + (fk.remote_field.model != parent_model and + fk.remote_field.model not in parent_model._meta.get_parent_list()): + raise ValueError( + "fk_name '%s' is not a ForeignKey to '%s'." % (fk_name, parent_model._meta.label) + ) + elif not fks_to_parent: + raise ValueError( + "'%s' has no field named '%s'." % (model._meta.label, fk_name) + ) + else: + # Try to discover what the ForeignKey from model to parent_model is + fks_to_parent = [ + f for f in opts.fields + if isinstance(f, ForeignKey) and ( + f.remote_field.model == parent_model or + f.remote_field.model in parent_model._meta.get_parent_list() + ) + ] + if len(fks_to_parent) == 1: + fk = fks_to_parent[0] + elif not fks_to_parent: + if can_fail: + return + raise ValueError( + "'%s' has no ForeignKey to '%s'." % ( + model._meta.label, + parent_model._meta.label, + ) + ) + else: + raise ValueError( + "'%s' has more than one ForeignKey to '%s'." % ( + model._meta.label, + parent_model._meta.label, + ) + ) + return fk + + +def inlineformset_factory(parent_model, model, form=ModelForm, + formset=BaseInlineFormSet, fk_name=None, + fields=None, exclude=None, extra=3, can_order=False, + can_delete=True, max_num=None, formfield_callback=None, + widgets=None, validate_max=False, localized_fields=None, + labels=None, help_texts=None, error_messages=None, + min_num=None, validate_min=False, field_classes=None): + """ + Return an ``InlineFormSet`` for the given kwargs. + + ``fk_name`` must be provided if ``model`` has more than one ``ForeignKey`` + to ``parent_model``. + """ + fk = _get_foreign_key(parent_model, model, fk_name=fk_name) + # enforce a max_num=1 when the foreign key to the parent model is unique. + if fk.unique: + max_num = 1 + kwargs = { + 'form': form, + 'formfield_callback': formfield_callback, + 'formset': formset, + 'extra': extra, + 'can_delete': can_delete, + 'can_order': can_order, + 'fields': fields, + 'exclude': exclude, + 'min_num': min_num, + 'max_num': max_num, + 'widgets': widgets, + 'validate_min': validate_min, + 'validate_max': validate_max, + 'localized_fields': localized_fields, + 'labels': labels, + 'help_texts': help_texts, + 'error_messages': error_messages, + 'field_classes': field_classes, + } + FormSet = modelformset_factory(model, **kwargs) + FormSet.fk = fk + return FormSet + + +# Fields ##################################################################### + +class InlineForeignKeyField(Field): + """ + A basic integer field that deals with validating the given value to a + given parent instance in an inline. + """ + widget = HiddenInput + default_error_messages = { + 'invalid_choice': _('The inline value did not match the parent instance.'), + } + + def __init__(self, parent_instance, *args, pk_field=False, to_field=None, **kwargs): + self.parent_instance = parent_instance + self.pk_field = pk_field + self.to_field = to_field + if self.parent_instance is not None: + if self.to_field: + kwargs["initial"] = getattr(self.parent_instance, self.to_field) + else: + kwargs["initial"] = self.parent_instance.pk + kwargs["required"] = False + super().__init__(*args, **kwargs) + + def clean(self, value): + if value in self.empty_values: + if self.pk_field: + return None + # if there is no value act as we did before. + return self.parent_instance + # ensure the we compare the values as equal types. + if self.to_field: + orig = getattr(self.parent_instance, self.to_field) + else: + orig = self.parent_instance.pk + if str(value) != str(orig): + raise ValidationError(self.error_messages['invalid_choice'], code='invalid_choice') + return self.parent_instance + + def has_changed(self, initial, data): + return False + + +class ModelChoiceIterator: + def __init__(self, field): + self.field = field + self.queryset = field.queryset + + def __iter__(self): + if self.field.empty_label is not None: + yield ("", self.field.empty_label) + queryset = self.queryset + # Can't use iterator() when queryset uses prefetch_related() + if not queryset._prefetch_related_lookups: + queryset = queryset.iterator() + for obj in queryset: + yield self.choice(obj) + + def __len__(self): + # count() adds a query but uses less memory since the QuerySet results + # won't be cached. In most cases, the choices will only be iterated on, + # and __len__() won't be called. + return self.queryset.count() + (1 if self.field.empty_label is not None else 0) + + def __bool__(self): + return self.field.empty_label is not None or self.queryset.exists() + + def choice(self, obj): + return (self.field.prepare_value(obj), self.field.label_from_instance(obj)) + + +class ModelChoiceField(ChoiceField): + """A ChoiceField whose choices are a model QuerySet.""" + # This class is a subclass of ChoiceField for purity, but it doesn't + # actually use any of ChoiceField's implementation. + default_error_messages = { + 'invalid_choice': _('Select a valid choice. That choice is not one of' + ' the available choices.'), + } + iterator = ModelChoiceIterator + + def __init__(self, queryset, *, empty_label="---------", + required=True, widget=None, label=None, initial=None, + help_text='', to_field_name=None, limit_choices_to=None, + **kwargs): + if required and (initial is not None): + self.empty_label = None + else: + self.empty_label = empty_label + + # Call Field instead of ChoiceField __init__() because we don't need + # ChoiceField.__init__(). + Field.__init__( + self, required=required, widget=widget, label=label, + initial=initial, help_text=help_text, **kwargs + ) + self.queryset = queryset + self.limit_choices_to = limit_choices_to # limit the queryset later. + self.to_field_name = to_field_name + + def get_limit_choices_to(self): + """ + Return ``limit_choices_to`` for this form field. + + If it is a callable, invoke it and return the result. + """ + if callable(self.limit_choices_to): + return self.limit_choices_to() + return self.limit_choices_to + + def __deepcopy__(self, memo): + result = super(ChoiceField, self).__deepcopy__(memo) + # Need to force a new ModelChoiceIterator to be created, bug #11183 + if self.queryset is not None: + result.queryset = self.queryset.all() + return result + + def _get_queryset(self): + return self._queryset + + def _set_queryset(self, queryset): + self._queryset = None if queryset is None else queryset.all() + self.widget.choices = self.choices + + queryset = property(_get_queryset, _set_queryset) + + # this method will be used to create object labels by the QuerySetIterator. + # Override it to customize the label. + def label_from_instance(self, obj): + """ + Convert objects into strings and generate the labels for the choices + presented by this object. Subclasses can override this method to + customize the display of the choices. + """ + return str(obj) + + def _get_choices(self): + # If self._choices is set, then somebody must have manually set + # the property self.choices. In this case, just return self._choices. + if hasattr(self, '_choices'): + return self._choices + + # Otherwise, execute the QuerySet in self.queryset to determine the + # choices dynamically. Return a fresh ModelChoiceIterator that has not been + # consumed. Note that we're instantiating a new ModelChoiceIterator *each* + # time _get_choices() is called (and, thus, each time self.choices is + # accessed) so that we can ensure the QuerySet has not been consumed. This + # construct might look complicated but it allows for lazy evaluation of + # the queryset. + return self.iterator(self) + + choices = property(_get_choices, ChoiceField._set_choices) + + def prepare_value(self, value): + if hasattr(value, '_meta'): + if self.to_field_name: + return value.serializable_value(self.to_field_name) + else: + return value.pk + return super().prepare_value(value) + + def to_python(self, value): + if value in self.empty_values: + return None + try: + key = self.to_field_name or 'pk' + value = self.queryset.get(**{key: value}) + except (ValueError, TypeError, self.queryset.model.DoesNotExist): + raise ValidationError(self.error_messages['invalid_choice'], code='invalid_choice') + return value + + def validate(self, value): + return Field.validate(self, value) + + def has_changed(self, initial, data): + if self.disabled: + return False + initial_value = initial if initial is not None else '' + data_value = data if data is not None else '' + return str(self.prepare_value(initial_value)) != str(data_value) + + +class ModelMultipleChoiceField(ModelChoiceField): + """A MultipleChoiceField whose choices are a model QuerySet.""" + widget = SelectMultiple + hidden_widget = MultipleHiddenInput + default_error_messages = { + 'list': _('Enter a list of values.'), + 'invalid_choice': _('Select a valid choice. %(value)s is not one of the' + ' available choices.'), + 'invalid_pk_value': _('"%(pk)s" is not a valid value.') + } + + def __init__(self, queryset, **kwargs): + super().__init__(queryset, empty_label=None, **kwargs) + + def to_python(self, value): + if not value: + return [] + return list(self._check_values(value)) + + def clean(self, value): + value = self.prepare_value(value) + if self.required and not value: + raise ValidationError(self.error_messages['required'], code='required') + elif not self.required and not value: + return self.queryset.none() + if not isinstance(value, (list, tuple)): + raise ValidationError(self.error_messages['list'], code='list') + qs = self._check_values(value) + # Since this overrides the inherited ModelChoiceField.clean + # we run custom validators here + self.run_validators(value) + return qs + + def _check_values(self, value): + """ + Given a list of possible PK values, return a QuerySet of the + corresponding objects. Raise a ValidationError if a given value is + invalid (not a valid PK, not in the queryset, etc.) + """ + key = self.to_field_name or 'pk' + # deduplicate given values to avoid creating many querysets or + # requiring the database backend deduplicate efficiently. + try: + value = frozenset(value) + except TypeError: + # list of lists isn't hashable, for example + raise ValidationError( + self.error_messages['list'], + code='list', + ) + for pk in value: + try: + self.queryset.filter(**{key: pk}) + except (ValueError, TypeError): + raise ValidationError( + self.error_messages['invalid_pk_value'], + code='invalid_pk_value', + params={'pk': pk}, + ) + qs = self.queryset.filter(**{'%s__in' % key: value}) + pks = {str(getattr(o, key)) for o in qs} + for val in value: + if str(val) not in pks: + raise ValidationError( + self.error_messages['invalid_choice'], + code='invalid_choice', + params={'value': val}, + ) + return qs + + def prepare_value(self, value): + if (hasattr(value, '__iter__') and + not isinstance(value, str) and + not hasattr(value, '_meta')): + prepare_value = super().prepare_value + return [prepare_value(v) for v in value] + return super().prepare_value(value) + + def has_changed(self, initial, data): + if self.disabled: + return False + if initial is None: + initial = [] + if data is None: + data = [] + if len(initial) != len(data): + return True + initial_set = {str(value) for value in self.prepare_value(initial)} + data_set = {str(value) for value in data} + return data_set != initial_set + + +def modelform_defines_fields(form_class): + return hasattr(form_class, '_meta') and ( + form_class._meta.fields is not None or + form_class._meta.exclude is not None + ) diff --git a/env/lib/python3.5/site-packages/django/forms/renderers.py b/env/lib/python3.5/site-packages/django/forms/renderers.py new file mode 100644 index 0000000..9fb695b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/renderers.py @@ -0,0 +1,70 @@ +import functools +from pathlib import Path + +from django.conf import settings +from django.template.backends.django import DjangoTemplates +from django.template.loader import get_template +from django.utils.functional import cached_property +from django.utils.module_loading import import_string + +try: + from django.template.backends.jinja2 import Jinja2 +except ImportError: + def Jinja2(params): + raise ImportError("jinja2 isn't installed") + +ROOT = Path(__file__).parent + + +@functools.lru_cache() +def get_default_renderer(): + renderer_class = import_string(settings.FORM_RENDERER) + return renderer_class() + + +class BaseRenderer: + def get_template(self, template_name): + raise NotImplementedError('subclasses must implement get_template()') + + def render(self, template_name, context, request=None): + template = self.get_template(template_name) + return template.render(context, request=request).strip() + + +class EngineMixin: + def get_template(self, template_name): + return self.engine.get_template(template_name) + + @cached_property + def engine(self): + return self.backend({ + 'APP_DIRS': True, + 'DIRS': [str(ROOT / self.backend.app_dirname)], + 'NAME': 'djangoforms', + 'OPTIONS': {}, + }) + + +class DjangoTemplates(EngineMixin, BaseRenderer): + """ + Load Django templates from the built-in widget templates in + django/forms/templates and from apps' 'templates' directory. + """ + backend = DjangoTemplates + + +class Jinja2(EngineMixin, BaseRenderer): + """ + Load Jinja2 templates from the built-in widget templates in + django/forms/jinja2 and from apps' 'jinja2' directory. + """ + backend = Jinja2 + + +class TemplatesSetting(BaseRenderer): + """ + Load templates using template.loader.get_template() which is configured + based on settings.TEMPLATES. + """ + def get_template(self, template_name): + return get_template(template_name) diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/attrs.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/attrs.html new file mode 100644 index 0000000..7a5592a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/attrs.html @@ -0,0 +1 @@ +{% for name, value in widget.attrs.items %}{% if value is not False %} {{ name }}{% if value is not True %}="{{ value|stringformat:'s' }}"{% endif %}{% endif %}{% endfor %} \ No newline at end of file diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html new file mode 100644 index 0000000..bb9acba --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_option.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input_option.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html new file mode 100644 index 0000000..780899a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/checkbox_select.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html new file mode 100644 index 0000000..9e76435 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/clearable_file_input.html @@ -0,0 +1,5 @@ +{% if widget.is_initial %}{{ widget.initial_text }}: {{ widget.value }}{% if not widget.required %} + +{% endif %}
    +{{ widget.input_text }}:{% endif %} + diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/date.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/date.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/date.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/datetime.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/datetime.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/datetime.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/email.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/email.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/email.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/file.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/file.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/file.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/hidden.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/hidden.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/hidden.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input.html new file mode 100644 index 0000000..9010a92 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input.html @@ -0,0 +1 @@ + diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input_option.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input_option.html new file mode 100644 index 0000000..48cd65b --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/input_option.html @@ -0,0 +1 @@ +{% if widget.wrap_label %}{% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.wrap_label %} {{ widget.label }}{% endif %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html new file mode 100644 index 0000000..b9695de --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_hidden.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiwidget.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html new file mode 100644 index 0000000..0ba9942 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiple_input.html @@ -0,0 +1,5 @@ +{% with id=widget.attrs.id %}{% for group, options, index in widget.optgroups %}{% if group %} +

  • {{ group }}{% endif %}{% for option in options %} +
  • {% include option.template_name with widget=option %}
  • {% endfor %}{% if group %} + {% endif %}{% endfor %} +{% endwith %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html new file mode 100644 index 0000000..7e687a1 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/multiwidget.html @@ -0,0 +1 @@ +{% spaceless %}{% for widget in widget.subwidgets %}{% include widget.template_name %}{% endfor %}{% endspaceless %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/number.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/number.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/number.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/password.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/password.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/password.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio.html new file mode 100644 index 0000000..780899a --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/multiple_input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio_option.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio_option.html new file mode 100644 index 0000000..bb9acba --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/radio_option.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input_option.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select.html new file mode 100644 index 0000000..4d1f6b0 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select.html @@ -0,0 +1,5 @@ + diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_date.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_date.html new file mode 100644 index 0000000..32fda82 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_date.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_option.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_option.html new file mode 100644 index 0000000..8d31961 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/select_option.html @@ -0,0 +1 @@ + diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html new file mode 100644 index 0000000..32fda82 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splitdatetime.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html new file mode 100644 index 0000000..32fda82 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/splithiddendatetime.html @@ -0,0 +1 @@ +{% include 'django/forms/widgets/multiwidget.html' %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/text.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/text.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/text.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/textarea.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/textarea.html new file mode 100644 index 0000000..b86766c --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/textarea.html @@ -0,0 +1,2 @@ + diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/time.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/time.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/time.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/url.html b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/url.html new file mode 100644 index 0000000..08b1e61 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/templates/django/forms/widgets/url.html @@ -0,0 +1 @@ +{% include "django/forms/widgets/input.html" %} diff --git a/env/lib/python3.5/site-packages/django/forms/utils.py b/env/lib/python3.5/site-packages/django/forms/utils.py new file mode 100644 index 0000000..73fca86 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/utils.py @@ -0,0 +1,178 @@ +import json +from collections import UserList + +from django.conf import settings +from django.core.exceptions import ValidationError # backwards compatibility +from django.utils import timezone +from django.utils.html import escape, format_html, format_html_join, html_safe +from django.utils.translation import gettext_lazy as _ + + +def pretty_name(name): + """Convert 'first_name' to 'First name'.""" + if not name: + return '' + return name.replace('_', ' ').capitalize() + + +def flatatt(attrs): + """ + Convert a dictionary of attributes to a single string. + The returned string will contain a leading space followed by key="value", + XML-style pairs. In the case of a boolean value, the key will appear + without a value. It is assumed that the keys do not need to be + XML-escaped. If the passed dictionary is empty, then return an empty + string. + + The result is passed through 'mark_safe' (by way of 'format_html_join'). + """ + key_value_attrs = [] + boolean_attrs = [] + for attr, value in attrs.items(): + if isinstance(value, bool): + if value: + boolean_attrs.append((attr,)) + elif value is not None: + key_value_attrs.append((attr, value)) + + return ( + format_html_join('', ' {}="{}"', sorted(key_value_attrs)) + + format_html_join('', ' {}', sorted(boolean_attrs)) + ) + + +@html_safe +class ErrorDict(dict): + """ + A collection of errors that knows how to display itself in various formats. + + The dictionary keys are the field names, and the values are the errors. + """ + def as_data(self): + return {f: e.as_data() for f, e in self.items()} + + def get_json_data(self, escape_html=False): + return {f: e.get_json_data(escape_html) for f, e in self.items()} + + def as_json(self, escape_html=False): + return json.dumps(self.get_json_data(escape_html)) + + def as_ul(self): + if not self: + return '' + return format_html( + '
      {}
    ', + format_html_join('', '
  • {}{}
  • ', self.items()) + ) + + def as_text(self): + output = [] + for field, errors in self.items(): + output.append('* %s' % field) + output.append('\n'.join(' * %s' % e for e in errors)) + return '\n'.join(output) + + def __str__(self): + return self.as_ul() + + +@html_safe +class ErrorList(UserList, list): + """ + A collection of errors that knows how to display itself in various formats. + """ + def __init__(self, initlist=None, error_class=None): + super().__init__(initlist) + + if error_class is None: + self.error_class = 'errorlist' + else: + self.error_class = 'errorlist {}'.format(error_class) + + def as_data(self): + return ValidationError(self.data).error_list + + def get_json_data(self, escape_html=False): + errors = [] + for error in self.as_data(): + message = next(iter(error)) + errors.append({ + 'message': escape(message) if escape_html else message, + 'code': error.code or '', + }) + return errors + + def as_json(self, escape_html=False): + return json.dumps(self.get_json_data(escape_html)) + + def as_ul(self): + if not self.data: + return '' + + return format_html( + '
      {}
    ', + self.error_class, + format_html_join('', '
  • {}
  • ', ((e,) for e in self)) + ) + + def as_text(self): + return '\n'.join('* %s' % e for e in self) + + def __str__(self): + return self.as_ul() + + def __repr__(self): + return repr(list(self)) + + def __contains__(self, item): + return item in list(self) + + def __eq__(self, other): + return list(self) == other + + def __getitem__(self, i): + error = self.data[i] + if isinstance(error, ValidationError): + return next(iter(error)) + return error + + def __reduce_ex__(self, *args, **kwargs): + # The `list` reduce function returns an iterator as the fourth element + # that is normally used for repopulating. Since we only inherit from + # `list` for `isinstance` backward compatibility (Refs #17413) we + # nullify this iterator as it would otherwise result in duplicate + # entries. (Refs #23594) + info = super(UserList, self).__reduce_ex__(*args, **kwargs) + return info[:3] + (None, None) + + +# Utilities for time zone support in DateTimeField et al. + +def from_current_timezone(value): + """ + When time zone support is enabled, convert naive datetimes + entered in the current time zone to aware datetimes. + """ + if settings.USE_TZ and value is not None and timezone.is_naive(value): + current_timezone = timezone.get_current_timezone() + try: + return timezone.make_aware(value, current_timezone) + except Exception as exc: + raise ValidationError( + _('%(datetime)s couldn\'t be interpreted ' + 'in time zone %(current_timezone)s; it ' + 'may be ambiguous or it may not exist.'), + code='ambiguous_timezone', + params={'datetime': value, 'current_timezone': current_timezone} + ) from exc + return value + + +def to_current_timezone(value): + """ + When time zone support is enabled, convert aware datetimes + to naive datetimes in the current time zone for display. + """ + if settings.USE_TZ and value is not None and timezone.is_aware(value): + return timezone.make_naive(value) + return value diff --git a/env/lib/python3.5/site-packages/django/forms/widgets.py b/env/lib/python3.5/site-packages/django/forms/widgets.py new file mode 100644 index 0000000..e4f8957 --- /dev/null +++ b/env/lib/python3.5/site-packages/django/forms/widgets.py @@ -0,0 +1,1059 @@ +""" +HTML Widget classes +""" + +import copy +import datetime +import re +import warnings +from itertools import chain + +from django.conf import settings +from django.forms.utils import to_current_timezone +from django.templatetags.static import static +from django.utils import datetime_safe, formats +from django.utils.dates import MONTHS +from django.utils.formats import get_format +from django.utils.html import format_html, html_safe +from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ + +from .renderers import get_default_renderer + +__all__ = ( + 'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'NumberInput', + 'EmailInput', 'URLInput', 'PasswordInput', 'HiddenInput', + 'MultipleHiddenInput', 'FileInput', 'ClearableFileInput', 'Textarea', + 'DateInput', 'DateTimeInput', 'TimeInput', 'CheckboxInput', 'Select', + 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', + 'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget', + 'SplitHiddenDateTimeWidget', 'SelectDateWidget', +) + +MEDIA_TYPES = ('css', 'js') + + +class MediaOrderConflictWarning(RuntimeWarning): + pass + + +@html_safe +class Media: + def __init__(self, media=None, css=None, js=None): + if media is not None: + css = getattr(media, 'css', {}) + js = getattr(media, 'js', []) + else: + if css is None: + css = {} + if js is None: + js = [] + self._css = css + self._js = js + + def __repr__(self): + return 'Media(css=%r, js=%r)' % (self._css, self._js) + + def __str__(self): + return self.render() + + def render(self): + return mark_safe('\n'.join(chain.from_iterable(getattr(self, 'render_' + name)() for name in MEDIA_TYPES))) + + def render_js(self): + return [ + format_html( + '', + self.absolute_path(path) + ) for path in self._js + ] + + def render_css(self): + # To keep rendering order consistent, we can't just iterate over items(). + # We need to sort the keys, and iterate over the sorted list. + media = sorted(self._css) + return chain.from_iterable([ + format_html( + '', + self.absolute_path(path), medium + ) for path in self._css[medium] + ] for medium in media) + + def absolute_path(self, path): + """ + Given a relative or absolute path to a static asset, return an absolute + path. An absolute path will be returned unchanged while a relative path + will be passed to django.templatetags.static.static(). + """ + if path.startswith(('http://', 'https://', '/')): + return path + return static(path) + + def __getitem__(self, name): + """Return a Media object that only contains media of the given type.""" + if name in MEDIA_TYPES: + return Media(**{str(name): getattr(self, '_' + name)}) + raise KeyError('Unknown media type "%s"' % name) + + @staticmethod + def merge(list_1, list_2): + """ + Merge two lists while trying to keep the relative order of the elements. + Warn if the lists have the same two elements in a different relative + order. + + For static assets it can be important to have them included in the DOM + in a certain order. In JavaScript you may not be able to reference a + global or in CSS you might want to override a style. + """ + # Start with a copy of list_1. + combined_list = list(list_1) + last_insert_index = len(list_1) + # Walk list_2 in reverse, inserting each element into combined_list if + # it doesn't already exist. + for path in reversed(list_2): + try: + # Does path already exist in the list? + index = combined_list.index(path) + except ValueError: + # Add path to combined_list since it doesn't exist. + combined_list.insert(last_insert_index, path) + else: + if index > last_insert_index: + warnings.warn( + 'Detected duplicate Media files in an opposite order:\n' + '%s\n%s' % (combined_list[last_insert_index], combined_list[index]), + MediaOrderConflictWarning, + ) + # path already exists in the list. Update last_insert_index so + # that the following elements are inserted in front of this one. + last_insert_index = index + return combined_list + + def __add__(self, other): + combined = Media() + combined._js = self.merge(self._js, other._js) + combined._css = { + medium: self.merge(self._css.get(medium, []), other._css.get(medium, [])) + for medium in self._css.keys() | other._css.keys() + } + return combined + + +def media_property(cls): + def _media(self): + # Get the media property of the superclass, if it exists + sup_cls = super(cls, self) + try: + base = sup_cls.media + except AttributeError: + base = Media() + + # Get the media definition for this class + definition = getattr(cls, 'Media', None) + if definition: + extend = getattr(definition, 'extend', True) + if extend: + if extend is True: + m = base + else: + m = Media() + for medium in extend: + m = m + base[medium] + return m + Media(definition) + return Media(definition) + return base + return property(_media) + + +class MediaDefiningClass(type): + """ + Metaclass for classes that can have media definitions. + """ + def __new__(mcs, name, bases, attrs): + new_class = super(MediaDefiningClass, mcs).__new__(mcs, name, bases, attrs) + + if 'media' not in attrs: + new_class.media = media_property(new_class) + + return new_class + + +class Widget(metaclass=MediaDefiningClass): + needs_multipart_form = False # Determines does this widget need multipart form + is_localized = False + is_required = False + supports_microseconds = True + + def __init__(self, attrs=None): + self.attrs = {} if attrs is None else attrs.copy() + + def __deepcopy__(self, memo): + obj = copy.copy(self) + obj.attrs = self.attrs.copy() + memo[id(self)] = obj + return obj + + @property + def is_hidden(self): + return self.input_type == 'hidden' if hasattr(self, 'input_type') else False + + def subwidgets(self, name, value, attrs=None): + context = self.get_context(name, value, attrs) + yield context['widget'] + + def format_value(self, value): + """ + Return a value as it should appear when rendered in a template. + """ + if value == '' or value is None: + return None + if self.is_localized: + return formats.localize_input(value) + return str(value) + + def get_context(self, name, value, attrs): + context = {} + context['widget'] = { + 'name': name, + 'is_hidden': self.is_hidden, + 'required': self.is_required, + 'value': self.format_value(value), + 'attrs': self.build_attrs(self.attrs, attrs), + 'template_name': self.template_name, + } + return context + + def render(self, name, value, attrs=None, renderer=None): + """Render the widget as an HTML string.""" + context = self.get_context(name, value, attrs) + return self._render(self.template_name, context, renderer) + + def _render(self, template_name, context, renderer=None): + if renderer is None: + renderer = get_default_renderer() + return mark_safe(renderer.render(template_name, context)) + + def build_attrs(self, base_attrs, extra_attrs=None): + """Build an attribute dictionary.""" + return {**base_attrs, **(extra_attrs or {})} + + def value_from_datadict(self, data, files, name): + """ + Given a dictionary of data and this widget's name, return the value + of this widget or None if it's not provided. + """ + return data.get(name) + + def value_omitted_from_data(self, data, files, name): + return name not in data + + def id_for_label(self, id_): + """ + Return the HTML ID attribute of this Widget for use by a