From 0376acdc9eefac3454c7f302d3a233056cacaaf0 Mon Sep 17 00:00:00 2001 From: Oskari Ponkala Date: Thu, 8 Apr 2021 12:10:24 +0000 Subject: [PATCH 01/20] Changed old vtmk emails to new admin email addresses and fixed an old link to old web --- locale/en/LC_MESSAGES/django.po | 4 ++-- locale/fi/LC_MESSAGES/django.po | 8 ++++---- members/templates/application_success.html | 2 +- webapp/templates/signup_email.html | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 73d3ea9..7b1289e 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -640,10 +640,10 @@ msgstr "Amazing! Your membership application has been sent." #: members/templates/application_success.html:9 msgid "" -"Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä sik-vtmk@list.ayy." +"Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä admin@sahkoinsinoorikilta.fi." "fi jos viestiä ei näy." msgstr "" -"Confirmation email is sent to given email address. Contact sik-vtmk@list.ayy." +"Confirmation email is sent to given email address. Contact admin@sahkoinsinoorikilta.fi." "fi if you didn't receive it." #: members/templates/application_success.html:10 diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index 9a184d2..cf602f6 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -453,9 +453,9 @@ msgstr "Vaalikokous, osa 3 (toimarien valinta)" #, python-format msgid "" "\n" -" Hyväksyn tietosuojaselosteen ja tietojeni " +" Hyväksyn tietosuojaselosteen ja tietojeni " "tallentamisen.\n" " " msgstr "" @@ -637,7 +637,7 @@ msgstr "Hienoa! Jäsenhakemuksesi on nyt lähetetty." #: members/templates/application_success.html:9 msgid "" -"Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä sik-vtmk@list.ayy." +"Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä admin@sahkoinsinoorikilta.fi." "fi jos viestiä ei näy." msgstr "" diff --git a/members/templates/application_success.html b/members/templates/application_success.html index 57b7a19..02eb5e1 100644 --- a/members/templates/application_success.html +++ b/members/templates/application_success.html @@ -6,6 +6,6 @@ {% block content %}

{% trans "Hienoa! Jäsenhakemuksesi on nyt lähetetty." %}

-

{% trans "Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä sik-vtmk@list.ayy.fi jos viestiä ei näy." %}

+

{% trans "Vahvistusviesti on lähetetty sähköpostiisi. Ota yhteyttä admin@sahkoinsinoorikilta.fi jos viestiä ei näy." %}

{% trans "Takaisin Sähköinsinöörikillan web-sivuille" %}

{% endblock content %} diff --git a/webapp/templates/signup_email.html b/webapp/templates/signup_email.html index 659ce67..c4faaa0 100644 --- a/webapp/templates/signup_email.html +++ b/webapp/templates/signup_email.html @@ -6,4 +6,4 @@ {{url}} -

Hädässä ota yhteyttä sik-vtmk@list.ayy.fi

\ No newline at end of file +

Hädässä ota yhteyttä admin@sahkoinsinoorikilta.fi

From 38eb4cd9cd7206cb4854fa15846079e0bb8cccce Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 01:41:15 +0300 Subject: [PATCH 02/20] clean dependencies --- poetry.lock | 648 ++++++++++++++----------------------------------- pyproject.toml | 22 +- 2 files changed, 188 insertions(+), 482 deletions(-) diff --git a/poetry.lock b/poetry.lock index 16001b3..61878ef 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,38 +1,3 @@ -[[package]] -name = "aiohttp" -version = "3.7.4.post0" -description = "Async http client/server framework (asyncio)" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -async-timeout = ">=3.0,<4.0" -attrs = ">=17.3.0" -chardet = ">=2.0,<5.0" -multidict = ">=4.5,<7.0" -typing-extensions = ">=3.6.5" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["aiodns", "brotlipy", "cchardet"] - -[[package]] -name = "appnope" -version = "0.1.2" -description = "Disable App Nap on macOS >= 10.9" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "async-timeout" -version = "3.0.1" -description = "Timeout context manager for asyncio programs" -category = "main" -optional = false -python-versions = ">=3.5.3" - [[package]] name = "attrs" version = "20.3.0" @@ -59,28 +24,23 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" pytz = ">=2015.7" [[package]] -name = "backports.shutil-get-terminal-size" -version = "1.0.0" -description = "A backport of the get_terminal_size function from Python 3.3's shutil." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "chardet" -version = "4.0.0" -description = "Universal encoding detector for Python 2 and 3" -category = "main" +name = "click" +version = "7.1.2" +description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "coverage" -version = "4.3.4" +version = "5.5" description = "Code coverage measurement for Python" -category = "main" +category = "dev" optional = false -python-versions = "*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +toml = ["toml"] [[package]] name = "dealer" @@ -218,14 +178,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "django-nocaptcha-recaptcha" -version = "0.0.19" -description = "Django nocaptcha recaptcha form field/widget app." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "django-nose" version = "1.4.5" @@ -292,6 +244,22 @@ python-versions = "*" [package.dependencies] PyJWT = ">=1.5.2,<2.0.0" +[[package]] +name = "dparse" +version = "0.5.1" +description = "A parser for Python dependency files" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +packaging = "*" +pyyaml = "*" +toml = "*" + +[package.extras] +pipenv = ["pipenv"] + [[package]] name = "et-xmlfile" version = "1.0.1" @@ -300,14 +268,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "gnureadline" -version = "8.0.0" -description = "The standard Python readline extension statically linked against the GNU readline library." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "gunicorn" version = "19.9.0" @@ -321,52 +281,6 @@ eventlet = ["eventlet (>=0.9.7)"] gevent = ["gevent (>=0.13)"] tornado = ["tornado (>=0.2)"] -[[package]] -name = "idna" -version = "3.1" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.4" - -[[package]] -name = "ipython" -version = "4.2.0" -description = "IPython: Productive Interactive Computing" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -"backports.shutil-get-terminal-size" = "*" -decorator = "*" -gnureadline = {version = "*", markers = "sys_platform == \"darwin\" and platform_python_implementation == \"CPython\""} -pexpect = {version = "*", markers = "sys_platform != \"win32\""} -pickleshare = "*" -simplegeneric = ">0.8" -traitlets = "*" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "path.py", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -terminal = ["pyreadline (>=2)"] -test = ["nose (>=0.10.1)", "path.py", "pygments", "requests", "testpath", "mock"] - -[[package]] -name = "ipython-genutils" -version = "0.1.0" -description = "Vestigial utilities from IPython" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "jdcal" version = "1.4.1" @@ -422,14 +336,6 @@ python-versions = ">=3.5" [package.extras] testing = ["coverage", "pyyaml"] -[[package]] -name = "multidict" -version = "5.1.0" -description = "multidict implementation" -category = "main" -optional = false -python-versions = ">=3.6" - [[package]] name = "nose" version = "1.3.7" @@ -442,7 +348,7 @@ python-versions = "*" name = "nose-exclude" version = "0.5.0" description = "Exclude specific directories from nosetests runs." -category = "main" +category = "dev" optional = false python-versions = "*" @@ -462,32 +368,24 @@ et_xmlfile = "*" jdcal = "*" [[package]] -name = "pexpect" -version = "4.1.0" -description = "Pexpect allows easy control of interactive console applications." -category = "main" +name = "packaging" +version = "20.9" +description = "Core utilities for Python packages" +category = "dev" optional = false -python-versions = "*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] -ptyprocess = ">=0.5" +pyparsing = ">=2.0.2" [[package]] name = "phonenumbers" -version = "8.11.4" +version = "8.12.20" description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." category = "main" optional = false python-versions = "*" -[[package]] -name = "pickleshare" -version = "0.7.2" -description = "Tiny 'shelve'-like database with concurrency support" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "pillow" version = "8.1.2" @@ -504,19 +402,11 @@ category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -[[package]] -name = "ptyprocess" -version = "0.5.1" -description = "Run a subprocess in a pseudo terminal" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "pycodestyle" -version = "2.6.0" +version = "2.7.0" description = "Python style guide checker" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -568,7 +458,7 @@ pyexcel-io = ">=0.5.3" [[package]] name = "pyjwt" -version = "1.6.4" +version = "1.7.1" description = "JSON Web Token implementation in Python" category = "main" optional = false @@ -577,7 +467,15 @@ python-versions = "*" [package.extras] crypto = ["cryptography (>=1.4)"] flake8 = ["flake8", "flake8-import-order", "pep8-naming"] -test = ["pytest (>3,<4)", "pytest-cov", "pytest-runner"] +test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] + +[[package]] +name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "pyrsistent" @@ -600,12 +498,20 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2016.4" +version = "2021.1" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" +[[package]] +name = "pyyaml" +version = "5.4.1" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + [[package]] name = "requests" version = "2.11.1" @@ -619,12 +525,18 @@ security = ["ndg-httpsclient", "pyOpenSSL (>=0.13)", "pyasn1"] socks = ["PySocks (>=1.5.6)"] [[package]] -name = "simplegeneric" -version = "0.8.1" -description = "Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)" -category = "main" +name = "safety" +version = "1.10.3" +description = "Checks installed dependencies for known vulnerabilities." +category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.5" + +[package.dependencies] +Click = ">=6.0" +dparse = ">=0.5.1" +packaging = "*" +requests = "*" [[package]] name = "six" @@ -652,18 +564,6 @@ xls = ["xlrd", "xlwt"] xlsx = ["openpyxl (>=2.6.0)"] yaml = ["pyyaml"] -[[package]] -name = "telepot" -version = "12.3" -description = "Python framework for Telegram Bot API" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -aiohttp = ">=2.0.0" -urllib3 = ">=1.9.1" - [[package]] name = "texttable" version = "1.6.3" @@ -673,37 +573,12 @@ optional = false python-versions = "*" [[package]] -name = "traitlets" -version = "4.2.1" -description = "Traitlets Python config system" -category = "main" +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" optional = false -python-versions = "*" - -[package.dependencies] -decorator = "*" -ipython-genutils = "*" - -[[package]] -name = "typing-extensions" -version = "3.7.4.3" -description = "Backported and Experimental Type Hints for Python 3.5+" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "urllib3" -version = "1.26.4" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] -brotli = ["brotlipy (>=0.6.0)"] +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "uwsgi" @@ -724,71 +599,12 @@ python-versions = "*" [package.extras] brotli = ["brotli"] -[[package]] -name = "yarl" -version = "1.6.3" -description = "Yet another URL library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "c54bbe8b9464ba9b826b6e6e11b326d150b459792e6191ff7e83b0804134a397" +content-hash = "96b97a5724351c317da124ac72db10dc756b862fead08185dba89d7756a4384f" [metadata.files] -aiohttp = [ - {file = "aiohttp-3.7.4.post0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-win32.whl", hash = "sha256:3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-win32.whl", hash = "sha256:7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-win32.whl", hash = "sha256:515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-win_amd64.whl", hash = "sha256:114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-win32.whl", hash = "sha256:932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-win_amd64.whl", hash = "sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe"}, - {file = "aiohttp-3.7.4.post0.tar.gz", hash = "sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf"}, -] -appnope = [ - {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, - {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, -] -async-timeout = [ - {file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"}, - {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"}, -] attrs = [ {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, @@ -797,59 +613,63 @@ babel = [ {file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"}, {file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"}, ] -"backports.shutil-get-terminal-size" = [ - {file = "backports.shutil_get_terminal_size-1.0.0-py2.py3-none-any.whl", hash = "sha256:0975ba55054c15e346944b38956a4c9cbee9009391e41b86c68990effb8c1f64"}, - {file = "backports.shutil_get_terminal_size-1.0.0.tar.gz", hash = "sha256:713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80"}, -] -chardet = [ - {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, - {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, +click = [ + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] coverage = [ - {file = "coverage-4.3.4-cp26-cp26m-macosx_10_10_x86_64.whl", hash = "sha256:e1fb21a807aa0b5cc79806d8ef09078acaa83f994e15f0f7277489ca8eda51b7"}, - {file = "coverage-4.3.4-cp26-cp26m-manylinux1_i686.whl", hash = "sha256:8a82664931a071399d703d65af2521e2202b34f2d8db20fa22a922fec0339022"}, - {file = "coverage-4.3.4-cp26-cp26m-manylinux1_x86_64.whl", hash = "sha256:024682371464c6e3caa975aba12b4d5428f35613489340fce1334c74d590a057"}, - {file = "coverage-4.3.4-cp26-cp26m-win32.whl", hash = "sha256:a791068e1bbe443fcd3179b1c180c27a7fc58c1554b0d10311b7659d2d2d76f5"}, - {file = "coverage-4.3.4-cp26-cp26m-win_amd64.whl", hash = "sha256:adfbbd4a1d22fd77b13ff992946b19873407e035504abe9ba537494fe013300f"}, - {file = "coverage-4.3.4-cp26-cp26mu-manylinux1_i686.whl", hash = "sha256:1d23dea598fb4d61a8577d0eb0cb2b7932db0c8d2e1394088ad5f64e3fe1febf"}, - {file = "coverage-4.3.4-cp26-cp26mu-manylinux1_x86_64.whl", hash = "sha256:4fa2b181c3bf94cfdf841148d5d9abcab1890188dd908a639bcf7a38c50092bc"}, - {file = "coverage-4.3.4-cp27-cp27m-macosx_10_10_intel.whl", hash = "sha256:c736faa1688222a6c8a5d8be4b66ec373ad6dab27fced8ca0d2c80fed70ac6e3"}, - {file = "coverage-4.3.4-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:36407249a0b6669c6ad4425b0f29685579df745480c03afa70f101f09f4eead3"}, - {file = "coverage-4.3.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:229ab9c0d53c55d698b8784d53077bef7a5f1fb5d27e90dc7b6f91243b024513"}, - {file = "coverage-4.3.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f99066d76274800145a2e658026b30962eb5079346249197e88b55c9a7855e6a"}, - {file = "coverage-4.3.4-cp27-cp27m-win32.whl", hash = "sha256:9c3e6551597593c1afedcbccf1371995f94457aea82cac726d1f3a25f4507386"}, - {file = "coverage-4.3.4-cp27-cp27m-win_amd64.whl", hash = "sha256:6d3c762c87062a29771015f942752caef42fcc7fe4be2b03186f96788242290c"}, - {file = "coverage-4.3.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f27772c9ee88ed3f2a784181f3d1724561499e7e448ed1706153336baa706bd5"}, - {file = "coverage-4.3.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ca36d83cd591d027952e5019149c4386e7058cd674bf8cb52dc622f768d689e9"}, - {file = "coverage-4.3.4-cp33-cp33m-macosx_10_10_x86_64.whl", hash = "sha256:6ae76a6cd594107ad45525278e8addeae4628a59c8cde3999548d7fe1646465b"}, - {file = "coverage-4.3.4-cp33-cp33m-manylinux1_i686.whl", hash = "sha256:07c15c4a2287116a41d5966f1f5a7be765640c2e5a1917f882850a24615db6d3"}, - {file = "coverage-4.3.4-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:2f959bc1b40a3ef2c5f0c7bc282226d6d4bd585b239bcce321013afc18ff0a0f"}, - {file = "coverage-4.3.4-cp34-cp34m-macosx_10_10_x86_64.whl", hash = "sha256:ea9808001dcf34d368cbef430e7885fdc76a2cf8ea96a8ed8b653797dd9555bb"}, - {file = "coverage-4.3.4-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:3efa49e3da8f32071ee3d5d464cc6b6f8818524d4099b4a94b86a70b8c88d4f5"}, - {file = "coverage-4.3.4-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:adf04843188418b012dd1974e397a7ac3faa1855cbcd69083e3af4da6de9dd81"}, - {file = "coverage-4.3.4-cp34-cp34m-win32.whl", hash = "sha256:1eeb9de833c3b976ee118a8d838af437bfa596bf60a5bf0705f4370e6d181a52"}, - {file = "coverage-4.3.4-cp34-cp34m-win_amd64.whl", hash = "sha256:c12f34c0b50e9e8bf8c049b6c8ca59929c33cea4b1c48362c99c36838c1ee025"}, - {file = "coverage-4.3.4-cp35-cp35m-macosx_10_10_x86_64.whl", hash = "sha256:57c0c217270e628380f4befbbf8c5312b88ba7d81fd3d1b2218a25a2608f603c"}, - {file = "coverage-4.3.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:01a07b2b9212d4da3a1294436b58ac53f1d7aa445bda666648a5357048dc7ef3"}, - {file = "coverage-4.3.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b25aa3531220faaf1727fc29bc000798476b4a30f429dc07898d5da48caefa15"}, - {file = "coverage-4.3.4-cp35-cp35m-win32.whl", hash = "sha256:01406019418aabb2d4741647cc79b0e0deb0b8c5a6f936936c303e2f82ec8e5b"}, - {file = "coverage-4.3.4-cp35-cp35m-win_amd64.whl", hash = "sha256:e53199ae110cb7e250dd5505fde34452514f4eb2f1fb7532270d2ea037454b09"}, - {file = "coverage-4.3.4-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:8b282292973a1dc4eccfcc0776e0fde75b5b3de2e35164c2d854f7dd80149e4b"}, - {file = "coverage-4.3.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9a7874ca91cee8714277cd6d1b52374809ab925bf6ae92607bf02509019caadb"}, - {file = "coverage-4.3.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2f5a8bf29bdc69976d0913745daab11f8265e46ec41153f5e1e1794088019dad"}, - {file = "coverage-4.3.4-cp36-cp36m-win32.whl", hash = "sha256:fd3373ccd561b79932d12a986674e642816cfc4db4507b6a22ab30c318a85429"}, - {file = "coverage-4.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:422bcc6270e1c0cd9043048ce244f49072e9bd78a2c028c2ad2cfd58c79f5936"}, - {file = "coverage-4.3.4.tar.gz", hash = "sha256:eaaefe0f6aa33de5a65f48dd0040d7fe08cac9ac6c35a56d0a7db109c3e733df"}, - {file = "coverage-4.3.4.win-amd64-py2.6.exe", hash = "sha256:20d47752ec80b6c950dd7f777ac56cb1b0fe733133edebc4af066c70ddf17913"}, - {file = "coverage-4.3.4.win-amd64-py2.7.exe", hash = "sha256:565ff61f5887bf14fc766c9bf4d234c1195da414a3270c10470275e6cf271a34"}, - {file = "coverage-4.3.4.win-amd64-py3.4.exe", hash = "sha256:79e1bb54b48e3a3424361659cd64b14fa3cf07060aa46345aa6ebaca1dd9c92d"}, - {file = "coverage-4.3.4.win-amd64-py3.5.exe", hash = "sha256:2324355f952b461b686c2ade07f52340052a0320fa09c4408dfe66dd7e1af7ed"}, - {file = "coverage-4.3.4.win-amd64-py3.6.exe", hash = "sha256:3cf1f6a1293febd4ffd035b6bd9347d8a9331395c9d67e78cec510fc9cfd505f"}, - {file = "coverage-4.3.4.win32-py2.6.exe", hash = "sha256:175b36d5148ec287ed4c0322d6af0d676e5bc395719efb1ad84cdbc38226685d"}, - {file = "coverage-4.3.4.win32-py2.7.exe", hash = "sha256:1ca0f9f505a10a03703c89a1957aa3b5c869fdaaace82aa354cbbb8311bd7428"}, - {file = "coverage-4.3.4.win32-py3.4.exe", hash = "sha256:6c9bd3924052151b1a4f157d860f57d17708962deb4258739ae406d9376da77d"}, - {file = "coverage-4.3.4.win32-py3.5.exe", hash = "sha256:9ddd809ce195ec60aec6d8dacec433b1ac55f6076f773253208dd35dfd9b59bc"}, - {file = "coverage-4.3.4.win32-py3.6.exe", hash = "sha256:0962e9764e44172a72fa6e486aeb87d714f7018619ff41eb7c67b03fc53d122a"}, + {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, + {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, + {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, + {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, + {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, + {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, + {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, + {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, + {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, + {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, + {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, + {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, + {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, + {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, + {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, + {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, + {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, + {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, + {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, + {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, + {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, + {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, + {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, + {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, + {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, + {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, + {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, + {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, + {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, + {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, + {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, + {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, + {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, + {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, + {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, + {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, + {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, ] dealer = [ {file = "dealer-2.0.5-py2.py3-none-any.whl", hash = "sha256:baaac37a4c7928545cb8b0335f48abd0ea51a0274159a9a989afb8b71f8b11c3"}, @@ -899,9 +719,6 @@ django-jsonfield = [ django-modeltranslation = [ {file = "django-modeltranslation-0.13b1.tar.gz", hash = "sha256:254ebda6caea5683407e1fb3e45ceaa2275778c6dc2db2b9d4fec3df373c2cdd"}, ] -django-nocaptcha-recaptcha = [ - {file = "django-nocaptcha-recaptcha-0.0.19.tar.gz", hash = "sha256:d2512d5035d5f62aba5009082db28b28995a7e6f4a46713292e0f4f350f337da"}, -] django-nose = [ {file = "django-nose-1.4.5.tar.gz", hash = "sha256:87663f18cb25f01d56c84ac1ff8a0e6e6a6246264b2549b751cb239d0642e76a"}, {file = "django_nose-1.4.5-py2.py3-none-any.whl", hash = "sha256:5df2df802c607daeeab8ac1e93abf54508ed6133eb93852310f512000124b4a5"}, @@ -924,42 +741,17 @@ djangorestframework-jwt = [ {file = "djangorestframework-jwt-1.11.0.tar.gz", hash = "sha256:5efe33032f3a4518a300dc51a51c92145ad95fb6f4b272e5aa24701db67936a7"}, {file = "djangorestframework_jwt-1.11.0-py2.py3-none-any.whl", hash = "sha256:ab15dfbbe535eede8e2e53adaf52ef0cf018ee27dbfad10cbc4cbec2ab63d38c"}, ] +dparse = [ + {file = "dparse-0.5.1-py3-none-any.whl", hash = "sha256:e953a25e44ebb60a5c6efc2add4420c177f1d8404509da88da9729202f306994"}, + {file = "dparse-0.5.1.tar.gz", hash = "sha256:a1b5f169102e1c894f9a7d5ccf6f9402a836a5d24be80a986c7ce9eaed78f367"}, +] et-xmlfile = [ {file = "et_xmlfile-1.0.1.tar.gz", hash = "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"}, ] -gnureadline = [ - {file = "gnureadline-8.0.0-cp26-cp26m-macosx_10_6_intel.whl", hash = "sha256:59369b0eb7210bdb2acf2940c15a6a9d35c70cde9b6d6c5b5c14b0bfd4fd258a"}, - {file = "gnureadline-8.0.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:8c244130b6e31669f76213ddb249c8673b8573214e80829667f17e18abe27487"}, - {file = "gnureadline-8.0.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:59f6265f24631da28e39054cdd3a52cf02422aa2b955b8d8358b99d4425c3a26"}, - {file = "gnureadline-8.0.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:69c9291b6a7bcf768202b78ed1684b515181e20a3cb680b0265da0d6fdc0f697"}, - {file = "gnureadline-8.0.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:fd7ddef98546f1a97eea2ba2120faff4cb7fd52d43f4a16954b5d5531a23eb3e"}, - {file = "gnureadline-8.0.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:fe9b42d92dcd83071c82a5dbd33e36a287bb021d2e29f65abfe3192bf13a360d"}, - {file = "gnureadline-8.0.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:5fe0b973372a6deca9b448178acf8117bc80f0c5113facef0be16712cb98feea"}, - {file = "gnureadline-8.0.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e50ae6f49adfc2c89b995a75a0ce2449e553dbd943a4cd1a2d959caccc20247c"}, - {file = "gnureadline-8.0.0-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:88c1adf00fa8b2124751d7a6a4f8701cf8677d5caccdb16f6a6b24b3ae4f97c0"}, - {file = "gnureadline-8.0.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:15518acd534a84d8cd3b2431aeca85132c4892600bf3a64edd76ed265909476c"}, - {file = "gnureadline-8.0.0-cp38-cp38-macosx_10_6_intel.whl", hash = "sha256:650986355bfdbe767fd7e9ce4df20ac4993f8c3b60f0829b3c1f951ce31be846"}, - {file = "gnureadline-8.0.0.tar.gz", hash = "sha256:61eef72ed02dad415ede49752e972a1d2bd8c35c1e4464565d7effd806c99476"}, -] gunicorn = [ {file = "gunicorn-19.9.0-py2.py3-none-any.whl", hash = "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471"}, {file = "gunicorn-19.9.0.tar.gz", hash = "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"}, ] -idna = [ - {file = "idna-3.1-py3-none-any.whl", hash = "sha256:5205d03e7bcbb919cc9c19885f9920d622ca52448306f2377daede5cf3faac16"}, - {file = "idna-3.1.tar.gz", hash = "sha256:c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1"}, -] -ipython = [ - {file = "ipython-4.2.0-py2-none-any.whl", hash = "sha256:0480354f25b2f443e4ef1456b48f28ad1caaa6d316fca5a5eaa9ca7745ae7923"}, - {file = "ipython-4.2.0-py3-none-any.whl", hash = "sha256:98452af6450e28c9c742d567d75eb6e3a7b391ad4ce8abd5679c5f85ce7fad00"}, - {file = "ipython-4.2.0.tar.gz", hash = "sha256:dba42f182b5f6f26630d2202efd30383712d9f7d8d8d9896b37ae2145deca616"}, - {file = "ipython-4.2.0.zip", hash = "sha256:d852fed59da67c7e45cb2192027da8bfd920a7856d295c247a45105968d24d5a"}, -] -ipython-genutils = [ - {file = "ipython_genutils-0.1.0-py2.py3-none-any.whl", hash = "sha256:6218e9abd612fb5acfb175ea7c7b026006de4df9691d9a73c9b390cfa1a41c2b"}, - {file = "ipython_genutils-0.1.0.tar.gz", hash = "sha256:3a0624a251a26463c9dfa0ffa635ec51c4265380980d9a50d65611c3c2bd82a6"}, - {file = "ipython_genutils-0.1.0.zip", hash = "sha256:0c43fa84e93ad0e4dbecaffc6656ac1caf1a48359b2bb0a5da3af84164e3f49b"}, -] jdcal = [ {file = "jdcal-1.4.1-py2.py3-none-any.whl", hash = "sha256:1abf1305fce18b4e8aa248cf8fe0c56ce2032392bc64bbd61b5dff2a19ec8bba"}, {file = "jdcal-1.4.1.tar.gz", hash = "sha256:472872e096eb8df219c23f2689fc336668bdb43d194094b5cc1707e1640acfc8"}, @@ -980,45 +772,6 @@ markdown = [ {file = "Markdown-3.2.2-py3-none-any.whl", hash = "sha256:c467cd6233885534bf0fe96e62e3cf46cfc1605112356c4f9981512b8174de59"}, {file = "Markdown-3.2.2.tar.gz", hash = "sha256:1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17"}, ] -multidict = [ - {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"}, - {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"}, - {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"}, - {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"}, - {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"}, - {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"}, - {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"}, - {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"}, - {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"}, - {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"}, - {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"}, - {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"}, - {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"}, -] nose = [ {file = "nose-1.3.7-py2-none-any.whl", hash = "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a"}, {file = "nose-1.3.7-py3-none-any.whl", hash = "sha256:9ff7c6cc443f8c51994b34a667bbcf45afd6d945be7477b52e97516fd17c53ac"}, @@ -1030,17 +783,13 @@ nose-exclude = [ openpyxl = [ {file = "openpyxl-2.6.4.tar.gz", hash = "sha256:1d53801678e18d7fe38c116f1ad0c2383a654670c4c8806105b611c92d92f2e3"}, ] -pexpect = [ - {file = "pexpect-4.1.0-py2.py3-none-any.whl", hash = "sha256:09b0a7727ce012e0fa668ef848591102d6667521655f4e72d51197c872cb9fb9"}, - {file = "pexpect-4.1.0.tar.gz", hash = "sha256:c381c60f1987355b65df8f08a27f428831914c8a81091bd1778ac336fa2f27e7"}, +packaging = [ + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] phonenumbers = [ - {file = "phonenumbers-8.11.4-py2.py3-none-any.whl", hash = "sha256:9ca4332425ae4f4d1e7925bbf98ef9446755b59a903ae6a63cf4fb19adcd168b"}, - {file = "phonenumbers-8.11.4.tar.gz", hash = "sha256:685e81ac131fea8dbd71b7769d2ac480c9fe9d5a45838e8546f5de9910670e8e"}, -] -pickleshare = [ - {file = "pickleshare-0.7.2-py2.py3-none-any.whl", hash = "sha256:b58cf7d70658a091621c0d8cc35143c8569f3827496b27ed896918c237d05d96"}, - {file = "pickleshare-0.7.2.tar.gz", hash = "sha256:92ee3b0e21632542ecc9a0a245e69a126f62e5114081bdb0d32e0edd10410033"}, + {file = "phonenumbers-8.12.20-py2.py3-none-any.whl", hash = "sha256:7c2b26ee026f765a8032fc2a333b46fa1860445c7ce6df3b717b9f6985106084"}, + {file = "phonenumbers-8.12.20.tar.gz", hash = "sha256:ee5a8508c4a414262abad92ec33f050347f681973ed0fb36e98b52bfe159f6b8"}, ] pillow = [ {file = "Pillow-8.1.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0"}, @@ -1111,13 +860,9 @@ psycopg2-binary = [ {file = "psycopg2_binary-2.8.4-cp38-cp38-win32.whl", hash = "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1"}, {file = "psycopg2_binary-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f"}, ] -ptyprocess = [ - {file = "ptyprocess-0.5.1-py2.py3-none-any.whl", hash = "sha256:464cb76f7a7122743dd25507650db89cd447c51f38e4671602b3eaa2e38e05ae"}, - {file = "ptyprocess-0.5.1.tar.gz", hash = "sha256:0530ce63a9295bfae7bd06edc02b6aa935619f486f0f1dc0972f516265ee81a6"}, -] pycodestyle = [ - {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, - {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] pyexcel = [ {file = "pyexcel-0.5.14-py2.py3-none-any.whl", hash = "sha256:df3248c2d7bc3614e91aa9b90838071d4ef6d08ecf24adc43752db3dcdfc8a38"}, @@ -1132,8 +877,12 @@ pyexcel-xlsx = [ {file = "pyexcel_xlsx-0.5.8-py2.py3-none-any.whl", hash = "sha256:9bae2820c5767440d8a387695e0f8e8f73c97bcde0a5680c200ae82a2f6d5cc6"}, ] pyjwt = [ - {file = "PyJWT-1.6.4-py2.py3-none-any.whl", hash = "sha256:30b1380ff43b55441283cc2b2676b755cca45693ae3097325dea01f3d110628c"}, - {file = "PyJWT-1.6.4.tar.gz", hash = "sha256:4ee413b357d53fd3fb44704577afac88e72e878716116270d722723d65b42176"}, + {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, + {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, +] +pyparsing = [ + {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, + {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] pyrsistent = [ {file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"}, @@ -1144,26 +893,47 @@ python-dateutil = [ {file = "python_dateutil-2.6.0-py2.py3-none-any.whl", hash = "sha256:537bf2a8f8ce6f6862ad705cd68f9e405c0b5db014aa40fa29eab4335d4b1716"}, ] pytz = [ - {file = "pytz-2016.4-py2.4.egg", hash = "sha256:66693fc628ba794c03a588b4ff8f49eedc7bf739b77e795459088edd202c5700"}, - {file = "pytz-2016.4-py2.5.egg", hash = "sha256:b3b7f7f26fd31bf513324572d7dd8f63a406fbbebca296ccc86c40be7979ad79"}, - {file = "pytz-2016.4-py2.6.egg", hash = "sha256:7fec5bb978be08b046dba347cf46e0a8b7a418fc8a25cc7199637a8ac4cc6ff4"}, - {file = "pytz-2016.4-py2.7.egg", hash = "sha256:7b705b7cdadfa89b8e1dae38efe9a6deb41b5cefac35aa8bbfc2318cb09ebd63"}, - {file = "pytz-2016.4-py2.py3-none-any.whl", hash = "sha256:8781cdd3ca70f5a536884e051797ca213b9ff479a5c1cc57240adf37cc1eff1b"}, - {file = "pytz-2016.4-py3.1.egg", hash = "sha256:bb2bde3edc3fa9ee5c033fbb5e57146d223878f4ff1950303214eccfb1977a46"}, - {file = "pytz-2016.4-py3.2.egg", hash = "sha256:6aa73396e7bb8031569e849e40e02aca1d79e602864ae60189cf1420baba8f34"}, - {file = "pytz-2016.4-py3.3.egg", hash = "sha256:82b425cbc05517f6ad70c33825c620104fc5582cf948fb2e776a8449c72c5dcd"}, - {file = "pytz-2016.4-py3.4.egg", hash = "sha256:4ffe0390abd525733373b9b3f6acc13ad25c2d64d268fb5a992eaddf5b133b46"}, - {file = "pytz-2016.4-py3.5.egg", hash = "sha256:9c51c2aa05bc6a22b62f6114c03ba2c9882413b8d7dcd5e2531fce87333b41ba"}, - {file = "pytz-2016.4.tar.bz2", hash = "sha256:ee7c751544e35a7b7fb5e3fb25a49dade37d51e70a93e5107f10575d7102c311"}, - {file = "pytz-2016.4.tar.gz", hash = "sha256:c823de61ff40d1996fe087cec343e0503881ca641b897e0f9b86c7683a0bfee1"}, - {file = "pytz-2016.4.zip", hash = "sha256:be2ff04e94a2b5454ddcfbebb81ee8e46162734d4c2fcc90c422d16ab51f810b"}, + {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, + {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, +] +pyyaml = [ + {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, + {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, + {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, + {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, + {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, + {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, + {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, + {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, + {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] requests = [ {file = "requests-2.11.1-py2.py3-none-any.whl", hash = "sha256:545c4855cd9d7c12671444326337013766f4eea6068c3f0307fb2dc2696d580e"}, {file = "requests-2.11.1.tar.gz", hash = "sha256:5acf980358283faba0b897c73959cecf8b841205bb4b2ad3ef545f46eae1a133"}, ] -simplegeneric = [ - {file = "simplegeneric-0.8.1.zip", hash = "sha256:dc972e06094b9af5b855b3df4a646395e43d1c9d0d39ed345b7393560d0b9173"}, +safety = [ + {file = "safety-1.10.3-py2.py3-none-any.whl", hash = "sha256:5f802ad5df5614f9622d8d71fedec2757099705c2356f862847c58c6dfe13e84"}, + {file = "safety-1.10.3.tar.gz", hash = "sha256:30e394d02a20ac49b7f65292d19d38fa927a8f9582cdfd3ad1adbbc66c641ad5"}, ] six = [ {file = "six-1.12.0-py2.py3-none-any.whl", hash = "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"}, @@ -1173,26 +943,13 @@ tablib = [ {file = "tablib-3.0.0-py3-none-any.whl", hash = "sha256:41aa40981cddd7ec4d1fabeae7c38d271601b306386bd05b5c3bcae13e5aeb20"}, {file = "tablib-3.0.0.tar.gz", hash = "sha256:f83cac08454f225a34a305daa20e2110d5e6335135d505f93bc66583a5f9c10d"}, ] -telepot = [ - {file = "telepot-12.3.tar.gz", hash = "sha256:8910fd6fb708e2c3ded7ca82cc945a645b717699d9f82ddff5123bb2e05f780f"}, -] texttable = [ {file = "texttable-1.6.3-py2.py3-none-any.whl", hash = "sha256:f802f2ef8459058736264210f716c757cbf85007a30886d8541aa8c3404f1dda"}, {file = "texttable-1.6.3.tar.gz", hash = "sha256:ce0faf21aa77d806bbff22b107cc22cce68dc9438f97a2df32c93e9afa4ce436"}, ] -traitlets = [ - {file = "traitlets-4.2.1-py2.py3-none-any.whl", hash = "sha256:05a66843c96a320eec09df674c16ff330a43cb07f731cf2bd88aa3645a180541"}, - {file = "traitlets-4.2.1.tar.gz", hash = "sha256:76eba33c89723b8fc024f950cacaf5bf2ef37999642cc9a61f4e7c1ca5cf0ac0"}, - {file = "traitlets-4.2.1.zip", hash = "sha256:d6db3201395f9b955786d25a1817c07291e2bcb96eb7f41683ae3836836179d7"}, -] -typing-extensions = [ - {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, - {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, - {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, -] -urllib3 = [ - {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, - {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] uwsgi = [ {file = "uwsgi-2.0.18.tar.gz", hash = "sha256:4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583"}, @@ -1201,42 +958,3 @@ whitenoise = [ {file = "whitenoise-4.1.4-py2.py3-none-any.whl", hash = "sha256:6dfea214b7c12efd689007abf9afa87a426586e9dbc051873ad2c8e535e2a1ac"}, {file = "whitenoise-4.1.4.tar.gz", hash = "sha256:22f79cf8f1f509639330f93886acaece8ec5ac5e9600c3b981d33c34e8a42dfd"}, ] -yarl = [ - {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"}, - {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"}, - {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"}, - {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"}, - {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"}, - {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"}, - {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"}, - {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"}, - {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"}, - {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"}, - {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"}, - {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"}, - {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"}, -] diff --git a/pyproject.toml b/pyproject.toml index 44f65b3..b9afc52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,40 +6,23 @@ authors = ["Your Name "] [tool.poetry.dependencies] python = "^3.9" -Pillow = "^8.1.2" -"backports.shutil_get_terminal_size" = "1.0.0" decorator = "4.0.9" Django = "2.1.5" -ipython = "4.2.0" -ipython_genutils = "0.1.0" -pexpect = "4.1.0" -pickleshare = "0.7.2" -ptyprocess = "0.5.1" -pytz = "2016.4" -simplegeneric = "0.8.1" -traitlets = "4.2.1" requests = "2.11.1" -django-nocaptcha-recaptcha = "0.0.19" django-cors-headers = "2.0.1" djangorestframework = "3.8.2" -PyJWT = "1.6.4" djangorestframework-jwt = "1.11.0" -coverage = "4.3.4" django-nose = "1.4.5" -nose-exclude = "0.5.0" psycopg2-binary = "2.8.4" django-bootstrap3 = "11.1.0" django-tables2 = "1.6.1" -pycodestyle = "2.6.0" dealer = "2.0.5" django-modeltranslation = "0.13b1" django-auditlog = "0.4.5" -phonenumbers = "8.11.4" django-phonenumber-field = {version = "4.0.0", extras = ["phonenumbers"]} django-autocomplete-light = "3.4.1" six = "1.12.0" django-suit = "0.2.26" -telepot = "12.3" pyexcel = "0.5.14" pyexcel-xlsx = "0.5.8" django-import-export = "0.7.0" @@ -52,8 +35,13 @@ mailjet-rest = "1.3.3" Markdown = "3.2.2" uWSGI = "2.0.18" gunicorn = "19.9.0" +Pillow = "^8.1.2" [tool.poetry.dev-dependencies] +coverage = "^5.5" +nose-exclude = "^0.5.0" +safety = "^1.10.3" +pycodestyle = "^2.7.0" [build-system] requires = ["poetry-core>=1.0.0"] From d07914bdb58a19a6b192b4fa6e16e10f70f81ecd Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 01:41:27 +0300 Subject: [PATCH 03/20] clean unused imports --- kaehmy/models.py | 5 ----- sikweb/urls.py | 4 ---- 2 files changed, 9 deletions(-) diff --git a/kaehmy/models.py b/kaehmy/models.py index 0b1bd90..f47374f 100644 --- a/kaehmy/models.py +++ b/kaehmy/models.py @@ -1,12 +1,7 @@ from django.db import models from django.utils import timezone -from datetime import timedelta -from webapp.utils import month_from_now from django.utils.translation import ugettext_lazy as _ -from auditlog.registry import auditlog -from phonenumber_field.modelfields import PhoneNumberField from webapp.models import BaseRole -import logging # TODO: Move BaseRole to Kaehmt App; will fuck up the DB since table is removed, if no data migration is done before-hand. diff --git a/sikweb/urls.py b/sikweb/urls.py index 4a95748..8bec032 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -23,10 +23,6 @@ from django.conf import settings from django.contrib.staticfiles import views as static_views from django.views.generic.base import RedirectView -import webapp.urls -import infoscreen.urls -import members.urls - favicon_view = RedirectView.as_view( url='static/img/favicon.png', permanent=True) From e68f04117dec8bb5a210c0aa58823ae0def3a9cc Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 20:15:06 +0300 Subject: [PATCH 04/20] update deps, Django v2.2 --- poetry.lock | 296 ++++++++++++++++++++++++++++++++----------------- pyproject.toml | 58 +++++----- 2 files changed, 221 insertions(+), 133 deletions(-) diff --git a/poetry.lock b/poetry.lock index 61878ef..e930849 100644 --- a/poetry.lock +++ b/poetry.lock @@ -23,6 +23,22 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pytz = ">=2015.7" +[[package]] +name = "certifi" +version = "2020.12.5" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "chardet" +version = "4.0.0" +description = "Universal encoding detector for Python 2 and 3" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "click" version = "7.1.2" @@ -44,7 +60,7 @@ toml = ["toml"] [[package]] name = "dealer" -version = "2.0.5" +version = "2.1.0" description = "Dealer -- SCM (Git, Mercurial) watcher" category = "main" optional = false @@ -52,11 +68,11 @@ python-versions = "*" [[package]] name = "decorator" -version = "4.0.9" -description = "Better living through Python with decorators" +version = "4.4.2" +description = "Decorators for Humans" category = "main" optional = false -python-versions = "*" +python-versions = ">=2.6, !=3.0.*, !=3.1.*" [[package]] name = "diff-match-patch" @@ -68,7 +84,7 @@ python-versions = ">=2.7" [[package]] name = "django" -version = "2.1.5" +version = "2.2.19" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false @@ -76,6 +92,7 @@ python-versions = ">=3.5" [package.dependencies] pytz = "*" +sqlparse = ">=0.2.2" [package.extras] argon2 = ["argon2-cffi (>=16.1.0)"] @@ -94,7 +111,7 @@ six = "*" [[package]] name = "django-auditlog" -version = "0.4.5" +version = "0.4.7" description = "Audit log app for Django" category = "main" optional = false @@ -106,16 +123,19 @@ python-dateutil = "2.6.0" [[package]] name = "django-autocomplete-light" -version = "3.4.1" +version = "3.8.2" description = "Fresh autocompletes for Django" category = "main" optional = false python-versions = "*" +[package.dependencies] +six = "*" + [package.extras] genericm2m = ["django-generic-m2m"] gfk = ["django-querysetsequence (>=0.11)"] -nested = ["django-nested-admin"] +nested = ["django-nested-admin (>=3.0.21)"] tags = ["django-taggit"] [[package]] @@ -128,23 +148,26 @@ python-versions = "*" [[package]] name = "django-cors-headers" -version = "2.0.1" +version = "2.5.3" description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." category = "main" optional = false -python-versions = "*" - -[[package]] -name = "django-filter" -version = "2.0.0" -description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -category = "main" -optional = false -python-versions = "*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] Django = ">=1.11" +[[package]] +name = "django-filter" +version = "2.4.0" +description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +Django = ">=2.2" + [[package]] name = "django-import-export" version = "0.7.0" @@ -172,7 +195,7 @@ six = "*" [[package]] name = "django-modeltranslation" -version = "0.13b1" +version = "0.13.4" description = "Translates Django models using a registration approach." category = "main" optional = false @@ -180,7 +203,7 @@ python-versions = "*" [[package]] name = "django-nose" -version = "1.4.5" +version = "1.4.7" description = "Makes your Django tests simple and snappy" category = "main" optional = false @@ -208,7 +231,7 @@ phonenumberslite = ["phonenumberslite (>=7.0.2)"] [[package]] name = "django-suit" -version = "0.2.26" +version = "0.2.28" description = "Modern theme for Django admin interface." category = "main" optional = false @@ -216,22 +239,28 @@ python-versions = "*" [[package]] name = "django-tables2" -version = "1.6.1" +version = "1.21.2" description = "Table/data-grid framework for Django" category = "main" optional = false python-versions = "*" [package.dependencies] -Django = ">=1.8" +Django = ">=1.11" + +[package.extras] +tablib = ["tablib"] [[package]] name = "djangorestframework" -version = "3.8.2" +version = "3.12.4" description = "Web APIs for Django, made easy." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.5" + +[package.dependencies] +django = ">=2.2" [[package]] name = "djangorestframework-jwt" @@ -270,7 +299,7 @@ python-versions = "*" [[package]] name = "gunicorn" -version = "19.9.0" +version = "19.10.0" description = "WSGI HTTP Server for UNIX" category = "main" optional = false @@ -281,6 +310,14 @@ eventlet = ["eventlet (>=0.9.7)"] gevent = ["gevent (>=0.13)"] tornado = ["tornado (>=0.2)"] +[[package]] +name = "idna" +version = "2.10" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "jdcal" version = "1.4.1" @@ -316,7 +353,7 @@ python-versions = "*" [[package]] name = "mailjet-rest" -version = "1.3.3" +version = "1.3.4" description = "Mailjet V3 API wrapper" category = "main" optional = false @@ -327,11 +364,11 @@ requests = ">=2.4.3" [[package]] name = "markdown" -version = "3.2.2" +version = "3.3.4" description = "Python implementation of Markdown." category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [package.extras] testing = ["coverage", "pyyaml"] @@ -396,7 +433,7 @@ python-versions = ">=3.6" [[package]] name = "psycopg2-binary" -version = "2.8.4" +version = "2.8.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" category = "main" optional = false @@ -412,7 +449,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pyexcel" -version = "0.5.14" +version = "0.5.15" description = "A wrapper library that provides one API to read, manipulate and writedata in different excel formats" category = "main" optional = false @@ -420,7 +457,7 @@ python-versions = "*" [package.dependencies] lml = ">=0.0.4" -pyexcel-io = ">=0.5.18" +pyexcel-io = ">=0.5.19" texttable = ">=0.8.2" [package.extras] @@ -514,15 +551,21 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [[package]] name = "requests" -version = "2.11.1" +version = "2.25.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = "*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<5" +idna = ">=2.5,<3" +urllib3 = ">=1.21.1,<1.27" [package.extras] -security = ["ndg-httpsclient", "pyOpenSSL (>=0.13)", "pyasn1"] -socks = ["PySocks (>=1.5.6)"] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] name = "safety" @@ -540,11 +583,19 @@ requests = "*" [[package]] name = "six" -version = "1.12.0" +version = "1.15.0" description = "Python 2 and 3 compatibility utilities" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "sqlparse" +version = "0.4.1" +description = "A non-validating SQL parser." +category = "main" +optional = false +python-versions = ">=3.5" [[package]] name = "tablib" @@ -580,9 +631,22 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "urllib3" +version = "1.26.4" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotlipy (>=0.6.0)"] + [[package]] name = "uwsgi" -version = "2.0.18" +version = "2.0.19.1" description = "The uWSGI server" category = "main" optional = false @@ -602,7 +666,7 @@ brotli = ["brotli"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "96b97a5724351c317da124ac72db10dc756b862fead08185dba89d7756a4384f" +content-hash = "795169b8742b82e4eeec36ddedb808b159014f58d5b7d724dfef57c7666131c9" [metadata.files] attrs = [ @@ -613,6 +677,14 @@ babel = [ {file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"}, {file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"}, ] +certifi = [ + {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"}, + {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"}, +] +chardet = [ + {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, + {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, +] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, @@ -672,41 +744,41 @@ coverage = [ {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, ] dealer = [ - {file = "dealer-2.0.5-py2.py3-none-any.whl", hash = "sha256:baaac37a4c7928545cb8b0335f48abd0ea51a0274159a9a989afb8b71f8b11c3"}, - {file = "dealer-2.0.5.tar.gz", hash = "sha256:0a5a536fdecd9c7679534a19c59392cd21989037c14782328970a185b39e7560"}, + {file = "dealer-2.1.0-py2.py3-none-any.whl", hash = "sha256:0956771907702bf84c39513c5343cca1268ee9858a9fe3635303173114347dcf"}, + {file = "dealer-2.1.0.tar.gz", hash = "sha256:1929ebb09449b576d4488b1322fabca2ba75c82f602e64c9f0b5ad58bff020c4"}, ] decorator = [ - {file = "decorator-4.0.9-py2.py3-none-any.whl", hash = "sha256:f4718552326c99544a6ec602d96b7d03ef61180cf4a492c515ecb2438dd14ccc"}, - {file = "decorator-4.0.9.tar.gz", hash = "sha256:90022e83316363788a55352fe39cfbed357aa3a71d90e5f2803a35471de4bba8"}, + {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, + {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, ] diff-match-patch = [ {file = "diff-match-patch-20200713.tar.gz", hash = "sha256:da6f5a01aa586df23dfc89f3827e1cafbb5420be9d87769eeb079ddfd9477a18"}, {file = "diff_match_patch-20200713-py3-none-any.whl", hash = "sha256:8bf9d9c4e059d917b5c6312bac0c137971a32815ddbda9c682b949f2986b4d34"}, ] django = [ - {file = "Django-2.1.5-py3-none-any.whl", hash = "sha256:a32c22af23634e1d11425574dce756098e015a165be02e4690179889b207c7a8"}, - {file = "Django-2.1.5.tar.gz", hash = "sha256:d6393918da830530a9516bbbcbf7f1214c3d733738779f06b0f649f49cc698c3"}, + {file = "Django-2.2.19-py3-none-any.whl", hash = "sha256:e319a7164d6d30cb177b3fd74d02c52f1185c37304057bb76d74047889c605d9"}, + {file = "Django-2.2.19.tar.gz", hash = "sha256:30c235dec87e05667597e339f194c9fed6c855bda637266ceee891bf9093da43"}, ] django-app-namespace-template-loader = [ {file = "django-app-namespace-template-loader-0.4.1.tar.gz", hash = "sha256:7a450985479a2e07fe8a1e4e8208fc9e1d8b35503526dd28eba5f8ad4ba31d4e"}, {file = "django_app_namespace_template_loader-0.4.1-py2.py3-none-any.whl", hash = "sha256:356539413b5d1de0eff91aea7a03806b5ef6874ee5420ea8c273f72bbc601d74"}, ] django-auditlog = [ - {file = "django-auditlog-0.4.5.tar.gz", hash = "sha256:70bfc673e7023d91ab8449d745425e7a4ce5eaaf2bdcbfb9b1a2209a7af60b03"}, + {file = "django-auditlog-0.4.7.tar.gz", hash = "sha256:1848952e02759cd2ebf1ec980ed3ef5b855b3501936dcea23eac41313e39c0b1"}, ] django-autocomplete-light = [ - {file = "django-autocomplete-light-3.4.1.tar.gz", hash = "sha256:29ce2626a11eab2333e5aa9f95166a6d4400f11b5a05e8f23fa77017b1a9089a"}, + {file = "django-autocomplete-light-3.8.2.tar.gz", hash = "sha256:25f0ea71b59a8f1f97a8a564e33e429570b0ea77c5eac81f7beb283073b4ba90"}, ] django-bootstrap3 = [ {file = "django-bootstrap3-11.1.0.tar.gz", hash = "sha256:c417b25328fb8e97cb89e1f07d35632602d702e6eaca863328e833939d0d1743"}, ] django-cors-headers = [ - {file = "django-cors-headers-2.0.1.tar.gz", hash = "sha256:c766daf9eefcb9536af9817703ea29124fffee06870f9e523b75144b4d39a694"}, - {file = "django_cors_headers-2.0.1-py2.py3-none-any.whl", hash = "sha256:638aaba85f96af62557656ec559672f03d7c61769685acc405eacfaba9d4e93f"}, + {file = "django-cors-headers-2.5.3.tar.gz", hash = "sha256:c7987faa9aaef7f6a802b0f354a719e80a9158c284f530265ac792f1ee725e52"}, + {file = "django_cors_headers-2.5.3-py2.py3-none-any.whl", hash = "sha256:ceacbd60dd5a65c95e65e74b5559bd4161aa3fe5713c44e1f3417a12bd41e7ba"}, ] django-filter = [ - {file = "django-filter-2.0.0.tar.gz", hash = "sha256:6f4e4bc1a11151178520567b50320e5c32f8edb552139d93ea3e30613b886f56"}, - {file = "django_filter-2.0.0-py3-none-any.whl", hash = "sha256:86c3925020c27d072cdae7b828aaa5d165c2032a629abbe3c3a1be1edae61c58"}, + {file = "django-filter-2.4.0.tar.gz", hash = "sha256:84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06"}, + {file = "django_filter-2.4.0-py3-none-any.whl", hash = "sha256:e00d32cebdb3d54273c48f4f878f898dced8d5dfaad009438fe61ebdf535ace1"}, ] django-import-export = [ {file = "django-import-export-0.7.0.tar.gz", hash = "sha256:6e748fcc647fe2a82a55136ebcbe806a45fd7fb5b1e32b33759181f1e67eeb1b"}, @@ -717,25 +789,26 @@ django-jsonfield = [ {file = "django_jsonfield-1.4.1-py2.py3-none-any.whl", hash = "sha256:ccb2fe623e1bf7799e49c593b0a89a85084ef8d3debbf26d92a54e27b5305d72"}, ] django-modeltranslation = [ - {file = "django-modeltranslation-0.13b1.tar.gz", hash = "sha256:254ebda6caea5683407e1fb3e45ceaa2275778c6dc2db2b9d4fec3df373c2cdd"}, + {file = "django-modeltranslation-0.13.4.tar.gz", hash = "sha256:c03070a29e35b498da3f07e80d6847bf9236e6231102829e62d437b6022cfb5c"}, ] django-nose = [ - {file = "django-nose-1.4.5.tar.gz", hash = "sha256:87663f18cb25f01d56c84ac1ff8a0e6e6a6246264b2549b751cb239d0642e76a"}, - {file = "django_nose-1.4.5-py2.py3-none-any.whl", hash = "sha256:5df2df802c607daeeab8ac1e93abf54508ed6133eb93852310f512000124b4a5"}, + {file = "django-nose-1.4.7.tar.gz", hash = "sha256:a4885cd002d65fd2de96e2bb2563ef477c3fbe207009360c015fca5c3b5561b7"}, + {file = "django_nose-1.4.7-py2.py3-none-any.whl", hash = "sha256:304adc447ee35b889b733d7106004f98aa401d8387ddcada5d4f2239d86790a9"}, ] django-phonenumber-field = [ {file = "django-phonenumber-field-4.0.0.tar.gz", hash = "sha256:d4580cc3352f4433962825f9927e6669852c1b40ec484fcb5a74064dabc1201a"}, {file = "django_phonenumber_field-4.0.0-py3-none-any.whl", hash = "sha256:2ca3bb0ada0ebc164bd903a981a34f1202a4294006e520b0da961bd7ce9f20a4"}, ] django-suit = [ - {file = "django-suit-0.2.26.tar.gz", hash = "sha256:19ed865a478dfca81cb5f50a70317700dd70da92c465093251d0e14330a2b92b"}, + {file = "django-suit-0.2.28.tar.gz", hash = "sha256:bacd8a079fcc08deb6efd0d7f60241e3c319526939ae1abe8ccfbc1b03e97104"}, + {file = "django_suit-0.2.28-py2.py3-none-any.whl", hash = "sha256:256412597ac8e9461780542eebb12b37f65ff702bf23de23d07d245510c64ff2"}, ] django-tables2 = [ - {file = "django-tables2-1.6.1.tar.gz", hash = "sha256:d5d3ad99580121f7ec46ea9e2420069bbd6d2f33b4fde73a376c6bf27d551146"}, + {file = "django-tables2-1.21.2.tar.gz", hash = "sha256:c5c979201b7a2f7e88f2784dcd478e0c809d3a2053dea576cb71ce51676bbf7a"}, ] djangorestframework = [ - {file = "djangorestframework-3.8.2-py2.py3-none-any.whl", hash = "sha256:c375e4f95a3a64fccac412e36fb42ba36881e52313ec021ef410b40f67cddca4"}, - {file = "djangorestframework-3.8.2.tar.gz", hash = "sha256:b6714c3e4b0f8d524f193c91ecf5f5450092c2145439ac2769711f7eba89a9d9"}, + {file = "djangorestframework-3.12.4-py3-none-any.whl", hash = "sha256:6d1d59f623a5ad0509fe0d6bfe93cbdfe17b8116ebc8eda86d45f6e16e819aaf"}, + {file = "djangorestframework-3.12.4.tar.gz", hash = "sha256:f747949a8ddac876e879190df194b925c177cdeb725a099db1460872f7c0a7f2"}, ] djangorestframework-jwt = [ {file = "djangorestframework-jwt-1.11.0.tar.gz", hash = "sha256:5efe33032f3a4518a300dc51a51c92145ad95fb6f4b272e5aa24701db67936a7"}, @@ -749,8 +822,12 @@ et-xmlfile = [ {file = "et_xmlfile-1.0.1.tar.gz", hash = "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"}, ] gunicorn = [ - {file = "gunicorn-19.9.0-py2.py3-none-any.whl", hash = "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471"}, - {file = "gunicorn-19.9.0.tar.gz", hash = "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"}, + {file = "gunicorn-19.10.0-py2.py3-none-any.whl", hash = "sha256:c3930fe8de6778ab5ea716cab432ae6335fa9f03b3f2c3e02529214c476f4bcb"}, + {file = "gunicorn-19.10.0.tar.gz", hash = "sha256:f9de24e358b841567063629cd0a656b26792a41e23a24d0dcb40224fc3940081"}, +] +idna = [ + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] jdcal = [ {file = "jdcal-1.4.1-py2.py3-none-any.whl", hash = "sha256:1abf1305fce18b4e8aa248cf8fe0c56ce2032392bc64bbd61b5dff2a19ec8bba"}, @@ -765,12 +842,12 @@ lml = [ {file = "lml-0.1.0.tar.gz", hash = "sha256:57a085a29bb7991d70d41c6c3144c560a8e35b4c1030ffb36d85fa058773bcc5"}, ] mailjet-rest = [ - {file = "mailjet_rest-1.3.3-py3-none-any.whl", hash = "sha256:f95a44d5cef2ce003776c4f847f885790da513ec0fe78c9c4ff6f6bf15325b71"}, - {file = "mailjet_rest-1.3.3.tar.gz", hash = "sha256:f14424df10c30083491dcaa5902ff9b159af82bca261af5e7b2213afdcf7a11c"}, + {file = "mailjet_rest-1.3.4-py3-none-any.whl", hash = "sha256:635d53ac3fd61020f309c24ee977ae3458654ab39f9c36fc4b50c74e5d8ad410"}, + {file = "mailjet_rest-1.3.4.tar.gz", hash = "sha256:e02663fa0369543bcd48c37a146e8143bb12b9f3512af2d5ba6dfbcc99e64a2d"}, ] markdown = [ - {file = "Markdown-3.2.2-py3-none-any.whl", hash = "sha256:c467cd6233885534bf0fe96e62e3cf46cfc1605112356c4f9981512b8174de59"}, - {file = "Markdown-3.2.2.tar.gz", hash = "sha256:1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17"}, + {file = "Markdown-3.3.4-py3-none-any.whl", hash = "sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"}, + {file = "Markdown-3.3.4.tar.gz", hash = "sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49"}, ] nose = [ {file = "nose-1.3.7-py2-none-any.whl", hash = "sha256:dadcddc0aefbf99eea214e0f1232b94f2fa9bd98fa8353711dacb112bfcbbb2a"}, @@ -827,46 +904,49 @@ pillow = [ {file = "Pillow-8.1.2.tar.gz", hash = "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44"}, ] psycopg2-binary = [ - {file = "psycopg2-binary-2.8.4.tar.gz", hash = "sha256:3a2522b1d9178575acee4adf8fd9f979f9c0449b00b4164bb63c3475ea6528ed"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:890167d5091279a27e2505ff0e1fb273f8c48c41d35c5b92adbf4af80e6b2ed6"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:dbc5cd56fff1a6152ca59445178652756f4e509f672e49ccdf3d79c1043113a4"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:7f42a8490c4fe854325504ce7a6e4796b207960dabb2cbafe3c3959cb00d1d7e"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27m-win32.whl", hash = "sha256:8578d6b8192e4c805e85f187bc530d0f52ba86c39172e61cd51f68fddd648103"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27m-win_amd64.whl", hash = "sha256:5dd90c5438b4f935c9d01fcbad3620253da89d19c1f5fca9158646407ed7df35"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9aadff9032e967865f9778485571e93908d27dab21d0fdfdec0ca779bb6f8ad9"}, - {file = "psycopg2_binary-2.8.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:659c815b5b8e2a55193ede2795c1e2349b8011497310bb936da7d4745652823b"}, - {file = "psycopg2_binary-2.8.4-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:2166e770cb98f02ed5ee2b0b569d40db26788e0bf2ec3ae1a0d864ea6f1d8309"}, - {file = "psycopg2_binary-2.8.4-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:7e6e3c52e6732c219c07bd97fff6c088f8df4dae3b79752ee3a817e6f32e177e"}, - {file = "psycopg2_binary-2.8.4-cp34-cp34m-win32.whl", hash = "sha256:040234f8a4a8dfd692662a8308d78f63f31a97e1c42d2480e5e6810c48966a29"}, - {file = "psycopg2_binary-2.8.4-cp34-cp34m-win_amd64.whl", hash = "sha256:69b13fdf12878b10dc6003acc8d0abf3ad93e79813fd5f3812497c1c9fb9be49"}, - {file = "psycopg2_binary-2.8.4-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:19dc39616850342a2a6db70559af55b22955f86667b5f652f40c0e99253d9881"}, - {file = "psycopg2_binary-2.8.4-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:9f24f383a298a0c0f9b3113b982e21751a8ecde6615494a3f1470eb4a9d70e9e"}, - {file = "psycopg2_binary-2.8.4-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:eaed1c65f461a959284649e37b5051224f4db6ebdc84e40b5e65f2986f101a08"}, - {file = "psycopg2_binary-2.8.4-cp35-cp35m-win32.whl", hash = "sha256:4c6717962247445b4f9e21c962ea61d2e884fc17df5ddf5e35863b016f8a1f03"}, - {file = "psycopg2_binary-2.8.4-cp35-cp35m-win_amd64.whl", hash = "sha256:84156313f258eafff716b2961644a4483a9be44a5d43551d554844d15d4d224e"}, - {file = "psycopg2_binary-2.8.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3b5deaa3ee7180585a296af33e14c9b18c218d148e735c7accf78130765a47e3"}, - {file = "psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5057669b6a66aa9ca118a2a860159f0ee3acf837eda937bdd2a64f3431361a2d"}, - {file = "psycopg2_binary-2.8.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:afd96845e12638d2c44d213d4810a08f4dc4a563f9a98204b7428e567014b1cd"}, - {file = "psycopg2_binary-2.8.4-cp36-cp36m-win32.whl", hash = "sha256:a73021b44813b5c84eda4a3af5826dd72356a900bac9bd9dd1f0f81ee1c22c2f"}, - {file = "psycopg2_binary-2.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:407af6d7e46593415f216c7f56ba087a9a42bd6dc2ecb86028760aa45b802bd7"}, - {file = "psycopg2_binary-2.8.4-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3aa773580f85a28ffdf6f862e59cb5a3cc7ef6885121f2de3fca8d6ada4dbf3b"}, - {file = "psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:eac8a3499754790187bb00574ab980df13e754777d346f85e0ff6df929bcd964"}, - {file = "psycopg2_binary-2.8.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:7a1cb80e35e1ccea3e11a48afe65d38744a0e0bde88795cc56a4d05b6e4f9d70"}, - {file = "psycopg2_binary-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:086f7e89ec85a6704db51f68f0dcae432eff9300809723a6e8782c41c2f48e03"}, - {file = "psycopg2_binary-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b73ddf033d8cd4cc9dfed6324b1ad2a89ba52c410ef6877998422fcb9c23e3a8"}, - {file = "psycopg2_binary-2.8.4-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:4c3c09fb674401f630626310bcaf6cd6285daf0d5e4c26d6e55ca26a2734e39b"}, - {file = "psycopg2_binary-2.8.4-cp38-cp38-manylinux1_i686.whl", hash = "sha256:18ca813fdb17bc1db73fe61b196b05dd1ca2165b884dd5ec5568877cabf9b039"}, - {file = "psycopg2_binary-2.8.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:50446fae5681fc99f87e505d4e77c9407e683ab60c555ec302f9ac9bffa61103"}, - {file = "psycopg2_binary-2.8.4-cp38-cp38-win32.whl", hash = "sha256:98e10634792ac0e9e7a92a76b4991b44c2325d3e7798270a808407355e7bb0a1"}, - {file = "psycopg2_binary-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:b8f490f5fad1767a1331df1259763b3bad7d7af12a75b950c2843ba319b2415f"}, + {file = "psycopg2-binary-2.8.6.tar.gz", hash = "sha256:11b9c0ebce097180129e422379b824ae21c8f2a6596b159c7659e2e5a00e1aa0"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:d14b140a4439d816e3b1229a4a525df917d6ea22a0771a2a78332273fd9528a4"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1fabed9ea2acc4efe4671b92c669a213db744d2af8a9fc5d69a8e9bc14b7a9db"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f5ab93a2cb2d8338b1674be43b442a7f544a0971da062a5da774ed40587f18f5"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27m-win32.whl", hash = "sha256:b4afc542c0ac0db720cf516dd20c0846f71c248d2b3d21013aa0d4ef9c71ca25"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27m-win_amd64.whl", hash = "sha256:e74a55f6bad0e7d3968399deb50f61f4db1926acf4a6d83beaaa7df986f48b1c"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c"}, + {file = "psycopg2_binary-2.8.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ad20d2eb875aaa1ea6d0f2916949f5c08a19c74d05b16ce6ebf6d24f2c9f75d1"}, + {file = "psycopg2_binary-2.8.6-cp34-cp34m-win32.whl", hash = "sha256:950bc22bb56ee6ff142a2cb9ee980b571dd0912b0334aa3fe0fe3788d860bea2"}, + {file = "psycopg2_binary-2.8.6-cp34-cp34m-win_amd64.whl", hash = "sha256:b8a3715b3c4e604bcc94c90a825cd7f5635417453b253499664f784fc4da0152"}, + {file = "psycopg2_binary-2.8.6-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:d1b4ab59e02d9008efe10ceabd0b31e79519da6fb67f7d8e8977118832d0f449"}, + {file = "psycopg2_binary-2.8.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:ac0c682111fbf404525dfc0f18a8b5f11be52657d4f96e9fcb75daf4f3984859"}, + {file = "psycopg2_binary-2.8.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7d92a09b788cbb1aec325af5fcba9fed7203897bbd9269d5691bb1e3bce29550"}, + {file = "psycopg2_binary-2.8.6-cp35-cp35m-win32.whl", hash = "sha256:aaa4213c862f0ef00022751161df35804127b78adf4a2755b9f991a507e425fd"}, + {file = "psycopg2_binary-2.8.6-cp35-cp35m-win_amd64.whl", hash = "sha256:c2507d796fca339c8fb03216364cca68d87e037c1f774977c8fc377627d01c71"}, + {file = "psycopg2_binary-2.8.6-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ee69dad2c7155756ad114c02db06002f4cded41132cc51378e57aad79cc8e4f4"}, + {file = "psycopg2_binary-2.8.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:e82aba2188b9ba309fd8e271702bd0d0fc9148ae3150532bbb474f4590039ffb"}, + {file = "psycopg2_binary-2.8.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d5227b229005a696cc67676e24c214740efd90b148de5733419ac9aaba3773da"}, + {file = "psycopg2_binary-2.8.6-cp36-cp36m-win32.whl", hash = "sha256:a0eb43a07386c3f1f1ebb4dc7aafb13f67188eab896e7397aa1ee95a9c884eb2"}, + {file = "psycopg2_binary-2.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:e1f57aa70d3f7cc6947fd88636a481638263ba04a742b4a37dd25c373e41491a"}, + {file = "psycopg2_binary-2.8.6-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:833709a5c66ca52f1d21d41865a637223b368c0ee76ea54ca5bad6f2526c7679"}, + {file = "psycopg2_binary-2.8.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ba28584e6bca48c59eecbf7efb1576ca214b47f05194646b081717fa628dfddf"}, + {file = "psycopg2_binary-2.8.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6a32f3a4cb2f6e1a0b15215f448e8ce2da192fd4ff35084d80d5e39da683e79b"}, + {file = "psycopg2_binary-2.8.6-cp37-cp37m-win32.whl", hash = "sha256:0e4dc3d5996760104746e6cfcdb519d9d2cd27c738296525d5867ea695774e67"}, + {file = "psycopg2_binary-2.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:cec7e622ebc545dbb4564e483dd20e4e404da17ae07e06f3e780b2dacd5cee66"}, + {file = "psycopg2_binary-2.8.6-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ba381aec3a5dc29634f20692349d73f2d21f17653bda1decf0b52b11d694541f"}, + {file = "psycopg2_binary-2.8.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a0c50db33c32594305b0ef9abc0cb7db13de7621d2cadf8392a1d9b3c437ef77"}, + {file = "psycopg2_binary-2.8.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2dac98e85565d5688e8ab7bdea5446674a83a3945a8f416ad0110018d1501b94"}, + {file = "psycopg2_binary-2.8.6-cp38-cp38-win32.whl", hash = "sha256:bd1be66dde2b82f80afb9459fc618216753f67109b859a361cf7def5c7968729"}, + {file = "psycopg2_binary-2.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:8cd0fb36c7412996859cb4606a35969dd01f4ea34d9812a141cd920c3b18be77"}, + {file = "psycopg2_binary-2.8.6-cp39-cp39-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:89705f45ce07b2dfa806ee84439ec67c5d9a0ef20154e0e475e2b2ed392a5b83"}, + {file = "psycopg2_binary-2.8.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:42ec1035841b389e8cc3692277a0bd81cdfe0b65d575a2c8862cec7a80e62e52"}, + {file = "psycopg2_binary-2.8.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7312e931b90fe14f925729cde58022f5d034241918a5c4f9797cac62f6b3a9dd"}, + {file = "psycopg2_binary-2.8.6-cp39-cp39-win32.whl", hash = "sha256:6422f2ff0919fd720195f64ffd8f924c1395d30f9a495f31e2392c2efafb5056"}, + {file = "psycopg2_binary-2.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:15978a1fbd225583dd8cdaf37e67ccc278b5abecb4caf6b2d6b8e2b948e953f6"}, ] pycodestyle = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] pyexcel = [ - {file = "pyexcel-0.5.14-py2.py3-none-any.whl", hash = "sha256:df3248c2d7bc3614e91aa9b90838071d4ef6d08ecf24adc43752db3dcdfc8a38"}, - {file = "pyexcel-0.5.14.tar.gz", hash = "sha256:210c084af545dbfa7489c161851b8998e3d279a44ba7bf36cb691a5920a11556"}, + {file = "pyexcel-0.5.15-py2.py3-none-any.whl", hash = "sha256:7fac067e65567c380933b4d382587a5ce6581d0ad85992f6f0bc7c3f16012184"}, + {file = "pyexcel-0.5.15.tar.gz", hash = "sha256:f0a7797f3a0de9e6f81151c9581fa90c4e1afce207dc47d2f0ba728dd2e24467"}, ] pyexcel-io = [ {file = "pyexcel-io-0.6.4.tar.gz", hash = "sha256:00f15f4bae2947de49b3206f2600f78780008e044380f7aafe0ce52969cda4ca"}, @@ -928,16 +1008,20 @@ pyyaml = [ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] requests = [ - {file = "requests-2.11.1-py2.py3-none-any.whl", hash = "sha256:545c4855cd9d7c12671444326337013766f4eea6068c3f0307fb2dc2696d580e"}, - {file = "requests-2.11.1.tar.gz", hash = "sha256:5acf980358283faba0b897c73959cecf8b841205bb4b2ad3ef545f46eae1a133"}, + {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, + {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"}, ] safety = [ {file = "safety-1.10.3-py2.py3-none-any.whl", hash = "sha256:5f802ad5df5614f9622d8d71fedec2757099705c2356f862847c58c6dfe13e84"}, {file = "safety-1.10.3.tar.gz", hash = "sha256:30e394d02a20ac49b7f65292d19d38fa927a8f9582cdfd3ad1adbbc66c641ad5"}, ] six = [ - {file = "six-1.12.0-py2.py3-none-any.whl", hash = "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"}, - {file = "six-1.12.0.tar.gz", hash = "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"}, + {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, + {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, +] +sqlparse = [ + {file = "sqlparse-0.4.1-py3-none-any.whl", hash = "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0"}, + {file = "sqlparse-0.4.1.tar.gz", hash = "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8"}, ] tablib = [ {file = "tablib-3.0.0-py3-none-any.whl", hash = "sha256:41aa40981cddd7ec4d1fabeae7c38d271601b306386bd05b5c3bcae13e5aeb20"}, @@ -951,8 +1035,12 @@ toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] +urllib3 = [ + {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, + {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, +] uwsgi = [ - {file = "uwsgi-2.0.18.tar.gz", hash = "sha256:4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583"}, + {file = "uWSGI-2.0.19.1.tar.gz", hash = "sha256:faa85e053c0b1be4d5585b0858d3a511d2cd10201802e8676060fd0a109e5869"}, ] whitenoise = [ {file = "whitenoise-4.1.4-py2.py3-none-any.whl", hash = "sha256:6dfea214b7c12efd689007abf9afa87a426586e9dbc051873ad2c8e535e2a1ac"}, diff --git a/pyproject.toml b/pyproject.toml index b9afc52..460aa67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,35 +6,35 @@ authors = ["Your Name "] [tool.poetry.dependencies] python = "^3.9" -decorator = "4.0.9" -Django = "2.1.5" -requests = "2.11.1" -django-cors-headers = "2.0.1" -djangorestframework = "3.8.2" -djangorestframework-jwt = "1.11.0" -django-nose = "1.4.5" -psycopg2-binary = "2.8.4" -django-bootstrap3 = "11.1.0" -django-tables2 = "1.6.1" -dealer = "2.0.5" -django-modeltranslation = "0.13b1" -django-auditlog = "0.4.5" -django-phonenumber-field = {version = "4.0.0", extras = ["phonenumbers"]} -django-autocomplete-light = "3.4.1" -six = "1.12.0" -django-suit = "0.2.26" -pyexcel = "0.5.14" -pyexcel-xlsx = "0.5.8" -django-import-export = "0.7.0" -openpyxl = "2.6.4" -django-app-namespace-template-loader = "0.4.1" -django-filter = "2.0.0" -whitenoise = "4.1.4" -jsonschema = "3.2.0" -mailjet-rest = "1.3.3" -Markdown = "3.2.2" -uWSGI = "2.0.18" -gunicorn = "19.9.0" +decorator = "^4.0.9" +Django = "^2.2.19" +requests = "^2.11.1" +django-cors-headers = "^2.0.1" +djangorestframework = "^3.12.4" +djangorestframework-jwt = "^1.11.0" +django-nose = "^1.4.5" +psycopg2-binary = "^2.8.4" +django-bootstrap3 = "^11.1.0" +django-tables2 = "^1.6.1" +dealer = "^2.0.5" +django-modeltranslation = "^0.13b1" +django-auditlog = "^0.4.5" +django-phonenumber-field = {version = "^4.0.0", extras = ["phonenumbers"]} +django-autocomplete-light = "^3.4.1" +six = "^1.12.0" +django-suit = "^0.2.26" +pyexcel = "^0.5.14" +pyexcel-xlsx = "^0.5.8" +django-import-export = "^0.7.0" +openpyxl = "^2.6.4" +django-app-namespace-template-loader = "^0.4.1" +django-filter = "^2.0.0" +whitenoise = "^4.1.4" +jsonschema = "^3.2.0" +mailjet-rest = "^1.3.3" +Markdown = "^3.2.2" +uWSGI = "^2.0.18" +gunicorn = "^19.9.0" Pillow = "^8.1.2" [tool.poetry.dev-dependencies] From f1ea08bc301ca3068acc4bf098f21e0f080a6809 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 20:15:19 +0300 Subject: [PATCH 05/20] remove old files --- .deploy_dev.sh | 16 ---------------- .remarkignore | 1 - 2 files changed, 17 deletions(-) delete mode 100644 .deploy_dev.sh delete mode 100644 .remarkignore diff --git a/.deploy_dev.sh b/.deploy_dev.sh deleted file mode 100644 index eb04f90..0000000 --- a/.deploy_dev.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -echo "Deploying to development." -set -e -set -x - -pushd deployment - -docker-compose down -docker pull "$1" -docker-compose up -d - -popd - -set +x -set +e \ No newline at end of file diff --git a/.remarkignore b/.remarkignore deleted file mode 100644 index c0bcb53..0000000 --- a/.remarkignore +++ /dev/null @@ -1 +0,0 @@ -global_static From 4029031bf0fb14204d3ecbbf81ad1dec524645bd Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 20:25:16 +0300 Subject: [PATCH 06/20] update django-cors-headers --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index e930849..59c7e03 100644 --- a/poetry.lock +++ b/poetry.lock @@ -148,14 +148,14 @@ python-versions = "*" [[package]] name = "django-cors-headers" -version = "2.5.3" +version = "3.7.0" description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.dependencies] -Django = ">=1.11" +Django = ">=2.2" [[package]] name = "django-filter" @@ -666,7 +666,7 @@ brotli = ["brotli"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "795169b8742b82e4eeec36ddedb808b159014f58d5b7d724dfef57c7666131c9" +content-hash = "d92bc5b77185d1398c29de406f936fc79abaf6cd82ddb364ef9b6238d165a18d" [metadata.files] attrs = [ @@ -773,8 +773,8 @@ django-bootstrap3 = [ {file = "django-bootstrap3-11.1.0.tar.gz", hash = "sha256:c417b25328fb8e97cb89e1f07d35632602d702e6eaca863328e833939d0d1743"}, ] django-cors-headers = [ - {file = "django-cors-headers-2.5.3.tar.gz", hash = "sha256:c7987faa9aaef7f6a802b0f354a719e80a9158c284f530265ac792f1ee725e52"}, - {file = "django_cors_headers-2.5.3-py2.py3-none-any.whl", hash = "sha256:ceacbd60dd5a65c95e65e74b5559bd4161aa3fe5713c44e1f3417a12bd41e7ba"}, + {file = "django-cors-headers-3.7.0.tar.gz", hash = "sha256:96069c4aaacace786a34ee7894ff680780ec2644e4268b31181044410fecd12e"}, + {file = "django_cors_headers-3.7.0-py3-none-any.whl", hash = "sha256:1ac2b1213de75a251e2ba04448da15f99bcfcbe164288ae6b5ff929dc49b372f"}, ] django-filter = [ {file = "django-filter-2.4.0.tar.gz", hash = "sha256:84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06"}, diff --git a/pyproject.toml b/pyproject.toml index 460aa67..25b73aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ python = "^3.9" decorator = "^4.0.9" Django = "^2.2.19" requests = "^2.11.1" -django-cors-headers = "^2.0.1" +django-cors-headers = "^3.7.0" djangorestframework = "^3.12.4" djangorestframework-jwt = "^1.11.0" django-nose = "^1.4.5" From 78575075e56d4c4fdfa94a86daec1bc853313d7b Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 21:40:38 +0300 Subject: [PATCH 07/20] update Dockerfile to use poetry --- Dockerfile | 27 ++++++++++++++++----------- docker-compose.yml | 1 - 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index a82b6ad..458ecdd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,24 @@ -FROM python:3.7-alpine +FROM python:3.9-alpine ENV PYTHONUNBUFFERED 1 WORKDIR /app -COPY requirements.txt ./ -COPY requirements.production.txt ./ COPY . ./ -# uWSGI, gunicorn etc. -RUN apk add --no-cache python3-dev build-base linux-headers pcre-dev openssl bash \ +ENV POETRY_VERSION=1.1.4 + +# Rust and shit https://cryptography.io/en/latest/installation.html +RUN apk --no-cache --update --upgrade add gcc musl-dev python3-dev libffi-dev openssl-dev cargo \ + # Pillow and maybe some unnneeded? + jpeg-dev zlib-dev build-base linux-headers pcre-dev bash \ # PSQL - && apk add --no-cache postgresql-dev \ - # Pillow - && apk add --no-cache jpeg-dev zlib-dev \ - && pip install --upgrade pip \ - && pip install -r requirements.txt \ - && pip install -r requirements.production.txt + && apk add --no-cache postgresql-dev + +# System deps: +RUN pip install -U pip +RUN pip install "poetry==$POETRY_VERSION" + +# Project initialization: +RUN poetry config virtualenvs.create false \ + && poetry install --no-dev --no-interaction --no-ansi RUN python manage.py collectstatic --noinput diff --git a/docker-compose.yml b/docker-compose.yml index 41393bf..8daaed6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,6 @@ services: web: build: . image: registry.gitlab.com/sahkoinsinoorikilta/vtmk/web2.0-backend - command: ["bash", "-c", "cd /app & bash setup.sh --no-input --no-npm && gunicorn -w 4 -b 0.0.0.0:8000 sikweb.wsgi"] env_file: - .env ports: From 441227bc15e9b26b1ba304d478f353c6e5dc62a8 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Mon, 29 Mar 2021 21:41:06 +0300 Subject: [PATCH 08/20] remove requirements.txt files --- requirements.production.txt | 2 -- requirements.txt | 44 ------------------------------------- 2 files changed, 46 deletions(-) delete mode 100644 requirements.production.txt delete mode 100644 requirements.txt diff --git a/requirements.production.txt b/requirements.production.txt deleted file mode 100644 index cefca61..0000000 --- a/requirements.production.txt +++ /dev/null @@ -1,2 +0,0 @@ -uWSGI==2.0.18 -gunicorn==19.9.0 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 3b93c91..0000000 --- a/requirements.txt +++ /dev/null @@ -1,44 +0,0 @@ -backports.shutil-get-terminal-size==1.0.0 -decorator==4.0.9 -Django==2.1.5 -ipython==4.2.0 -ipython-genutils==0.1.0 -pexpect==4.1.0 -pickleshare==0.7.2 -ptyprocess==0.5.1 -pytz==2016.4 -simplegeneric==0.8.1 -traitlets==4.2.1 -Pillow==7.2.0 -requests==2.11.1 -django-nocaptcha-recaptcha==0.0.19 -django-cors-headers==2.0.1 -djangorestframework==3.8.2 -PyJWT==1.6.4 -djangorestframework-jwt==1.11.0 -coverage==4.3.4 -django-nose==1.4.5 -nose-exclude==0.5.0 -psycopg2-binary==2.8.4 -django-bootstrap3==11.1.0 -django-tables2==1.6.1 -pycodestyle==2.6.0 -dealer==2.0.5 -django-modeltranslation==0.13b1 -django-auditlog==0.4.5 -phonenumbers==8.11.4 -django-phonenumber-field[phonenumbers]==4.0.0 -django-autocomplete-light==3.4.1 -six==1.12.0 -django-suit==0.2.26 -telepot==12.3 -pyexcel==0.5.14 -pyexcel-xlsx==0.5.8 -django-import-export==0.7.0 -openpyxl==2.6.4 -django-app-namespace-template-loader==0.4.1 -django-filter==2.0.0 -whitenoise==4.1.4 -jsonschema==3.2.0 -mailjet-rest==1.3.3 -markdown==3.2.2 From 5049ef415df0ab64aa1d759249bae32cb5bb4763 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 16:48:44 +0300 Subject: [PATCH 09/20] update python to 3.9, fix gitlab-ci test step --- .gitignore | 23 +++++------------ .gitlab-ci.yml | 9 ++++--- .python-version | 2 +- pyright.json | 2 +- setup.sh | 68 ------------------------------------------------- 5 files changed, 14 insertions(+), 90 deletions(-) delete mode 100755 setup.sh diff --git a/.gitignore b/.gitignore index 68bbb03..88217a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,14 @@ -*.swp +.DS_Store .env -*~ *.pyc -*.sqlite3 -uwsgi.ini -uwsgi.log -members/logs/* -.idea/ -logs/ +/collected_static/ /media/ +logs/ +members/logs/* node_modules/ .coverage -db.sqlite3 -requirements_henu.txt -/collected_static/ -mydatabase -settings.json .vscode/ -.DS_Store +.idea/ *.code-workspace -sik_test -venv/ \ No newline at end of file +venv/ +.venv/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2a58095..ed3469e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,7 +16,7 @@ install: expire_in: 1 week test: - image: python:3.7 + image: python:3.9 stage: test needs: [] services: @@ -28,14 +28,15 @@ test: DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB" DB_HOST: postgres script: - - python -V - - pip install -r requirements.txt + - pip install poetry==1.1.4 + - poetry config virtualenvs.create false + - poetry install --no-dev --no-interaction --no-ansi - python manage.py migrate --noinput - python manage.py createdefaultadmin - python manage.py test lint:py: - image: python:3.7 + image: python:3.9 stage: lint needs: [] script: diff --git a/.python-version b/.python-version index 0833a98..bd28b9c 100644 --- a/.python-version +++ b/.python-version @@ -1 +1 @@ -3.7.4 +3.9 diff --git a/pyright.json b/pyright.json index 4262159..7ced116 100644 --- a/pyright.json +++ b/pyright.json @@ -12,5 +12,5 @@ "reportMissingImports": true, "reportMissingTypeStubs": false, - "pythonVersion": "3.7.4" + "pythonVersion": "3.9" } \ No newline at end of file diff --git a/setup.sh b/setup.sh deleted file mode 100755 index ec3fc01..0000000 --- a/setup.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -echo "SIK WEB 2.0" -echo "This script will set up the environment for this project." -echo "=========================================================" -echo "Dependencies: python3.7" - -INTERACTIVE="true" -USE_NPM="true" -if [[ $* == *--no-input* ]] -then - INTERACTIVE="false" -fi -if [[ $* == *--no-npm* ]] -then - USE_NPM="false" -fi - -$INTERACTIVE || (echo "Running in non-interactive mode." && env) - -$INTERACTIVE && read -p "Are these programs installed? [y/n]" -n 1 -r || REPLY="y" -echo "" - -if [[ ! $REPLY =~ ^[Yy]$ ]] -then - echo "Please install the dependencies. Exiting." - exit 0 -fi - -$INTERACTIVE && read -p "Is virtualenv activated? [y/n]" -n 1 -r || REPLY="y" -echo "" - -if [[ ! $REPLY =~ ^[Yy]$ ]] -then - echo "Please activate virtualenv first. Exiting." - exit 0 -fi - -$INTERACTIVE && read -p "Copy pre-push hook to .git/hooks? (recommended) [y/n]" -n 1 -r || REPLY="y" -echo "" - -if [[ $REPLY =~ ^[Yy]$ ]] -then - cp "$PWD/scripts/git/pre-push" "$PWD/.git/hooks/pre-push" -fi - - -$INTERACTIVE && read -p "Start setup? [y/n]" -n 1 -r || REPLY="y" -echo "" - -if [[ ! $REPLY =~ ^[Yy]$ ]] -then - echo "Exiting." - exit 0 -fi - -set -e -set -x -pip install -r requirements.txt -pip install -r requirements.production.txt -$USE_NPM && npm install -python manage.py migrate -python manage.py createdefaultadmin -set +e -set +x - -echo "Done." -echo "Run 'python manage.py runserver 0.0.0.0:8000' to start the development server!" From 6f6dc09f01038856a16b49dbefc13203b8eb806d Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 16:53:52 +0300 Subject: [PATCH 10/20] install dev deps on test step --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ed3469e..084c2e6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ test: script: - pip install poetry==1.1.4 - poetry config virtualenvs.create false - - poetry install --no-dev --no-interaction --no-ansi + - poetry install --no-interaction --no-ansi - python manage.py migrate --noinput - python manage.py createdefaultadmin - python manage.py test From ed77526f5c0acc41624a083c0640ec78a3f2d840 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 16:57:32 +0300 Subject: [PATCH 11/20] add audit step --- .gitlab-ci.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 084c2e6..e934c7e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,6 @@ stages: - setup + - audit - lint - test - publish @@ -15,6 +16,17 @@ install: - node_modules expire_in: 1 week +audit: + image: python:3.9 + stage: audit + needs: [] + before_script: + - pip install poetry==1.1.4 + - poetry config virtualenvs.create false + - poetry install --no-interaction --no-ansi + script: + - safety check + test: image: python:3.9 stage: test @@ -27,10 +39,11 @@ test: POSTGRES_PASSWORD: postgres DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/$POSTGRES_DB" DB_HOST: postgres - script: + before_script: - pip install poetry==1.1.4 - poetry config virtualenvs.create false - poetry install --no-interaction --no-ansi + script: - python manage.py migrate --noinput - python manage.py createdefaultadmin - python manage.py test From 19f8ff006c28a83a6106e4dbfa579bcc8dd86e5a Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 17:04:11 +0300 Subject: [PATCH 12/20] update gunicorn --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index 59c7e03..8e02053 100644 --- a/poetry.lock +++ b/poetry.lock @@ -299,15 +299,16 @@ python-versions = "*" [[package]] name = "gunicorn" -version = "19.10.0" +version = "20.1.0" description = "WSGI HTTP Server for UNIX" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" +python-versions = ">=3.5" [package.extras] -eventlet = ["eventlet (>=0.9.7)"] -gevent = ["gevent (>=0.13)"] +eventlet = ["eventlet (>=0.24.1)"] +gevent = ["gevent (>=1.4.0)"] +setproctitle = ["setproctitle"] tornado = ["tornado (>=0.2)"] [[package]] @@ -666,7 +667,7 @@ brotli = ["brotli"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "d92bc5b77185d1398c29de406f936fc79abaf6cd82ddb364ef9b6238d165a18d" +content-hash = "c491f605092858575be6858fbed2a379b9e1f93c75920ac3ef2e62ed2ad778fb" [metadata.files] attrs = [ @@ -822,8 +823,7 @@ et-xmlfile = [ {file = "et_xmlfile-1.0.1.tar.gz", hash = "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"}, ] gunicorn = [ - {file = "gunicorn-19.10.0-py2.py3-none-any.whl", hash = "sha256:c3930fe8de6778ab5ea716cab432ae6335fa9f03b3f2c3e02529214c476f4bcb"}, - {file = "gunicorn-19.10.0.tar.gz", hash = "sha256:f9de24e358b841567063629cd0a656b26792a41e23a24d0dcb40224fc3940081"}, + {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, ] idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, diff --git a/pyproject.toml b/pyproject.toml index 25b73aa..671904f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ jsonschema = "^3.2.0" mailjet-rest = "^1.3.3" Markdown = "^3.2.2" uWSGI = "^2.0.18" -gunicorn = "^19.9.0" +gunicorn = "^20.1.0" Pillow = "^8.1.2" [tool.poetry.dev-dependencies] From d889df951ce562def6d78cd31a78e5b523326dc8 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 17:20:15 +0300 Subject: [PATCH 13/20] install build-essential on Dockerfile --- Dockerfile | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 458ecdd..887db47 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,15 @@ -FROM python:3.9-alpine +FROM python:3.9-slim ENV PYTHONUNBUFFERED 1 WORKDIR /app COPY . ./ ENV POETRY_VERSION=1.1.4 -# Rust and shit https://cryptography.io/en/latest/installation.html -RUN apk --no-cache --update --upgrade add gcc musl-dev python3-dev libffi-dev openssl-dev cargo \ - # Pillow and maybe some unnneeded? - jpeg-dev zlib-dev build-base linux-headers pcre-dev bash \ - # PSQL - && apk add --no-cache postgresql-dev +RUN apt-get update && apt-get install --no-install-recommends -y build-essential -# System deps: RUN pip install -U pip RUN pip install "poetry==$POETRY_VERSION" -# Project initialization: RUN poetry config virtualenvs.create false \ && poetry install --no-dev --no-interaction --no-ansi From 39ba51f11af6be3d2328f5c23f07757aaf9c702b Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 17:33:50 +0300 Subject: [PATCH 14/20] Dockerfile from slim Debian image, remove poetry from server image --- Dockerfile | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 887db47..e8aa403 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,28 @@ -FROM python:3.9-slim +FROM python:3.9-slim-buster as builder ENV PYTHONUNBUFFERED 1 -WORKDIR /app COPY . ./ ENV POETRY_VERSION=1.1.4 -RUN apt-get update && apt-get install --no-install-recommends -y build-essential - -RUN pip install -U pip RUN pip install "poetry==$POETRY_VERSION" +RUN poetry export > requirements.txt -RUN poetry config virtualenvs.create false \ - && poetry install --no-dev --no-interaction --no-ansi +FROM python:3.9-slim-buster as server + +WORKDIR /app +COPY . ./ +COPY --from=builder requirements.txt ./ + +ENV PYTHONUNBUFFERED=1 \ + # prevents python creating .pyc files + PYTHONDONTWRITEBYTECODE=1 \ + # pip + PIP_NO_CACHE_DIR=off \ + PIP_DISABLE_PIP_VERSION_CHECK=on \ + PIP_DEFAULT_TIMEOUT=100 + +RUN apt-get update && apt-get install --no-install-recommends -y build-essential +RUN pip install -r requirements.txt RUN python manage.py collectstatic --noinput - CMD ["sh", "-c", "./production_entrypoint.sh"] From 8481e963a374ed8fe990007442f0ce8f66cf63f2 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Wed, 14 Apr 2021 17:48:45 +0300 Subject: [PATCH 15/20] update readme --- linux_install.md | 75 ---------------------------------------------- readme.md | 61 +++++++++++++++++++++---------------- windows_install.md | 55 ---------------------------------- 3 files changed, 36 insertions(+), 155 deletions(-) delete mode 100644 linux_install.md delete mode 100644 windows_install.md diff --git a/linux_install.md b/linux_install.md deleted file mode 100644 index 2c737bb..0000000 --- a/linux_install.md +++ /dev/null @@ -1,75 +0,0 @@ -# Linux/Mac installation instructions - -## Install dependencies - -### Dependency list - -* Python >3.5 -* PostgreSQL >9.5 -* pip3 -* virtualenv -* npm - -Install with apt: - -```bash -sudo apt install python3 -sudo apt install python3-pip -sudo apt install postgresql -sudo pip3 install virtualenv -sudo apt install npm -``` - -More info about PostgreSQL at: -[https://www.postgresql.org/](https://www.postgresql.org) - -These packages might be needed on certain platforms: - -* python3-dev -* libffi-dev -* python3-cffi -* libssl-dev - -## Create a virtual environment for python - -Create a virtualenv in the parent directory. - -```bash -virtualenv -p python3 ../virtualenv.sikweb -``` - -## Activate virtualenv - -Assuming we are at the root of this repository and virtualenv is one level above. - -```bash -. ../virtualenv.sikweb/bin/activate -``` - -## Run install wizard - -Run the install wizard with - -```bash -bash setup.sh -``` - -and follow the instructions. - -## Done - -## In case of error on macOS Mojave 10.14 - -If you get an error saying - -```bash -The headers or library files could not be found for zlib, -a required dependency when compiling Pillow from source. -``` - -run - -```bash -xcode-select --install -sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / -``` diff --git a/readme.md b/readme.md index bbd9293..f6b3eb0 100644 --- a/readme.md +++ b/readme.md @@ -26,18 +26,39 @@ Set up your SSH key authentication in GitLab Profile Settings. Then clone the re git clone git@gitlab.com:sahkoinsinoorikilta/vtmk/web2.0-backend.git cd web2.0-backend git checkout develop -cp scripts/git/pre-push .git/hooks/pre-push # install a script to test code before committing ``` -## Windows install instructions +## Development -See [Windows install instructions](./windows_install.md) +### Poetry -## Linux/Mac install instructions +For depedencies and virtual environment, we use [poetry](https://python-poetry.org/). The easiest integration with VSCode is to have poetry install virtual environment in project folder, configured with -See [Linux/Mac install instructions](./linux_install.md) +```bash +poetry config virtualenvs.in-project true +``` -## Initializing data +#### CMDs + +Install dependencies + +```bash +poetry install +``` + +Activate virtual environment in shell + +```bash +poetry shell +``` + +### npm scripts + +We use Node.js for few development tasks, like linting. Easiest way to install Node is [nvm](https://github.com/nvm-sh/nvm). + +TODO: List scripts + +### Initializing data Run the following `manage.py` commands. Do not run these in production without thinking! @@ -47,9 +68,7 @@ python manage.py initialize # creates user groups python manage.py createdummydata # creates dummy members to the member register ``` -## Running - -### Use runserver command +### Running ```bash python manage.py runserver 0.0.0.0:8000 @@ -57,23 +76,11 @@ python manage.py runserver 0.0.0.0:8000 Using address `0.0.0.0` will bind to all IP addresses. Using `localhost` will only bind to your machine. -### Visit the page +#### Visit the page Visit [https://localhost:8000](https://localhost:8000) in your browser! -## Running in production - -Run the project in production with gunicorn. Refer to [this page](https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04) for instructions. - -Install production dependencies. - -```bash -pip install -r requirements.production.txt -``` - -## Development workflow - -Do not use `rebase` when pulling or merging changes. Rebasing transforms the commit history and makes it appear more linear. This is a plus e.g. when working with a few people, but in this project traditional merging is recommended for clarity. +### Development workflow When you start working on a feature, create a feature branch for your changes. These feature branches should be prefixed with `feature`. @@ -110,13 +117,17 @@ Use an editor with linting capabilities to write pretty code that passes linting Run unit tests with ```bash -python manage.py test -v 2 +python manage.py test ``` Due to the mostly static nature of the project, most elements are difficult to properly unit test. If you write code with actual logic, make sure to write at least one unit or integration test that tests your code's core functionality. Tests are located in `tests.py` under every subproject. -### GitLab CI +## Production + +Project is run in production with Docker. See `Dockerfile` for details. + +## GitLab CI All pushed changes go through the GitLab Continuous Integration, which consists of automated unit testing and linting. Make sure your changes pass both before merging to `develop` or `master`. diff --git a/windows_install.md b/windows_install.md deleted file mode 100644 index 5b60860..0000000 --- a/windows_install.md +++ /dev/null @@ -1,55 +0,0 @@ -# Windows installation instructions - -## Install dependencies - -### Install python3 - -Visit [The python website](https://www.python.org/downloads/windows/) to install the latest version of python3. - -Make sure to add the python binary directory to PATH. For instructions how to do this, refer to [this Stackoverflow answer](https://superuser.com/questions/143119/how-to-add-python-to-the-windows-path). - -### Install virtualenv with pip - -Run the following command to install `virtualenv`. - -```cmd -python -m pip install virtualenv -``` - -Setup a virtual python environment. - -```cmd -python -m virtualenv ../virtualenv.sikweb -``` - -## Activate virtualenv and install requirements - -Activate `virtualenv` (note that this has to be active at all times). - -```cmd -source ../virtualenv.sikweb/Scripts/activate -``` - -Run the following command to install python packages. - -```cmd -pip install -r requirements.txt -``` - -## Run migrations - -Run - -```cmd -python manage.py migrate -``` - -## Install npm for linting javascript - -Follow the instructions on [the npm website](https://www.npmjs.com/package/npm). - -## Set up database - -By default Django uses SQLite, which doesn't need any configuration. If you need PostgreSQL instead, refer to [their website](https://www.postgresql.org/download/windows/). - -## Done From 0c1bdba358cb91745126a884c0f556e8067040a9 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Sat, 8 May 2021 18:50:08 +0300 Subject: [PATCH 16/20] fix coverage report --- .coveragerc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.coveragerc b/.coveragerc index 4a08d6a..81ae08a 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,5 +1,9 @@ [report] show_missing = True +omit = + */migrations/* + */admin.py + */translation.py [run] omit = */migrations/* From 86973562ff908f2bdaf2ba44616d535b3a73bf56 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Sat, 8 May 2021 18:55:06 +0300 Subject: [PATCH 17/20] update Django --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8e02053..9597a4b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -84,7 +84,7 @@ python-versions = ">=2.7" [[package]] name = "django" -version = "2.2.19" +version = "2.2.22" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false @@ -757,8 +757,8 @@ diff-match-patch = [ {file = "diff_match_patch-20200713-py3-none-any.whl", hash = "sha256:8bf9d9c4e059d917b5c6312bac0c137971a32815ddbda9c682b949f2986b4d34"}, ] django = [ - {file = "Django-2.2.19-py3-none-any.whl", hash = "sha256:e319a7164d6d30cb177b3fd74d02c52f1185c37304057bb76d74047889c605d9"}, - {file = "Django-2.2.19.tar.gz", hash = "sha256:30c235dec87e05667597e339f194c9fed6c855bda637266ceee891bf9093da43"}, + {file = "Django-2.2.22-py3-none-any.whl", hash = "sha256:e831105edb153af1324de44d06091ca75520a227456387dda4a47d2f1cc2731a"}, + {file = "Django-2.2.22.tar.gz", hash = "sha256:db2214db1c99017cbd971e58824e6f424375154fe358afc30e976f5b99fc6060"}, ] django-app-namespace-template-loader = [ {file = "django-app-namespace-template-loader-0.4.1.tar.gz", hash = "sha256:7a450985479a2e07fe8a1e4e8208fc9e1d8b35503526dd28eba5f8ad4ba31d4e"}, From 26635bbbcc386b6b2ea303896d8781b449f4e525 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Sat, 8 May 2021 18:56:38 +0300 Subject: [PATCH 18/20] update metadata --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 671904f..7b1317c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,8 +1,8 @@ [tool.poetry] name = "web2.0-backend" version = "0.1.0" -description = "" -authors = ["Your Name "] +description = "Backend for sahkoinsinoorikilta.fi" +authors = ["Aarni Halinen aarni.halinen@sahkoinsinoorikilta.fi"] [tool.poetry.dependencies] python = "^3.9" From c6374d88b66b46fcc06508e443da1446d3e0cb2b Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Sun, 16 May 2021 16:43:25 +0300 Subject: [PATCH 19/20] replace mailjet with sendgrid --- .env.dev | 5 ++-- .env.sample | 5 ++-- poetry.lock | 55 ++++++++++++++++++++++++++----------- pyproject.toml | 2 +- sikweb/base.py | 8 +++--- sikweb/settings.py | 2 +- stack-compose.yml | 2 -- webapp/tests/test_signup.py | 2 +- webapp/utils.py | 55 ++++++++++++++----------------------- 9 files changed, 70 insertions(+), 66 deletions(-) diff --git a/.env.dev b/.env.dev index 92c89ca..ec03959 100644 --- a/.env.dev +++ b/.env.dev @@ -2,9 +2,8 @@ HOST=api.dev.sahkoinsinoorikilta.fi DEBUG=True SECRET_KEY=7p$85^4ibb^p4-=vs44b7!y0e-zemugze18@a#30&71=a8)dp( TG_BOT_TOKEN= -EMAIL_HOST= -EMAIL_PASSWD= DB_USER=postgres DB_PASSWD=postgres DB_HOST=db -DB_PORT=5432 \ No newline at end of file +DB_PORT=5432 +EMAIL_API_KEY= diff --git a/.env.sample b/.env.sample index 65ab9dd..e78a331 100644 --- a/.env.sample +++ b/.env.sample @@ -2,9 +2,8 @@ HOST=localhost DEBUG=True SECRET_KEY=7p$85^4ibb^p4-=vs44b7!y0e-zemugze18@a#30&71=a8)dp( TG_BOT_TOKEN= -EMAIL_HOST= -EMAIL_PASSWD= DB_USER=postgres DB_PASSWD=postgres DB_HOST=db -DB_PORT=5432 \ No newline at end of file +DB_PORT=5432 +EMAIL_API_KEY= diff --git a/poetry.lock b/poetry.lock index 9597a4b..dc936c3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -352,17 +352,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "mailjet-rest" -version = "1.3.4" -description = "Mailjet V3 API wrapper" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -requests = ">=2.4.3" - [[package]] name = "markdown" version = "3.3.4" @@ -534,6 +523,14 @@ python-versions = "*" [package.dependencies] six = ">=1.5" +[[package]] +name = "python-http-client" +version = "3.3.2" +description = "HTTP REST client, simplified for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "pytz" version = "2021.1" @@ -582,6 +579,18 @@ dparse = ">=0.5.1" packaging = "*" requests = "*" +[[package]] +name = "sendgrid" +version = "6.7.0" +description = "Twilio SendGrid library for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +python-http-client = ">=3.2.1" +starkbank-ecdsa = ">=1.0.0" + [[package]] name = "six" version = "1.15.0" @@ -598,6 +607,14 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "starkbank-ecdsa" +version = "1.1.0" +description = "A lightweight and fast pure python ECDSA library" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "tablib" version = "3.0.0" @@ -667,7 +684,7 @@ brotli = ["brotli"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "c491f605092858575be6858fbed2a379b9e1f93c75920ac3ef2e62ed2ad778fb" +content-hash = "b14550d0e5199979586a276f3795f0161986e2ea9beeb8d585fd4d4aaac1cb64" [metadata.files] attrs = [ @@ -841,10 +858,6 @@ lml = [ {file = "lml-0.1.0-py2.py3-none-any.whl", hash = "sha256:ec06e850019942a485639c8c2a26bdb99eae24505bee7492b649df98a0bed101"}, {file = "lml-0.1.0.tar.gz", hash = "sha256:57a085a29bb7991d70d41c6c3144c560a8e35b4c1030ffb36d85fa058773bcc5"}, ] -mailjet-rest = [ - {file = "mailjet_rest-1.3.4-py3-none-any.whl", hash = "sha256:635d53ac3fd61020f309c24ee977ae3458654ab39f9c36fc4b50c74e5d8ad410"}, - {file = "mailjet_rest-1.3.4.tar.gz", hash = "sha256:e02663fa0369543bcd48c37a146e8143bb12b9f3512af2d5ba6dfbcc99e64a2d"}, -] markdown = [ {file = "Markdown-3.3.4-py3-none-any.whl", hash = "sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"}, {file = "Markdown-3.3.4.tar.gz", hash = "sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49"}, @@ -972,6 +985,9 @@ python-dateutil = [ {file = "python-dateutil-2.6.0.zip", hash = "sha256:3acbef017340600e9ff8f2994d8f7afd6eacb295383f286466a6df3961e486f0"}, {file = "python_dateutil-2.6.0-py2.py3-none-any.whl", hash = "sha256:537bf2a8f8ce6f6862ad705cd68f9e405c0b5db014aa40fa29eab4335d4b1716"}, ] +python-http-client = [ + {file = "python_http_client-3.3.2.tar.gz", hash = "sha256:67e6a7bea19b03e14dc971480d3531b80becfc203d6c69478561bf7844d52661"}, +] pytz = [ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, @@ -1015,6 +1031,10 @@ safety = [ {file = "safety-1.10.3-py2.py3-none-any.whl", hash = "sha256:5f802ad5df5614f9622d8d71fedec2757099705c2356f862847c58c6dfe13e84"}, {file = "safety-1.10.3.tar.gz", hash = "sha256:30e394d02a20ac49b7f65292d19d38fa927a8f9582cdfd3ad1adbbc66c641ad5"}, ] +sendgrid = [ + {file = "sendgrid-6.7.0-py3-none-any.whl", hash = "sha256:273bdc0abec649bf6319df7b6267980f79e53ab64e92906d65eea6d4330d00b4"}, + {file = "sendgrid-6.7.0.tar.gz", hash = "sha256:74b0dcf9a79188948f61f456bd1bf67ffa676a5d388aba1c76bff516566d7084"}, +] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, @@ -1023,6 +1043,9 @@ sqlparse = [ {file = "sqlparse-0.4.1-py3-none-any.whl", hash = "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0"}, {file = "sqlparse-0.4.1.tar.gz", hash = "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8"}, ] +starkbank-ecdsa = [ + {file = "starkbank-ecdsa-1.1.0.tar.gz", hash = "sha256:423f81bb55c896a3c85ee98ac7da98826721eaee918f5c0c1dfff99e1972da0c"}, +] tablib = [ {file = "tablib-3.0.0-py3-none-any.whl", hash = "sha256:41aa40981cddd7ec4d1fabeae7c38d271601b306386bd05b5c3bcae13e5aeb20"}, {file = "tablib-3.0.0.tar.gz", hash = "sha256:f83cac08454f225a34a305daa20e2110d5e6335135d505f93bc66583a5f9c10d"}, diff --git a/pyproject.toml b/pyproject.toml index 7b1317c..f84120d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,11 +31,11 @@ django-app-namespace-template-loader = "^0.4.1" django-filter = "^2.0.0" whitenoise = "^4.1.4" jsonschema = "^3.2.0" -mailjet-rest = "^1.3.3" Markdown = "^3.2.2" uWSGI = "^2.0.18" gunicorn = "^20.1.0" Pillow = "^8.1.2" +sendgrid = "^6.7.0" [tool.poetry.dev-dependencies] coverage = "^5.5" diff --git a/sikweb/base.py b/sikweb/base.py index 71ebf2d..03f1864 100644 --- a/sikweb/base.py +++ b/sikweb/base.py @@ -203,10 +203,10 @@ REST_FRAMEWORK = { } # Email settings (tested working with gmail) -EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -EMAIL_USE_TLS = True -EMAIL_HOST = 'smtp.gmail.com' -EMAIL_PORT = 587 +# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +# EMAIL_USE_TLS = True +# EMAIL_HOST = 'smtp.gmail.com' +# EMAIL_PORT = 587 # Internationalization diff --git a/sikweb/settings.py b/sikweb/settings.py index 6ec495c..55acddb 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -35,7 +35,7 @@ GOOGLE_RECAPTCHA_SECRET_KEY = os.getenv("GOOGLE_RECAPTCHA_SECRET_KEY", "YOUR-PRI # Email settings (more settings in base.py) EMAIL_API_KEY = os.getenv('EMAIL_API_KEY', '') -EMAIL_API_SECRET = os.getenv('EMAIL_API_SECRET', '') +# EMAIL_API_SECRET = os.getenv('EMAIL_API_SECRET', '') DEFAULT_EMAIL_FROM = 'SIK' DEFAULT_EMAIL_FROM_ADDR = 'noreply@sahkoinsinoorikilta.fi' ENABLE_AUTOMATIC_EMAILS = True diff --git a/stack-compose.yml b/stack-compose.yml index 725585a..68f03e2 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -47,7 +47,6 @@ services: - DB_HOST=db - DB_PORT=5432 - EMAIL_API_KEY_FILE=/run/secrets/BACKEND_EMAIL_API_KEY - - EMAIL_API_SECRET_FILE=/run/secrets/BACKEND_EMAIL_API_SECRET secrets: - BACKEND_SECRET_KEY @@ -55,7 +54,6 @@ services: - BACKEND_DB_USER - BACKEND_DB_PASSWD - BACKEND_EMAIL_API_KEY - - BACKEND_EMAIL_API_SECRET secrets: BACKEND_SECRET_KEY: external: true diff --git a/webapp/tests/test_signup.py b/webapp/tests/test_signup.py index 7ac905e..6a2f7bc 100644 --- a/webapp/tests/test_signup.py +++ b/webapp/tests/test_signup.py @@ -83,7 +83,7 @@ class SignupTestCase(APITestCase): def test_delete_signup_token(self): pass - # TODO: Use some mocking library and check that mailjet is actually called + # TODO: Use some mocking library and check that sendgrid is actually called def test_signupee_sendemail(self): form = self.signupForm emailURL = f"/api/signupForm/{form.id}/sendemail/" diff --git a/webapp/utils.py b/webapp/utils.py index 03024d7..b535e97 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -1,18 +1,16 @@ """Webapp utils.""" from django.utils import timezone -# from django.core.mail import send_mail -import os -from mailjet_rest import Client +import sendgrid +from sendgrid.helpers.mail import * from datetime import timedelta import logging -from django.conf import settings from django.template.loader import render_to_string from django.core.files.base import ContentFile import base64 import uuid -from sikweb.settings import FRONTEND_URL, URL, EMAIL_API_KEY, EMAIL_API_SECRET, DEFAULT_EMAIL_FROM, DEFAULT_EMAIL_FROM_ADDR, ENABLE_AUTOMATIC_EMAILS +from sikweb.settings import FRONTEND_URL, EMAIL_API_KEY, DEFAULT_EMAIL_FROM_ADDR, ENABLE_AUTOMATIC_EMAILS import imghdr import markdown @@ -60,37 +58,24 @@ def send_email(to, subject, body, html=False): logging.debug(f"subject: {subject}") logging.debug(f"body: {body}") return + + from_email = Email(DEFAULT_EMAIL_FROM_ADDR) + to_email = To(to) + sub = Subject(subject) + + if (html): + content = HtmlContent(body) + else: + content = PlainTextContent(body) + + mail = Mail(from_email, to_email, sub, content) + try: - mailjet = Client(auth=(EMAIL_API_KEY, EMAIL_API_SECRET), version='v3.1') + sg = sendgrid.SendGridAPIClient(EMAIL_API_KEY) + response = sg.client.mail.send.post(request_body=mail.get()) - data = { - 'Messages': [ - { - "From": { - "Email": DEFAULT_EMAIL_FROM_ADDR, - "Name": DEFAULT_EMAIL_FROM - }, - "To": [ - { - "Email": to, - "Name": "You" - } - ], - "Subject": subject - } - ] - } - - if (html): - data["Messages"][0]["HTMLPart"] = body - else: - data["Messages"][0]["TextPart"] = body - - success = mailjet.send.create(data=data) - - # For some reason returns 200 OK instead of 201 Created... - if success.status_code != 200: - raise Exception(f'Failed to send email: {success.json()}') + if response.status_code != 202: + raise Exception(f'Failed to send email: {response.body}') except Exception as ex: logging.exception('Failed to send email.') @@ -109,4 +94,4 @@ def send_signup_email(to, subject, id, uuid, content): def admin_send_email_signupees(list, subject, content): for to in list: - send_email(to, subject, markdown.markdown(content), True) + send_email(to.email, subject, markdown.markdown(content), True) From a927ab8a13ac3697f8ad54fce6475535f508ffc4 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Sun, 16 May 2021 17:24:13 +0300 Subject: [PATCH 20/20] clean EMAIL_API_SECRETs --- production_entrypoint.sh | 4 ++-- stack-compose-dev.yml | 4 ---- stack-compose.yml | 2 -- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/production_entrypoint.sh b/production_entrypoint.sh index 6eaddc3..6c13118 100755 --- a/production_entrypoint.sh +++ b/production_entrypoint.sh @@ -10,8 +10,8 @@ fi if test -f "$EMAIL_API_KEY_FILE"; then export EMAIL_API_KEY=$(cat $EMAIL_API_KEY_FILE) fi -if test -f "$EMAIL_API_SECRET_FILE"; then - export EMAIL_API_SECRET=$(cat $EMAIL_API_SECRET_FILE) +# if test -f "$EMAIL_API_SECRET_FILE"; then +# export EMAIL_API_SECRET=$(cat $EMAIL_API_SECRET_FILE) fi if test -f "$DB_USER_FILE"; then export DB_USER=$(cat $DB_USER_FILE) diff --git a/stack-compose-dev.yml b/stack-compose-dev.yml index 4f86e37..8bb49ee 100644 --- a/stack-compose-dev.yml +++ b/stack-compose-dev.yml @@ -27,19 +27,15 @@ services: - FRONTEND_URL=dev.sahkoinsinoorikilta.fi - DEBUG=True - EMAIL_API_KEY_FILE=/run/secrets/DJANGO_EMAIL_API_KEY - - EMAIL_API_SECRET_FILE=/run/secrets/DJANGO_EMAIL_API_SECRET - DB_HOST=db - DB_PORT=5432 secrets: - DJANGO_EMAIL_API_KEY - - DJANGO_EMAIL_API_SECRET secrets: DJANGO_EMAIL_API_KEY: external: true - DJANGO_EMAIL_API_SECRET: - external: true volumes: dbdata: diff --git a/stack-compose.yml b/stack-compose.yml index 68f03e2..81f9129 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -67,8 +67,6 @@ secrets: external: true BACKEND_EMAIL_API_KEY: external: true - BACKEND_EMAIL_API_SECRET: - external: true volumes: dbdata: