diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a830a234..feca4d77 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -77,6 +77,7 @@ jobs: run: | poetry run black --check . poetry run flake8 + poetry run djlint --check templates - name: Run db migration run: | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ebd12459..fd2c8001 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -145,7 +145,11 @@ The code is also checked with `flake8`, make sure to run `flake8` before creatin poetry run flake8 ``` -Nice to have: as we haven't found a good enough HTML code formatter, please reformat any HTML code with PyCharm. +For HTML templates, we use `djlint`. Before creating a pull request, please run + +```bash +poetry run djlint --check templates +``` ## Test sending email diff --git a/poetry.lock b/poetry.lock index d35910a6..81709896 100644 --- a/poetry.lock +++ b/poetry.lock @@ -295,7 +295,7 @@ six = ">=1.9" [[package]] name = "colorama" -version = "0.4.3" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "main" optional = false @@ -317,14 +317,14 @@ cron = ["capturer (>=2.4)"] [[package]] name = "coverage" -version = "6.4" +version = "6.4.1" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -tomli = {version = "*", optional = true, markers = "python_version < \"3.11\" and extra == \"toml\""} +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} [package.extras] toml = ["tomli"] @@ -386,6 +386,26 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "djlint" +version = "0.7.3" +description = "HTML Template Linter and Formatter" +category = "dev" +optional = false +python-versions = ">=3.6.2,<4.0.0" + +[package.dependencies] +click = ">=8.0.1,<9.0.0" +colorama = ">=0.4.4,<0.5.0" +pathspec = ">=0.9.0,<0.10.0" +PyYAML = ">=6.0,<7.0" +regex = ">=2022.1.18,<2023.0.0" +tomlkit = ">=0.8.0,<0.9.0" +tqdm = ">=4.62.2,<5.0.0" + +[package.extras] +test = ["coverage (>=6.2,<7.0)", "pytest (>=6.2.5,<7.0.0)", "pytest-cov (>=3.0.0,<4.0.0)"] + [[package]] name = "dkimpy" version = "1.0.5" @@ -1462,19 +1482,19 @@ python-versions = "*" [[package]] name = "pyyaml" -version = "5.4" +version = "6.0" 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.*" +python-versions = ">=3.6" [[package]] name = "regex" -version = "2020.9.27" +version = "2022.6.2" description = "Alternative regular expression module, to replace re." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "requests" @@ -1717,6 +1737,31 @@ category = "dev" optional = false python-versions = ">=3.7" +[[package]] +name = "tomlkit" +version = "0.8.0" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + +[[package]] +name = "tqdm" +version = "4.64.0" +description = "Fast, Extensible Progress Meter" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "traitlets" version = "5.0.4" @@ -1960,7 +2005,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "be129ac44e9114f1a25702b4d32c1caae617d892ed7f59d8e01d778fb3a2b53c" +content-hash = "29d95a850f0a87a38aabb8f5eddba072316860dae26943fd690898ea9bac2b02" [metadata.files] aiohttp = [ @@ -2139,55 +2184,55 @@ coinbase-commerce = [ {file = "coinbase_commerce-1.0.1.tar.gz", hash = "sha256:5f6807655e9297210c1178dca62d1c1a997505368311c55c8ebe4f466344d966"}, ] colorama = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] coloredlogs = [ {file = "coloredlogs-14.0-py2.py3-none-any.whl", hash = "sha256:346f58aad6afd48444c2468618623638dadab76e4e70d5e10822676f2d32226a"}, {file = "coloredlogs-14.0.tar.gz", hash = "sha256:a1fab193d2053aa6c0a97608c4342d031f1f93a3d1218432c59322441d31a505"}, ] coverage = [ - {file = "coverage-6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf"}, - {file = "coverage-6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088"}, - {file = "coverage-6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39"}, - {file = "coverage-6.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632"}, - {file = "coverage-6.4-cp310-cp310-win32.whl", hash = "sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f"}, - {file = "coverage-6.4-cp310-cp310-win_amd64.whl", hash = "sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720"}, - {file = "coverage-6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6"}, - {file = "coverage-6.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052"}, - {file = "coverage-6.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211"}, - {file = "coverage-6.4-cp37-cp37m-win32.whl", hash = "sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a"}, - {file = "coverage-6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311"}, - {file = "coverage-6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61"}, - {file = "coverage-6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c"}, - {file = "coverage-6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6"}, - {file = "coverage-6.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166"}, - {file = "coverage-6.4-cp38-cp38-win32.whl", hash = "sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426"}, - {file = "coverage-6.4-cp38-cp38-win_amd64.whl", hash = "sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3"}, - {file = "coverage-6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740"}, - {file = "coverage-6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65"}, - {file = "coverage-6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018"}, - {file = "coverage-6.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f"}, - {file = "coverage-6.4-cp39-cp39-win32.whl", hash = "sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3"}, - {file = "coverage-6.4-cp39-cp39-win_amd64.whl", hash = "sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055"}, - {file = "coverage-6.4-pp36.pp37.pp38-none-any.whl", hash = "sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45"}, - {file = "coverage-6.4.tar.gz", hash = "sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49"}, + {file = "coverage-6.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1d5aa2703e1dab4ae6cf416eb0095304f49d004c39e9db1d86f57924f43006b"}, + {file = "coverage-6.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ce1b258493cbf8aec43e9b50d89982346b98e9ffdfaae8ae5793bc112fb0068"}, + {file = "coverage-6.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c4e737f60c6936460c5be330d296dd5b48b3963f48634c53b3f7deb0f34ec4"}, + {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84e65ef149028516c6d64461b95a8dbcfce95cfd5b9eb634320596173332ea84"}, + {file = "coverage-6.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f69718750eaae75efe506406c490d6fc5a6161d047206cc63ce25527e8a3adad"}, + {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e57816f8ffe46b1df8f12e1b348f06d164fd5219beba7d9433ba79608ef011cc"}, + {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:01c5615d13f3dd3aa8543afc069e5319cfa0c7d712f6e04b920431e5c564a749"}, + {file = "coverage-6.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ab269400706fab15981fd4bd5080c56bd5cc07c3bccb86aab5e1d5a88dc8f4"}, + {file = "coverage-6.4.1-cp310-cp310-win32.whl", hash = "sha256:a7f3049243783df2e6cc6deafc49ea123522b59f464831476d3d1448e30d72df"}, + {file = "coverage-6.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2ddcac99b2d2aec413e36d7a429ae9ebcadf912946b13ffa88e7d4c9b712d6"}, + {file = "coverage-6.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb73e0011b8793c053bfa85e53129ba5f0250fdc0392c1591fd35d915ec75c46"}, + {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106c16dfe494de3193ec55cac9640dd039b66e196e4641fa8ac396181578b982"}, + {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f4f3df85aa39da00fd3ec4b5abeb7407e82b68c7c5ad181308b0e2526da5d4"}, + {file = "coverage-6.4.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:961e2fb0680b4f5ad63234e0bf55dfb90d302740ae9c7ed0120677a94a1590cb"}, + {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cec3a0f75c8f1031825e19cd86ee787e87cf03e4fd2865c79c057092e69e3a3b"}, + {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:129cd05ba6f0d08a766d942a9ed4b29283aff7b2cccf5b7ce279d50796860bb3"}, + {file = "coverage-6.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bf5601c33213d3cb19d17a796f8a14a9eaa5e87629a53979a5981e3e3ae166f6"}, + {file = "coverage-6.4.1-cp37-cp37m-win32.whl", hash = "sha256:269eaa2c20a13a5bf17558d4dc91a8d078c4fa1872f25303dddcbba3a813085e"}, + {file = "coverage-6.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f02cbbf8119db68455b9d763f2f8737bb7db7e43720afa07d8eb1604e5c5ae28"}, + {file = "coverage-6.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ffa9297c3a453fba4717d06df579af42ab9a28022444cae7fa605af4df612d54"}, + {file = "coverage-6.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:145f296d00441ca703a659e8f3eb48ae39fb083baba2d7ce4482fb2723e050d9"}, + {file = "coverage-6.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d44996140af8b84284e5e7d398e589574b376fb4de8ccd28d82ad8e3bea13"}, + {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2bd9a6fc18aab8d2e18f89b7ff91c0f34ff4d5e0ba0b33e989b3cd4194c81fd9"}, + {file = "coverage-6.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3384f2a3652cef289e38100f2d037956194a837221edd520a7ee5b42d00cc605"}, + {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9b3e07152b4563722be523e8cd0b209e0d1a373022cfbde395ebb6575bf6790d"}, + {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1480ff858b4113db2718848d7b2d1b75bc79895a9c22e76a221b9d8d62496428"}, + {file = "coverage-6.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:865d69ae811a392f4d06bde506d531f6a28a00af36f5c8649684a9e5e4a85c83"}, + {file = "coverage-6.4.1-cp38-cp38-win32.whl", hash = "sha256:664a47ce62fe4bef9e2d2c430306e1428ecea207ffd68649e3b942fa8ea83b0b"}, + {file = "coverage-6.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:26dff09fb0d82693ba9e6231248641d60ba606150d02ed45110f9ec26404ed1c"}, + {file = "coverage-6.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9c80df769f5ec05ad21ea34be7458d1dc51ff1fb4b2219e77fe24edf462d6df"}, + {file = "coverage-6.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:39ee53946bf009788108b4dd2894bf1349b4e0ca18c2016ffa7d26ce46b8f10d"}, + {file = "coverage-6.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5b66caa62922531059bc5ac04f836860412f7f88d38a476eda0a6f11d4724f4"}, + {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd180ed867e289964404051a958f7cccabdeed423f91a899829264bb7974d3d3"}, + {file = "coverage-6.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84631e81dd053e8a0d4967cedab6db94345f1c36107c71698f746cb2636c63e3"}, + {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8c08da0bd238f2970230c2a0d28ff0e99961598cb2e810245d7fc5afcf1254e8"}, + {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d42c549a8f41dc103a8004b9f0c433e2086add8a719da00e246e17cbe4056f72"}, + {file = "coverage-6.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:309ce4a522ed5fca432af4ebe0f32b21d6d7ccbb0f5fcc99290e71feba67c264"}, + {file = "coverage-6.4.1-cp39-cp39-win32.whl", hash = "sha256:fdb6f7bd51c2d1714cea40718f6149ad9be6a2ee7d93b19e9f00934c0f2a74d9"}, + {file = "coverage-6.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:342d4aefd1c3e7f620a13f4fe563154d808b69cccef415415aece4c786665397"}, + {file = "coverage-6.4.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:4803e7ccf93230accb928f3a68f00ffa80a88213af98ed338a57ad021ef06815"}, + {file = "coverage-6.4.1.tar.gz", hash = "sha256:4321f075095a096e70aff1d002030ee612b65a205a0a0f5b815280d5dc58100c"}, ] crontab = [ {file = "crontab-0.22.8.tar.gz", hash = "sha256:1ac977fb1b8ba5b7b58e6f713cd7df36e61d7aee4c2b809abcf76adddd2deeaf"}, @@ -2228,6 +2273,10 @@ distlib = [ {file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"}, {file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"}, ] +djlint = [ + {file = "djlint-0.7.3-py3-none-any.whl", hash = "sha256:714ed457e022047149c8bff57d5be00ce30f8846b60e866791c66d27e7d11e7f"}, + {file = "djlint-0.7.3.tar.gz", hash = "sha256:68aad9ddfef883cc9d9e0d177387b74840af5ca12dcce6e4629eb7075c97dc05"}, +] dkimpy = [ {file = "dkimpy-1.0.5.tar.gz", hash = "sha256:9a2420bf09af686736773153fca32a02ae11ecbe24b540c26104628959f91121"}, ] @@ -2904,56 +2953,115 @@ pytz = [ {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, ] pyyaml = [ - {file = "PyYAML-5.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f7a21e3d99aa3095ef0553e7ceba36fb693998fbb1226f1392ce33681047465f"}, - {file = "PyYAML-5.4-cp27-cp27m-win32.whl", hash = "sha256:52bf0930903818e600ae6c2901f748bc4869c0c406056f679ab9614e5d21a166"}, - {file = "PyYAML-5.4-cp27-cp27m-win_amd64.whl", hash = "sha256:a36a48a51e5471513a5aea920cdad84cbd56d70a5057cca3499a637496ea379c"}, - {file = "PyYAML-5.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5e7ac4e0e79a53451dc2814f6876c2fa6f71452de1498bbe29c0b54b69a986f4"}, - {file = "PyYAML-5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc552b6434b90d9dbed6a4f13339625dc466fd82597119897e9489c953acbc22"}, - {file = "PyYAML-5.4-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0dc9f2eb2e3c97640928dec63fd8dc1dd91e6b6ed236bd5ac00332b99b5c2ff9"}, - {file = "PyYAML-5.4-cp36-cp36m-win32.whl", hash = "sha256:5a3f345acff76cad4aa9cb171ee76c590f37394186325d53d1aa25318b0d4a09"}, - {file = "PyYAML-5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:f3790156c606299ff499ec44db422f66f05a7363b39eb9d5b064f17bd7d7c47b"}, - {file = "PyYAML-5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:124fd7c7bc1e95b1eafc60825f2daf67c73ce7b33f1194731240d24b0d1bf628"}, - {file = "PyYAML-5.4-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8b818b6c5a920cbe4203b5a6b14256f0e5244338244560da89b7b0f1313ea4b6"}, - {file = "PyYAML-5.4-cp37-cp37m-win32.whl", hash = "sha256:737bd70e454a284d456aa1fa71a0b429dd527bcbf52c5c33f7c8eee81ac16b89"}, - {file = "PyYAML-5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:7242790ab6c20316b8e7bb545be48d7ed36e26bbe279fd56f2c4a12510e60b4b"}, - {file = "PyYAML-5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cc547d3ead3754712223abb7b403f0a184e4c3eae18c9bb7fd15adef1597cc4b"}, - {file = "PyYAML-5.4-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8635d53223b1f561b081ff4adecb828fd484b8efffe542edcfdff471997f7c39"}, - {file = "PyYAML-5.4-cp38-cp38-win32.whl", hash = "sha256:26fcb33776857f4072601502d93e1a619f166c9c00befb52826e7b774efaa9db"}, - {file = "PyYAML-5.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2243dd033fd02c01212ad5c601dafb44fbb293065f430b0d3dbf03f3254d615"}, - {file = "PyYAML-5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:31ba07c54ef4a897758563e3a0fcc60077698df10180abe4b8165d9895c00ebf"}, - {file = "PyYAML-5.4-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:02c78d77281d8f8d07a255e57abdbf43b02257f59f50cc6b636937d68efa5dd0"}, - {file = "PyYAML-5.4-cp39-cp39-win32.whl", hash = "sha256:fdc6b2cb4b19e431994f25a9160695cc59a4e861710cc6fc97161c5e845fc579"}, - {file = "PyYAML-5.4-cp39-cp39-win_amd64.whl", hash = "sha256:8bf38641b4713d77da19e91f8b5296b832e4db87338d6aeffe422d42f1ca896d"}, - {file = "PyYAML-5.4.tar.gz", hash = "sha256:3c49e39ac034fd64fd576d63bb4db53cda89b362768a67f07749d55f128ac18a"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] regex = [ - {file = "regex-2020.9.27-cp27-cp27m-win32.whl", hash = "sha256:d23a18037313714fb3bb5a94434d3151ee4300bae631894b1ac08111abeaa4a3"}, - {file = "regex-2020.9.27-cp27-cp27m-win_amd64.whl", hash = "sha256:84e9407db1b2eb368b7ecc283121b5e592c9aaedbe8c78b1a2f1102eb2e21d19"}, - {file = "regex-2020.9.27-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5f18875ac23d9aa2f060838e8b79093e8bb2313dbaaa9f54c6d8e52a5df097be"}, - {file = "regex-2020.9.27-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ae91972f8ac958039920ef6e8769277c084971a142ce2b660691793ae44aae6b"}, - {file = "regex-2020.9.27-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:9a02d0ae31d35e1ec12a4ea4d4cca990800f66a917d0fb997b20fbc13f5321fc"}, - {file = "regex-2020.9.27-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:ebbe29186a3d9b0c591e71b7393f1ae08c83cb2d8e517d2a822b8f7ec99dfd8b"}, - {file = "regex-2020.9.27-cp36-cp36m-win32.whl", hash = "sha256:4707f3695b34335afdfb09be3802c87fa0bc27030471dbc082f815f23688bc63"}, - {file = "regex-2020.9.27-cp36-cp36m-win_amd64.whl", hash = "sha256:9bc13e0d20b97ffb07821aa3e113f9998e84994fe4d159ffa3d3a9d1b805043b"}, - {file = "regex-2020.9.27-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f1b3afc574a3db3b25c89161059d857bd4909a1269b0b3cb3c904677c8c4a3f7"}, - {file = "regex-2020.9.27-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5533a959a1748a5c042a6da71fe9267a908e21eded7a4f373efd23a2cbdb0ecc"}, - {file = "regex-2020.9.27-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:1fe0a41437bbd06063aa184c34804efa886bcc128222e9916310c92cd54c3b4c"}, - {file = "regex-2020.9.27-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:c570f6fa14b9c4c8a4924aaad354652366577b4f98213cf76305067144f7b100"}, - {file = "regex-2020.9.27-cp37-cp37m-win32.whl", hash = "sha256:eda4771e0ace7f67f58bc5b560e27fb20f32a148cbc993b0c3835970935c2707"}, - {file = "regex-2020.9.27-cp37-cp37m-win_amd64.whl", hash = "sha256:60b0e9e6dc45683e569ec37c55ac20c582973841927a85f2d8a7d20ee80216ab"}, - {file = "regex-2020.9.27-cp38-cp38-manylinux1_i686.whl", hash = "sha256:088afc8c63e7bd187a3c70a94b9e50ab3f17e1d3f52a32750b5b77dbe99ef5ef"}, - {file = "regex-2020.9.27-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:eaf548d117b6737df379fdd53bdde4f08870e66d7ea653e230477f071f861121"}, - {file = "regex-2020.9.27-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:41bb65f54bba392643557e617316d0d899ed5b4946dccee1cb6696152b29844b"}, - {file = "regex-2020.9.27-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:8d69cef61fa50c8133382e61fd97439de1ae623fe943578e477e76a9d9471637"}, - {file = "regex-2020.9.27-cp38-cp38-win32.whl", hash = "sha256:f2388013e68e750eaa16ccbea62d4130180c26abb1d8e5d584b9baf69672b30f"}, - {file = "regex-2020.9.27-cp38-cp38-win_amd64.whl", hash = "sha256:4318d56bccfe7d43e5addb272406ade7a2274da4b70eb15922a071c58ab0108c"}, - {file = "regex-2020.9.27-cp39-cp39-manylinux1_i686.whl", hash = "sha256:84cada8effefe9a9f53f9b0d2ba9b7b6f5edf8d2155f9fdbe34616e06ececf81"}, - {file = "regex-2020.9.27-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:816064fc915796ea1f26966163f6845de5af78923dfcecf6551e095f00983650"}, - {file = "regex-2020.9.27-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:5d892a4f1c999834eaa3c32bc9e8b976c5825116cde553928c4c8e7e48ebda67"}, - {file = "regex-2020.9.27-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c9443124c67b1515e4fe0bb0aa18df640965e1030f468a2a5dc2589b26d130ad"}, - {file = "regex-2020.9.27-cp39-cp39-win32.whl", hash = "sha256:49f23ebd5ac073765ecbcf046edc10d63dcab2f4ae2bce160982cb30df0c0302"}, - {file = "regex-2020.9.27-cp39-cp39-win_amd64.whl", hash = "sha256:3d20024a70b97b4f9546696cbf2fd30bae5f42229fbddf8661261b1eaff0deb7"}, - {file = "regex-2020.9.27.tar.gz", hash = "sha256:a6f32aea4260dfe0e55dc9733ea162ea38f0ea86aa7d0f77b15beac5bf7b369d"}, + {file = "regex-2022.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:042d122f9fee3ceb6d7e3067d56557df697d1aad4ff5f64ecce4dc13a90a7c01"}, + {file = "regex-2022.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffef4b30785dc2d1604dfb7cf9fca5dc27cd86d65f7c2a9ec34d6d3ae4565ec2"}, + {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0afa6a601acf3c0dc6de4e8d7d8bbce4e82f8542df746226cd35d4a6c15e9456"}, + {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a11cbe8eb5fb332ae474895b5ead99392a4ea568bd2a258ab8df883e9c2bf92"}, + {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c1f62ee2ba880e221bc950651a1a4b0176083d70a066c83a50ef0cb9b178e12"}, + {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aba3d13c77173e9bfed2c2cea7fc319f11c89a36fcec08755e8fb169cf3b0df"}, + {file = "regex-2022.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:249437f7f5b233792234aeeecb14b0aab1566280de42dfc97c26e6f718297d68"}, + {file = "regex-2022.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:179410c79fa86ef318d58ace233f95b87b05a1db6dc493fa29404a43f4b215e2"}, + {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5e201b1232d81ca1a7a22ab2f08e1eccad4e111579fd7f3bbf60b21ef4a16cea"}, + {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fdecb225d0f1d50d4b26ac423e0032e76d46a788b83b4e299a520717a47d968c"}, + {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:be57f9c7b0b423c66c266a26ad143b2c5514997c05dd32ce7ca95c8b209c2288"}, + {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ed657a07d8a47ef447224ea00478f1c7095065dfe70a89e7280e5f50a5725131"}, + {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24908aefed23dd065b4a668c0b4ca04d56b7f09d8c8e89636cf6c24e64e67a1e"}, + {file = "regex-2022.6.2-cp310-cp310-win32.whl", hash = "sha256:775694cd0bb2c4accf2f1cdd007381b33ec8b59842736fe61bdbad45f2ac7427"}, + {file = "regex-2022.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:809bbbbbcf8258049b031d80932ba71627d2274029386f0452e9950bcfa2c6e8"}, + {file = "regex-2022.6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2b5d983eb0adf2049d41f95205bdc3de4e6cc2350e9c80d4409d3a75229de"}, + {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4c101746a8dac0401abefa716b357c546e61ea2e3d4a564a9db9eac57ccbce"}, + {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:166ae7674d0a0e0f8044e7335ba86d0716c9d49465cff1b153f908e0470b8300"}, + {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5eac5d8a8ac9ccf00805d02a968a36f5c967db6c7d2b747ab9ed782b3b3a28b"}, + {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f57823f35b18d82b201c1b27ce4e55f88e79e81d9ca07b50ce625d33823e1439"}, + {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d42e3b7b23473729adbf76103e7df75f9167a5a80b1257ca30688352b4bb2dc"}, + {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2932e728bee0a634fe55ee54d598054a5a9ffe4cd2be21ba2b4b8e5f8064c2c"}, + {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:17764683ea01c2b8f103d99ae9de2473a74340df13ce306c49a721f0b1f0eb9e"}, + {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:2ac29b834100d2c171085ceba0d4a1e7046c434ddffc1434dbc7f9d59af1e945"}, + {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:f43522fb5d676c99282ca4e2d41e8e2388427c0cf703db6b4a66e49b10b699a8"}, + {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:9faa01818dad9111dbf2af26c6e3c45140ccbd1192c3a0981f196255bf7ec5e6"}, + {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:17443f99b8f255273731f915fdbfea4d78d809bb9c3aaf67b889039825d06515"}, + {file = "regex-2022.6.2-cp36-cp36m-win32.whl", hash = "sha256:4a5449adef907919d4ce7a1eab2e27d0211d1b255bf0b8f5dd330ad8707e0fc3"}, + {file = "regex-2022.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4d206703a96a39763b5b45cf42645776f5553768ea7f3c2c1a39a4f59cafd4ba"}, + {file = "regex-2022.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcd7c432202bcb8b642c3f43d5bcafc5930d82fe5b2bf2c008162df258445c1d"}, + {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:186c5a4a4c40621f64d771038ede20fca6c61a9faa8178f9e305aaa0c2442a97"}, + {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:047b2d1323a51190c01b6604f49fe09682a5c85d3c1b2c8b67c1cd68419ce3c4"}, + {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30637e7fa4acfed444525b1ab9683f714be617862820578c9fd4e944d4d9ad1f"}, + {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adafe6f2c6d86dbf3313866b61180530ca4dcd0c264932dc8fa1ffb10871d58"}, + {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67ae3601edf86e15ebe40885e5bfdd6002d34879070be15cf18fc0d80ea24fed"}, + {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:48dddddce0ea7e7c3e92c1e0c5a28c13ca4dc9cf7e996c706d00479652bff76c"}, + {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:68e5c641645351eb9eb12c465876e76b53717f99e9b92aea7a2dd645a87aa7aa"}, + {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8fd5f8ae42f789538bb634bdfd69b9aa357e76fdfd7ad720f32f8994c0d84f1e"}, + {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:71988a76fcb68cc091e901fddbcac0f9ad9a475da222c47d3cf8db0876cb5344"}, + {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:4b8838f70be3ce9e706df9d72f88a0aa7d4c1fea61488e06fdf292ccb70ad2be"}, + {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:663dca677bd3d2e2b5b7d0329e9f24247e6f38f3b740dd9a778a8ef41a76af41"}, + {file = "regex-2022.6.2-cp37-cp37m-win32.whl", hash = "sha256:24963f0b13cc63db336d8da2a533986419890d128c551baacd934c249d51a779"}, + {file = "regex-2022.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ceff75127f828dfe7ceb17b94113ec2df4df274c4cd5533bb299cb099a18a8ca"}, + {file = "regex-2022.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a6f2698cfa8340dfe4c0597782776b393ba2274fe4c079900c7c74f68752705"}, + {file = "regex-2022.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8a08ace913c4101f0dc0be605c108a3761842efd5f41a3005565ee5d169fb2b"}, + {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26dbe90b724efef7820c3cf4a0e5be7f130149f3d2762782e4e8ac2aea284a0b"}, + {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5f759a1726b995dc896e86f17f9c0582b54eb4ead00ed5ef0b5b22260eaf2d0"}, + {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1fc26bb3415e7aa7495c000a2c13bf08ce037775db98c1a3fac9ff04478b6930"}, + {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52684da32d9003367dc1a1c07e059b9bbaf135ad0764cd47d8ac3dba2df109bc"}, + {file = "regex-2022.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c1264eb40a71cf2bff43d6694ab7254438ca19ef330175060262b3c8dd3931a"}, + {file = "regex-2022.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bc635ab319c9b515236bdf327530acda99be995f9d3b9f148ab1f60b2431e970"}, + {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:27624b490b5d8880f25dac67e1e2ea93dfef5300b98c6755f585799230d6c746"}, + {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:555f7596fd1f123f8c3a67974c01d6ef80b9769e04d660d6c1a7cc3e6cff7069"}, + {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:933e72fbe1829cbd59da2bc51ccd73d73162f087f88521a87a8ec9cb0cf10fa8"}, + {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cff5c87e941292c97d11dc81bd20679f56a2830f0f0e32f75b8ed6e0eb40f704"}, + {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c757f3a27b6345de13ef3ca956aa805d7734ce68023e84d0fc74e1f09ce66f7a"}, + {file = "regex-2022.6.2-cp38-cp38-win32.whl", hash = "sha256:a58d21dd1a2d6b50ed091554ff85e448fce3fe33a4db8b55d0eba2ca957ed626"}, + {file = "regex-2022.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:495a4165172848503303ed05c9d0409428f789acc27050fe2cf0a4549188a7d5"}, + {file = "regex-2022.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ab5cf7d09515548044e69d3a0ec77c63d7b9dfff4afc19653f638b992573126"}, + {file = "regex-2022.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1ea28f0ee6cbe4c0367c939b015d915aa9875f6e061ba1cf0796ca9a3010570"}, + {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de1ecf26ce85521bf73897828b6d0687cc6cf271fb6ff32ac63d26b21f5e764"}, + {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7c7044aabdad2329974be2246babcc21d3ede852b3971a90fd8c2056c20360"}, + {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53d69d77e9cfe468b000314dd656be85bb9e96de088a64f75fe128dfe1bf30dd"}, + {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8d61883a38b1289fba9944a19a361875b5c0170b83cdcc95ea180247c1b7d3"}, + {file = "regex-2022.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5429202bef174a3760690d912e3a80060b323199a61cef6c6c29b30ce09fd17"}, + {file = "regex-2022.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e85b10280cf1e334a7c95629f6cbbfe30b815a4ea5f1e28d31f79eb92c2c3d93"}, + {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c400dfed4137f32127ea4063447006d7153c974c680bf0fb1b724cce9f8567fc"}, + {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f648037c503985aed39f85088acab6f1eb6a0482d7c6c665a5712c9ad9eaefc"}, + {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e7b2ff451f6c305b516281ec45425dd423223c8063218c5310d6f72a0a7a517c"}, + {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:be456b4313a86be41706319c397c09d9fdd2e5cdfde208292a277b867e99e3d1"}, + {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c3db393b21b53d7e1d3f881b64c29d886cbfdd3df007e31de68b329edbab7d02"}, + {file = "regex-2022.6.2-cp39-cp39-win32.whl", hash = "sha256:d70596f20a03cb5f935d6e4aad9170a490d88fc4633679bf00c652e9def4619e"}, + {file = "regex-2022.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:3b9b6289e03dbe6a6096880d8ac166cb23c38b4896ad235edee789d4e8697152"}, + {file = "regex-2022.6.2.tar.gz", hash = "sha256:f7b43acb2c46fb2cd506965b2d9cf4c5e64c9c612bac26c1187933c7296bf08c"}, ] requests = [ {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"}, @@ -3135,6 +3243,14 @@ tomli = [ {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, ] +tomlkit = [ + {file = "tomlkit-0.8.0-py3-none-any.whl", hash = "sha256:b824e3466f1d475b2b5f1c392954c6cb7ea04d64354ff7300dc7c14257dc85db"}, + {file = "tomlkit-0.8.0.tar.gz", hash = "sha256:29e84a855712dfe0e88a48f6d05c21118dbafb283bb2eed614d46f80deb8e9a1"}, +] +tqdm = [ + {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, + {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, +] traitlets = [ {file = "traitlets-5.0.4-py3-none-any.whl", hash = "sha256:9664ec0c526e48e7b47b7d14cd6b252efa03e0129011de0a9c1d70315d4309c3"}, {file = "traitlets-5.0.4.tar.gz", hash = "sha256:86c9351f94f95de9db8a04ad8e892da299a088a64fd283f9f6f18770ae5eae1b"}, diff --git a/pyproject.toml b/pyproject.toml index d75e210d..23b7a31d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,26 @@ exclude = ''' ) ''' +[tool.djlint] +indent = 2 +profile = "jinja" +blank_line_after_tag = "if,for,include,load,extends,block" + +# H006: Images should have a height attribute +# H013: Images should have an alt attribute +# H016: Missing title tag in html. | False positive on template +# H017: Tag should be self closing +# H019: Replace 'javascript:abc()' with on_ event and real url. (javascript:history.back()) +# H021: Avoid inline styles +# H025: Tag seems to be orphan (it messes up with indicators on strings such as ) +# H030: Consider adding a meta description | False positive on template +# H031: Consider adding meta keywords +# T003: Endblock should have a name +# J004: (Jinja) Static urls should follow {{ url_for('static'..) }} pattern +# J018: (Jinja) Internal links should use the {{ url_for() ... }} pattern. | Some false positives +# T001: Variables should be wrapped in a single whitespace. | Messes up with comments +ignore = "H006,H013,H016,H017,H019,H021,H025,H030,H031,T003,J004,J018,T001" + [tool.poetry] name = "SimpleLogin" version = "0.1.0" @@ -98,6 +118,7 @@ pre-commit = "^2.17.0" black = "^22.1.0" flake8 = "^4.0.1" flake8-bugbear = "^22.1.11" +djlint = "0.7.3" [build-system] requires = ["poetry>=0.12"] diff --git a/templates/_formhelpers.html b/templates/_formhelpers.html index 7653a37b..8ed2645f 100644 --- a/templates/_formhelpers.html +++ b/templates/_formhelpers.html @@ -3,29 +3,21 @@
{{ field(**kwargs)|safe }} - - - {{ field.description }} - - + {{ field.description }} {% if field.errors %} -
{% endmacro %} - {% macro render_field_errors(field) %} {% if field.errors %} - {% endif %} - {% endblock %} - - {% block script %} + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/dashboard/alias_log.html b/templates/dashboard/alias_log.html index 5eb59d46..c912ffc0 100644 --- a/templates/dashboard/alias_log.html +++ b/templates/dashboard/alias_log.html @@ -1,7 +1,8 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} {% block head %} + + {% endblock %} -{% block title %} - Alias Activity -{% endblock %} - +{% block title %}Alias Activity{% endblock %} {% block default_content %} -

- {{ alias.email }} -

-
-
-
- - {{ total }} - Email Handled -
-
-
-
- - {{ email_forwarded }} - Email Forwarded -
-
-
-
- - {{ email_replied }} - Email Replied -
-
-
-
- - {{ email_blocked }} - Email Blocked -
-
-
-
- {% for log in logs %} -
-
-
{{ log.when | dt }} -
- {% if log.bounced %} - ⚠️ - {% else %} - {% if log.is_reply %} - - {% elif log.blocked %} - - {% else %} - - {% endif %} - {% endif %} -
-
+

{{ alias.email }}

+
+
+
+ +{{ total }} +Email Handled +
+
+
+
+ +{{ email_forwarded }} +Email Forwarded +
+
+
+
+ +{{ email_replied }} +Email Replied +
+
+
+
+ +{{ email_blocked }} +Email Blocked +
+
+
+
+{% for log in logs %} - {% if log.bounced and not log.is_reply %} -
- {{ log.website_email }} - - {{ log.alias }} - - {{ log.email_log.bounced_mailbox() }} -
- {% elif log.bounced and log.is_reply %} -
- {{ log.email_log.bounced_mailbox() }} - - {{ log.alias }} - - {{ log.website_email }} -
- {% else %} -
- {{ log.website_email }} -
- {% endif %} +
+
+
+{{ log.when | dt }} +
+{% if log.bounced %} +⚠️ +{% else %} +{% if log.is_reply %} -
-
- {% endfor %} -
+ +{% elif log.blocked %} + +{% else %} + +{% endif %} +{% endif %} +
+
+{% if log.bounced and not log.is_reply %} - -{% endblock %} - -{% block script %} +
+{{ log.website_email }} + +{{ log.alias }} + +{{ log.email_log.bounced_mailbox() }} +
+{% elif log.bounced and log.is_reply %} +
+{{ log.email_log.bounced_mailbox() }} + +{{ log.alias }} + +{{ log.website_email }} +
+{% else %} +
{{ log.website_email }}
+{% endif %} +
+
+{% endfor %} +
+ {% endblock %} +{% block script %}{% endblock %} diff --git a/templates/dashboard/alias_transfer_receive.html b/templates/dashboard/alias_transfer_receive.html index 9a6d6c6a..cd582b3d 100644 --- a/templates/dashboard/alias_transfer_receive.html +++ b/templates/dashboard/alias_transfer_receive.html @@ -1,46 +1,31 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} - -{% block title %} - Receive {{ alias.email }} -{% endblock %} - +{% block title %}Receive {{ alias.email }}{% endblock %} {% block default_content %} +

Receive {{ alias.email }}

-

You are invited to become the owner of the alias {{ alias.email }}

-

Please choose the mailbox(es) that owns this alias 👇

-
- {% for mailbox in mailboxes %} - {% endfor %} -
- -
- {% endblock %} - -{% block script %} - -{% endblock %} \ No newline at end of file +{% block script %}{% endblock %} diff --git a/templates/dashboard/alias_transfer_send.html b/templates/dashboard/alias_transfer_send.html index 2d005dcb..5d9872ca 100644 --- a/templates/dashboard/alias_transfer_send.html +++ b/templates/dashboard/alias_transfer_send.html @@ -1,47 +1,38 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} - -{% block title %} - Send {{ alias.email }} -{% endblock %} - +{% block title %}Send {{ alias.email }}{% endblock %} {% block default_content %} +

Transfer {{ alias.email }}

-

This page allows you to transfer {{ alias.email }} to another person so they can use it to receive and send emails.

- - {% if alias_transfer_url %} + {{ alias_transfer_url }} -

- Please copy the transfer URL. We won't be able to display it again. If you need to access it again you can generate a new URL. + Please copy the transfer URL. We won't be able to display it again. If you need to access it again you can generate a new URL.

-

- This transfer URL is valid for 24 hours. If it hasn't been used by then it will be automatically disabled. + This transfer URL is valid for 24 hours. If it hasn't been used by then it will be automatically disabled.

-
-
- If you don't want to share this alias anymore, you can remove the share URL. -
+
If you don't want to share this alias anymore, you can remove the share URL.
{% else %} {% if link_active %} +

You have an active transfer link. If you don't want to share this alias any more, please delete the link.

@@ -51,8 +42,8 @@ {% else %}

- In order to transfer ownership, - please create the Share URL 👇 and send it to the other person. + In order to transfer ownership, + please create the Share URL 👇 and send it to the other person.

@@ -60,17 +51,10 @@
{% endif %} {% endif %} -

This person can then confirm the reception and become the owner of the alias.

-
- After the confirmation, you can no longer use this alias. -
- - +
After the confirmation, you can no longer use this alias.
- {% endblock %} - diff --git a/templates/dashboard/api_key.html b/templates/dashboard/api_key.html index e0ac8983..50d499d4 100644 --- a/templates/dashboard/api_key.html +++ b/templates/dashboard/api_key.html @@ -1,103 +1,84 @@ -{% extends 'default.html' %} - -{% block title %} - API Key -{% endblock %} +{% extends "default.html" %} +{% block title %}API Key{% endblock %} {% set active_page = "api_key" %} - -{% block head %} -{% endblock %} - +{% block head %}{% endblock %} {% block default_content %} +
-

API Keys

- +

API Keys

When you log in on a SimpleLogin mobile app or browser extension, a new API Key is automatically created and stored on your device. It's usually named after the device where it was created, e.g. Samsung S8, John's iPhone, etc.
- -
️API Keys should be kept secret and treated like passwords, they can be used to gain access to your account.
-
{% for api_key in api_keys %} +
{{ api_key.name or "N/A" }}
{% if api_key.last_used %} + Created {{ api_key.created_at | dt }}. Used {{ api_key.times }} times. Was last used {{ api_key.last_used | dt }}. - {% else %} Never used {% endif %}
-
- +
- -
- +
-
- - Delete - + Delete
-
{% endfor %}
- {% if api_keys|length > 0 %} +
- Delete All     + Delete All    
-
+
{% endif %} - -
- +
{{ new_api_key_form.csrf_token }}

New API Key

- {{ new_api_key_form.name(class="form-control", placeholder="Chrome") }} {{ render_field_errors(new_api_key_form.name) }}
Name of the api key, e.g. where it will be used.
-
- -
-
{% endblock %} - {% block script %} + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/dashboard/block_contact.html b/templates/dashboard/block_contact.html index 46ca8e3e..3426cd10 100644 --- a/templates/dashboard/block_contact.html +++ b/templates/dashboard/block_contact.html @@ -1,28 +1,19 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} - -{% block title %} - Block a sender -{% endblock %} - +{% block title %}Block a sender{% endblock %} {% block default_content %}
-

- Block sender -

+

Block sender

You are about to block the sender {{ contact.website_email }} from sending emails to {{ contact.alias.email }}

-
- {% endblock %} - diff --git a/templates/dashboard/contact_detail.html b/templates/dashboard/contact_detail.html index 3e39e2fd..dca2f9d0 100644 --- a/templates/dashboard/contact_detail.html +++ b/templates/dashboard/contact_detail.html @@ -1,11 +1,7 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} - -{% block title %} - Contact {{ contact.email }} - Alias {{ alias.email }} -{% endblock %} - +{% block title %}Contact {{ contact.email }} - Alias {{ alias.email }}{% endblock %} {% block default_content %}
@@ -13,21 +9,24 @@

-
-
Pretty Good Privacy (PGP) @@ -37,44 +36,30 @@ are encrypted.
- {% if not current_user.is_premium() %} - - {% endif %} + + {% endif %}
- - - - +
- - {% if contact.pgp_finger_print %} + {% endif %} -
-
- {% endblock %} - {% block script %} - - + + + {% endblock %} diff --git a/templates/dashboard/coupon.html b/templates/dashboard/coupon.html index 6a7a4059..ad1314e6 100644 --- a/templates/dashboard/coupon.html +++ b/templates/dashboard/coupon.html @@ -1,70 +1,53 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} - {% block head %} + - - - + {% endblock %} - -{% block title %} - Coupon -{% endblock %} - +{% block title %}Coupon{% endblock %} {% block default_content %} - {% if can_use_coupon %} -
-
-

Coupon

- -
- Please enter the coupon here to upgrade your account or extend your current subscription. -
- -
- {{ coupon_form.csrf_token }} - - {{ coupon_form.code(class="form-control", placeholder="Licence Code") }} - {{ render_field_errors(coupon_form.code) }} - -
-
-
- {% endif %} - -
-
-

1-year coupon

-
- You can buy a 1-year coupon that allows anyone to have the SimpleLogin premium for 1 year. - Can be an idea for a gift card :). - After the payment, the coupon will be sent to you by email. -
-
- The coupon must be used before {{ max_coupon_date.date().isoformat() }} -
- Buy 1-year SimpleLogin - coupon -
-
+{% if can_use_coupon %} +
+
+

Coupon

+
Please enter the coupon here to upgrade your account or extend your current subscription.
+
+{{ coupon_form.csrf_token }} +{{ coupon_form.code(class="form-control", placeholder="Licence Code") }} +{{ render_field_errors(coupon_form.code) }} + +
+
+
+{% endif %} +
+
+

1-year coupon

+
+You can buy a 1-year coupon that allows anyone to have the SimpleLogin premium for 1 year. +Can be an idea for a gift card :). +After the payment, the coupon will be sent to you by email. +
+
The coupon must be used before {{ max_coupon_date.date().isoformat() }}
+ +Buy 1-year SimpleLogin +coupon + +
+
{% endblock %} - -{% block script %} - -{% endblock %} \ No newline at end of file +{% block script %}{% endblock %} diff --git a/templates/dashboard/custom_alias.html b/templates/dashboard/custom_alias.html index c48f556c..54231114 100644 --- a/templates/dashboard/custom_alias.html +++ b/templates/dashboard/custom_alias.html @@ -1,34 +1,33 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% set active_page = "dashboard" %} - -{% block title %} - Custom Alias -{% endblock %} - +{% block title %}Custom Alias{% endblock %} {% block default_content %} +

New Custom Alias

- {% if user_custom_domains|length == 0 and not DISABLE_ALIAS_SUFFIX %} +
{% endif %} -
- - + autofocus + required>
- -
-
-
- The mailbox(es) that owns this alias. -
+
The mailbox(es) that owns this alias.
-
-
@@ -105,10 +100,9 @@
- {% endblock %} - {% block script %} + + {% endblock %} - diff --git a/templates/dashboard/custom_domain.html b/templates/dashboard/custom_domain.html index 0510aa46..b967f77b 100644 --- a/templates/dashboard/custom_domain.html +++ b/templates/dashboard/custom_domain.html @@ -1,24 +1,26 @@ -{% extends 'default.html' %} +{% extends "default.html" %} + {% set active_page = "custom_domain" %} - -{% block title %} - Custom Domains -{% endblock %} - -{% block head %} -{% endblock %} - +{% block title %}Custom Domains{% endblock %} +{% block head %}{% endblock %} {% block default_content %} +
-

Custom Domains -

- {% if not current_user.is_premium() %} + {% endif %} - - -

{% endblock %} - -{% block script %} - -{% endblock %} \ No newline at end of file +{% block script %}{% endblock %} diff --git a/templates/dashboard/delete_account.html b/templates/dashboard/delete_account.html index 23777520..c7f12afb 100644 --- a/templates/dashboard/delete_account.html +++ b/templates/dashboard/delete_account.html @@ -1,11 +1,9 @@ -{% extends 'default.html' %} +{% extends "default.html" %} + {% set active_page = "setting" %} -{% block title %} - Delete account -{% endblock %} - - +{% block title %}Delete account{% endblock %} {% block default_content %} +
Account Deletion
@@ -13,7 +11,6 @@ Once an account is deleted, it can't be restored. All its records (aliases, domains, settings, etc.) are immediately deleted.
-
@@ -21,8 +18,8 @@
{% endblock %} - {% block script %} + -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/dashboard/directory.html b/templates/dashboard/directory.html index a0bd842d..500eace4 100644 --- a/templates/dashboard/directory.html +++ b/templates/dashboard/directory.html @@ -1,198 +1,176 @@ -{% extends 'default.html' %} +{% extends "default.html" %} + {% set active_page = "directory" %} - -{% block title %} - Directory -{% endblock %} - +{% block title %}Directory{% endblock %} {% block default_content %} +
-

Directories -

- - {% if not current_user.is_premium() %} - - {% endif %} - +
+ {% for dir in dirs %} -
- {% for dir in dirs %} -
-
-
-
-
- {{ dir.name }} - - - - - - - -
-
- -
- {% if dir.disabled %} -
- ⚠️ On-the-fly alias creation is disabled, you can't create new aliases with this directory. -
- {% endif %} - Created {{ dir.created_at | dt }}
- {{ dir.nb_alias() }} aliases. - -

- - Mailboxes: -
- - {% set dir_mailboxes=dir.mailboxes %} -
- +
+
+
+
+
+ {{ dir.name }} + + - - - + -
-
- -
+
+ {% if dir.disabled %} +
⚠️ On-the-fly alias creation is disabled, you can't create new aliases with this directory.
+ {% endif %} + Created {{ dir.created_at | dt }} +
+ {{ dir.nb_alias() }} aliases. +
+
+ Mailboxes: +
+ {% set dir_mailboxes=dir.mailboxes %} +
+ + + + +
+
+
+
- {% endfor %} -
+
+ {% endfor %} +
+
+
+
+
+
+ {{ new_dir_form.csrf_token }} + +

New Directory

+
You can create up to {{ current_user.directory_quota }} directories.
+ {{ new_dir_form.name(class="form-control", placeholder="my-directory", + pattern="[0-9a-z-_]{3,}", + title="Only letter, number, dash (-), underscore (_) can be used. Directory name must be at least 3 characters.") }} + {{ render_field_errors(new_dir_form.name) }} +
+ Directory name must be at least 3 characters. + Only lowercase letters, numbers, dashes (-) and underscores (_) are currently supported. +
+
+ By default, aliases created with directory are "owned" by your default + mailbox {{ current_user.default_mailbox.email }}. +
+ You can however choose the mailbox(es) that new alias automatically belongs to by setting this below + option. +
+ - -

New Directory

-
- You can create up to {{ current_user.directory_quota }} directories. -
- - {{ new_dir_form.name(class="form-control", placeholder="my-directory", - pattern="[0-9a-z-_]{3,}", - title="Only letter, number, dash (-), underscore (_) can be used. Directory name must be at least 3 characters.") }} - {{ render_field_errors(new_dir_form.name) }} -
- Directory name must be at least 3 characters. - Only lowercase letters, numbers, dashes (-) and underscores (_) are currently supported. -
- -
- By default, aliases created with directory are "owned" by your default - mailbox {{ current_user.default_mailbox.email }}.
- You can however choose the mailbox(es) that new alias automatically belongs to by setting this below - option. - -
- - - - -
- -
+ + {% endfor %} + + +

-
+
{% endblock %} - {% block script %} + -{% endblock %} - +{% block script %}{% endblock %} diff --git a/templates/dashboard/domain_detail/base.html b/templates/dashboard/domain_detail/base.html index 9aa53519..4567b313 100644 --- a/templates/dashboard/domain_detail/base.html +++ b/templates/dashboard/domain_detail/base.html @@ -1,12 +1,13 @@ -{% extends 'default.html' %} +{% extends "default.html" %} {% if custom_domain.is_sl_subdomain %} + {% set active_page = "subdomain" %} {% else %} {% set active_page = "custom_domain" %} {% endif %} - {% block default_content %} +
@@ -14,39 +15,31 @@ class="list-group-item list-group-item-action {{ 'active' if domain_detail_page == 'info' }}"> Info - {% if not custom_domain.is_sl_subdomain %} + DNS {% endif %} - Deleted Alias - Auto Create -
-
- {% block domain_detail_content %} - {% endblock %} + {% block domain_detail_content %}{% endblock %}
- {% endblock %} - - diff --git a/templates/dashboard/domain_detail/dns.html b/templates/dashboard/domain_detail/dns.html index 7a07695f..a3023f40 100644 --- a/templates/dashboard/domain_detail/dns.html +++ b/templates/dashboard/domain_detail/dns.html @@ -1,136 +1,134 @@ -{% extends 'dashboard/domain_detail/base.html' %} +{% extends "dashboard/domain_detail/base.html" %} {% set domain_detail_page = "dns" %} - -{% block title %} - {{ custom_domain.domain }} DNS -{% endblock %} - - +{% block title %}{{ custom_domain.domain }} DNS{% endblock %} {% block domain_detail_content %} +
-

{{ custom_domain.domain }}

-
Please follow the steps below to set up your domain.
- -
- DNS changes could take up to 24 hours to update. -
- +

{{ custom_domain.domain }}

+
Please follow the steps below to set up your domain.
+
DNS changes could take up to 24 hours to update.
{% if not custom_domain.ownership_verified %} -
-
Domain ownership verification +
+
+ Domain ownership verification {% if custom_domain.ownership_verified %} - + + {% else %} - 🚫 + 🚫 {% endif %}
- {% if not custom_domain.ownership_verified %}
To verify ownership of the domain, please add the following TXT record. Some domain registrars (Namecheap, CloudFlare, etc) might use @ for the root domain.
-
- Record: TXT
- Domain: {{ custom_domain.domain }} or @
+ Record: TXT +
+ Domain: {{ custom_domain.domain }} or @ +
Value: {{ custom_domain.get_ownership_dns_txt_value() }} + title="Click to copy" + class="clipboard" + data-clipboard-text="{{ custom_domain.get_ownership_dns_txt_value() }}">{{ custom_domain.get_ownership_dns_txt_value() }}
-
- +
- {% if not ownership_ok %} +
Your DNS is not correctly set. The TXT record we obtain is:
- {% if not ownership_errors %} - (Empty) - {% endif %} + {% if not ownership_errors %}(Empty){% endif %} {% for r in ownership_errors %} - {{ r }}
+ + {{ r }} +
{% endfor %}
{% endif %} -
- {% endif %} -
- {% endif %} - -
- - {% if not custom_domain.ownership_verified %} -
- A domain ownership must be verified first.
{% endif %} +
+ {% endif %} +
+ {% if not custom_domain.ownership_verified %} +
A domain ownership must be verified first.
+ {% endif %}
-
1. MX record - +
+ 1. MX record {% if custom_domain.verified %} - + + {% else %} - 🚫 + 🚫 {% endif %}
- -
Add the following MX DNS record to your domain.
+
+ Add the following MX DNS record to your domain. +
Please note that there's a dot (.) at the end target addresses. If your domain registrar doesn't allow this trailing dot, please remove it when adding the DNS record. -
+
Some domain registrars (Namecheap, CloudFlare, etc) might also use @ for the root domain.
- {% for priority, email_server in EMAIL_SERVERS_WITH_PRIORITY %} +
- Record: MX
+ Record: MX +
Domain: {{ custom_domain.domain }} or - @
- Priority: {{ priority }}
+ @ +
+ Priority: {{ priority }} +
Target: {{ email_server }} + title="Click to copy" + class="clipboard" + data-clipboard-text="{{ email_server }}">{{ email_server }}
{% endfor %} -
{% if custom_domain.verified %} - + + {% else %} - + {% endif %}
- {% if not mx_ok %} +
Your DNS is not correctly set. The MX record we obtain is:
- {% if not mx_errors %} - (Empty) - {% endif %} + {% if not mx_errors %}(Empty){% endif %} {% for r in mx_errors %} - {{ r }}
+ + {{ r }} +
{% endfor %}
{% if custom_domain.verified %} +
Without the MX record set up correctly, you can miss emails sent to your aliases. Please update the MX record ASAP. @@ -139,33 +137,40 @@
{% endif %}
- -
- +
-
2. SPF (Optional) +
+ 2. SPF (Optional) {% if custom_domain.spf_verified %} - + + {% else %} - 🚫 + 🚫 {% endif %}
-
- SPF (Wikipedia↗) is an email + SPF + (Wikipedia↗) + is an email authentication method - designed to detect forging sender addresses during the delivery of the email.
+ designed to detect forging sender addresses during the delivery of the email. +
Setting up SPF is highly recommended to reduce the chance your emails ending up in the recipient's Spam folder.
-
Add the following TXT DNS record to your domain.
-
- Record: TXT
+ Record: TXT +
Domain: {{ custom_domain.domain }} or - @
+ @ +
Value:
-
{% if custom_domain.spf_verified %} - + + {% else %} - + {% endif %}
- {% if not spf_ok %} +
Your DNS is not correctly set. The TXT record we obtain is:
- {% if not spf_errors %} - (Empty) - {% endif %} - + {% if not spf_errors %}(Empty){% endif %} {% for r in spf_errors %} - {{ r }}
+ + {{ r }} +
{% endfor %}
{% if custom_domain.spf_verified %} + Without SPF setup, emails you sent from your alias might end up in Spam/Junk folder. {% endif %}
{% endif %}
- -
- +
-
3. DKIM (Optional) +
+ 3. DKIM (Optional) {% if custom_domain.dkim_verified %} - + + {% else %} - 🚫 + 🚫 {% endif %}
-
- DKIM (Wikipedia↗) + DKIM + (Wikipedia↗) is an email authentication method - designed to avoid email spoofing.
+ designed to avoid email spoofing. +
Setting up DKIM is highly recommended to reduce the chance your emails ending up in the recipient's Spam folder.
- -
Add the following CNAME DNS record to your domain.
- +
+ Add the following CNAME DNS record to your domain. +
- Record: CNAME
+ Record: CNAME +
Domain: dkim._domainkey
+ title="Click to copy" + class="clipboard" + data-clipboard-text="dkim._domainkey">dkim._domainkey
+
Value: + data-clipboard-text="{{ dkim_cname + '.' }}" + style="overflow-wrap: break-word"> {{ dkim_cname }}.
-
Some DNS registrar might require a full record path, in this case please use - dkim._domainkey.{{ custom_domain.domain }} as domain value instead.
+ dkim._domainkey.{{ custom_domain.domain }} as domain value instead. +
If you are using a subdomain, e.g. subdomain.domain.com, you need to use dkim._domainkey.subdomain as domain value instead. -
+
- If you are using CloudFlare, please make sure to not select the Proxy option.

+ If you are using CloudFlare, please make sure to not select the Proxy option. +
+
-
{% if custom_domain.dkim_verified %} + @@ -269,54 +282,67 @@ {% endif %}
- {% if not dkim_ok %} +
Your DNS is not correctly set. {% if dkim_errors %} + The CNAME record we obtain for dkim._domainkey.{{ custom_domain.domain }} is: -
{% for r in dkim_errors %} - {{ r }}
+ + {{ r }} +
{% endfor %}
{% endif %} - {% if custom_domain.dkim_verified %} + Without DKIM setup, emails you sent from your alias might end up in Spam/Junk folder. {% endif %}
{% endif %}
- -
- +
-
4. DMARC (Optional) +
+ 4. DMARC (Optional) {% if custom_domain.dmarc_verified %} - + + {% else %} - 🚫 + 🚫 {% endif %}
-
- DMARC (Wikipedia↗) - is designed to protect the domain from unauthorized use, commonly known as email spoofing.
+ DMARC + + (Wikipedia↗) + + is designed to protect the domain from unauthorized use, commonly known as email spoofing. +
Built around SPF and DKIM, a DMARC policy tells the receiving mail server what to do if neither of those authentication methods passes.
- -
Add the following TXT DNS record to your domain.
- +
+ Add the following TXT DNS record to your domain. +
- Record: TXT
+ Record: TXT +
Domain: _dmarc
+ title="Click to copy" + class="clipboard" + data-clipboard-text="_dmarc">_dmarc +
Value:
-
Some DNS registrar might require a full record path, in this case please use - _dmarc.{{ custom_domain.domain }} as domain value instead.
+ _dmarc.{{ custom_domain.domain }} as domain value instead. +
If you are using a subdomain, e.g. subdomain.domain.com, you need to use _dmarc.subdomain as domain value instead. -
+
-
{% if custom_domain.dmarc_verified %} + @@ -346,27 +372,26 @@ {% endif %}
- {% if not dmarc_ok %} +
Your DNS is not correctly set. The TXT record we obtain is:
- {% if not dmarc_errors %} - (Empty) - {% endif %} - + {% if not dmarc_errors %}(Empty){% endif %} {% for r in dmarc_errors %} - {{ r }}
+ + {{ r }} +
{% endfor %}
{% if custom_domain.dmarc_verified %} + Without DMARC setup, emails sent from your alias might end up in the Spam/Junk folder. {% endif %}
{% endif %}
-
{% endblock %} diff --git a/templates/dashboard/domain_detail/info.html b/templates/dashboard/domain_detail/info.html index 81c6fd3a..25485e7f 100644 --- a/templates/dashboard/domain_detail/info.html +++ b/templates/dashboard/domain_detail/info.html @@ -1,71 +1,59 @@ -{% extends 'dashboard/domain_detail/base.html' %} +{% extends "dashboard/domain_detail/base.html" %} {% set domain_detail_page = "info" %} - -{% block title %} - {{ custom_domain.domain }} Info -{% endblock %} - +{% block title %}{{ custom_domain.domain }} Info{% endblock %} {% block domain_detail_content %} -

{{ custom_domain.domain }}

+

{{ custom_domain.domain }}

Created {{ custom_domain.created_at | dt }}. {{ nb_alias }} aliases
- -
-

Auto create/on the fly alias

- - +
+

Auto create/on the fly alias

- -