diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml index f698098f..67d99cea 100644 --- a/.github/workflows/django.yml +++ b/.github/workflows/django.yml @@ -17,7 +17,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.9.1 + python-version: 3.9 - uses: actions/cache@v2 id: pcache with: diff --git a/Pipfile b/Pipfile index 08ecda19..27622031 100644 --- a/Pipfile +++ b/Pipfile @@ -26,14 +26,14 @@ django-registration-redux = "~=2.9" django-reversion = "~=3.0.9" django-widget-tweaks = "~=1.4.8" django-htmlmin = "~=0.11.0" -envparse = "~=0.2.0" +envparse = "*" gunicorn = "~=20.0.4" icalendar = "~=4.0.7" idna = "~=2.10" Markdown = "~=3.3.3" msgpack = "~=1.0.2" pep517 = "~=0.9.1" -Pillow = "~=9.0.0" +Pillow = "~=9.3.0" premailer = "~=3.7.0" progress = "~=1.5" psutil = "~=5.8.0" diff --git a/Pipfile.lock b/Pipfile.lock index e2db9a58..0aad1dab 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9e8106843167f6769c280c730516d3a61bad5d5dc6238897b7c1e7e9fe63124a" + "sha256": "fcd984e26845bc82b41f2651b61696f8f19be81ea6fb770751596b53f7b2bd2b" }, "pipfile-spec": 6, "requires": { @@ -155,10 +155,10 @@ }, "certifi": { "hashes": [ - "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", - "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], - "version": "==2022.9.24" + "version": "==2022.12.7" }, "chardet": { "hashes": [ @@ -240,11 +240,11 @@ }, "django-debug-toolbar": { "hashes": [ - "sha256:1e3acad24e3d351ba45c6fa2072e4164820307332a776b16c9f06d1f89503465", - "sha256:80de23066b624d3970fd296cf02d61988e5d56c31aa0dc4a428970b46e2883a8" + "sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27", + "sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478" ], "index": "pypi", - "version": "==3.7.0" + "version": "==3.8.1" }, "django-filter": { "hashes": [ @@ -364,12 +364,12 @@ }, "importlib-metadata": { "hashes": [ - "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", - "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" + "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b", + "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313" ], "index": "pypi", "markers": "python_version < '3.10'", - "version": "==5.0.0" + "version": "==5.1.0" }, "lxml": { "hashes": [ @@ -514,10 +514,10 @@ }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3", + "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3" ], - "version": "==21.3" + "version": "==22.0" }, "pep517": { "hashes": [ @@ -529,83 +529,111 @@ }, "pikepdf": { "hashes": [ - "sha256:0207442d9b943efec7eb07ea5b3f138d90cc61429a3c3243902ac909cb508fb2", - "sha256:0709832cc49ef51f004975e6e9bdc6daee8a8d68de621d428f13c95a83952e7f", - "sha256:07448689cc4c1e249e26ae694a2060210948e61035356cca3a5b8baf3a6a147d", - "sha256:0bbf45e702bb0556d705e1a4b5da391921e024cc1e6823675f2ea200acec1199", - "sha256:1376f3f4b1c34ac089a644af2e499ca713e4e4ec17035362350c0ec78ca6286e", - "sha256:15725f1bf572abb9a675f61874da66dc22144e74f374f7e8d023558e8c9c3f38", - "sha256:18383d8e6a620c52974b75034ad99c423f80468a434b52de456bb74d5ab51360", - "sha256:1dedbb95bb2c67d6923c91cdcd5a92703d10e4c4825d85cd7b8b474039978741", - "sha256:2035b39d2e5c97b6d9ede632f514403888e3f47d2b1e8b69b98420766ccb898b", - "sha256:2dd952e678dfc523f2c481c3d0a29b9823f07024f73dea7e9c03d2ac6592a61c", - "sha256:3d06dabf16592bb7975e1124000212c3c3bab1e97ed3f7c6534ea92efe9b621a", - "sha256:40999c3f48e5d0259662f6f708694d3ace43b01b4a2a197cfed5cf230557b116", - "sha256:46c7c9a7128d1751eedbe769dbc6c0a7983eccded74fd7d1e236d83a50c9cc58", - "sha256:529d4d099eecbdaa3e06490a032954ce96feae2596c1ea22f961dbf791444a3c", - "sha256:5887799a29510b53c7015b05d7276ee2e0f0ff1d782c75c3a3d1d9f68013665e", - "sha256:5c2de883986ef25e2e9b8ded8e5c285cb390950742164ce1bf116158009cd9c9", - "sha256:62a8c05876b9c7af4cad0ba9a8f22c77775bcceb118c35d682735955f5485297", - "sha256:6df4510606546c9c995afe3f799c506fe90798602b0628affffb7e1516fa1062", - "sha256:746897cbfc0c200de6be428a4e92dee72d0e03e1ff00d56006ee94fb59be199d", - "sha256:801100d8b4b885a203e76bc7266296f909944d621e6a0ac480fa2a0a0e0b1bb4", - "sha256:823f8b1cbad1182709d81afa32c23ac37b9c8ed33bdbc2b41f674be9420dc108", - "sha256:94057ca79525ba5eb5cc9c42337364f0e9e5f239887c0457dffb4ba3e6ac0187", - "sha256:9b1ba16cc5eb243c5e684c220752358a8e1e28a4e02ecdf2c3d24646f29c623f", - "sha256:9c9d75bb77dfe9b6f8915bc5339cfb0db427c3cb7cd75aa419b1da3c82f122ed", - "sha256:a0b78071d5fcd6b2288da469e89c030475095349dd57d82f5c40c37600d02e14", - "sha256:a1679c7d5b374895b6196784a75b8122ca0bb9248f5d97cd5ed77c569e264e88", - "sha256:ab8d610ca732a6369479605817cc55ee6f62d5b105ffe7e3749c3785c383631e", - "sha256:aff2ce52f0ab4ea8a1fbe57b06982b9fa9f997dd6bbec4b141091a1e71145a63", - "sha256:bc9b625f5ed454f445bf5012682b24d334adc9f853d41e44cfee7c52ddf92666", - "sha256:e0e66d49f8a85a4e0f915d42471643a5020bcdbef02586e49328ed417c13326a", - "sha256:e3dbcecc145d46d37738a407e0ddcce7cfb76d3e116ab3ba9c80f4dd14e71a3d", - "sha256:e99a90279a8254fa149d56cd307f94908c7844b2b8b42b61d241259804e40643", - "sha256:efc497cd01c55c5dbdd8a81766e317f44f728b3ceb65d7b6c6a064772c60e1c7", - "sha256:f35cecdab44cb01377e93a60a475bf4437854d98cb94379fcd65c6daa1c9a37e" + "sha256:08ca2566c3ddcb633bbfb90c9e2b7134f222ab48f642f056c266fd69a4c0844e", + "sha256:15eff12d7b5dc4eeeb9fbe5148d5e93cdc9f632a352d7df5191409837cdada6f", + "sha256:24717a49cab8cf0ccb360ae38fefe4b09e23d394086ef6da740071165a2542d8", + "sha256:2c1a3a1ae0d787a6819ffb9d456b0ccbf2b8d48ad8b0748f765a6a306b92184b", + "sha256:2c653bc771cc6065642f5a734ecb771ff16b5412cf05a5c3435072ac01f84fbe", + "sha256:2e9c9cc68bc123b88007b321a494ab054c3ce378ee2f77bba1b90c8bdaaad59e", + "sha256:32a7775f8b2117e72fa101427edf4526f0886e785146a7bfdf2a877d27f94dbf", + "sha256:4675c743ac873d8a1ff9d06c1d5fab15e9ca66aa1abf73fcbca4b86c976b214e", + "sha256:4800fd878876d9a780e2d1125e971d680a0de466440bd6bcbc54ac7cfb925fd6", + "sha256:5b1271b200ece3e16ffa97c76ff93c057d3676f2ecee89ae52efd5e4804874ab", + "sha256:5b1c975d02e75aa8a0e09679ed23f85b6eddf91ac7c85189dc18f1ef8599ce70", + "sha256:5b295d9579081ab46ce7bb463eccbc62e0c60cbe546f29c0a9135abd5cf76a24", + "sha256:5f040aa7d9327b6d9087848dc8e35d2b8515bf17a04e2bdb20f8c51931810213", + "sha256:62d724e37a2f004f63615513d3f877334e679dd43b6c55cdfe9b8af56ff52400", + "sha256:6452fa9d10b15bb60b2343b7ac08123e0c5b87f852250538d32bf556f09b8c3a", + "sha256:66679ee6b364b3b9659a72697e053554e2f4c231371173745b59114f00a821e5", + "sha256:6b21fde29bd006cb0889e05a0407f0825b5650ae22272ba70720fc68a2e44a0e", + "sha256:788df6789df19a381976f6644b78a65da92c5d4fd45714682a1cffb0cd3ff410", + "sha256:7a6de8d04df3dc4f37ddbdfdbecdb4c3d20d479699260902ec06fa531cbfbae6", + "sha256:80a4546f59bb38121c20fc37305a388b8f9d561c6bbcc77a3415afdd8a7ab16d", + "sha256:856e527970fa2516858662906173004568a38f95b46ef95c8231c529f3e71581", + "sha256:8874d4d38b2da71837352576c5ec10c03b2a7976124b95721564d8c456c9824b", + "sha256:913437609c3e5b9109a2fe1100f52bdcead4e56e8c83ca8a9c3b520cd7720016", + "sha256:91fd023805733163927ae04b16d48374f04f03f204f2cfa45d442b052314de83", + "sha256:9d9fe5e3fbd54a45fe7678c08d24c1e8347a1e48adcb4f32c6c25ef380f056ca", + "sha256:a98fcebb4303b8b2f5cde0d56f2406a53e74a9ad4bc1e1bc12bdc2b3dd4def1f", + "sha256:aa7d3831fa016634f2ead255717644ba2dddf462117b8558b783ac2ba94583bb", + "sha256:ae0ba99841d80107becaec6ed067b63c455f51a9bb83b0e88efd3a098753735b", + "sha256:b77e2e134315d25dd004b4ffbd2d5032352da164b21bc3bd92768379610fa2b5", + "sha256:c5a2710aacb1fa25edd77feba51dcadf85a9b735f2190e8b45edf0e1e79b5d1d", + "sha256:c768e55caf96024218866a5b5f95fdded2ef001b2d5463d1c89e57d07bdab928", + "sha256:d55b1d8eb3b17e55682b91c042c48e2d0c67be4c1e30b7e539a82e03977eed29", + "sha256:d57a35b3ed3f8ef98aa528d4981d1376ccc1ba64ab937f2ac2ed0aadee1d5911", + "sha256:e35110f69406e5b9cf6330d16106877372f6aa955fdc1a920d53babcd6a5ae3d", + "sha256:e3ff858d504312ea07519121d3ecdf1b5bc40541f957d2b85d271a2ca6284b70", + "sha256:f721cd86d8ddf0624306fcd1fed3e086387fcb2e32baeafbd1ba92a7c40c5563" ], - "version": "==6.2.4" + "version": "==6.2.5" }, "pillow": { "hashes": [ - "sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97", - "sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049", - "sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c", - "sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae", - "sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28", - "sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030", - "sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56", - "sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976", - "sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e", - "sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e", - "sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f", - "sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b", - "sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a", - "sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e", - "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa", - "sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7", - "sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00", - "sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838", - "sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360", - "sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b", - "sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a", - "sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd", - "sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4", - "sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70", - "sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204", - "sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc", - "sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b", - "sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669", - "sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7", - "sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e", - "sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c", - "sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092", - "sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c", - "sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5", - "sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac" + "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040", + "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8", + "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65", + "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2", + "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627", + "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07", + "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef", + "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535", + "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c", + "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc", + "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3", + "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1", + "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c", + "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa", + "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32", + "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502", + "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4", + "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f", + "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812", + "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636", + "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20", + "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c", + "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91", + "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe", + "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b", + "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad", + "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9", + "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72", + "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4", + "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de", + "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29", + "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee", + "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c", + "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7", + "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11", + "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c", + "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c", + "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448", + "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b", + "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20", + "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228", + "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd", + "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699", + "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b", + "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2", + "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4", + "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c", + "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f", + "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2", + "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c", + "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3", + "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193", + "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48", + "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02", + "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8", + "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e", + "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f", + "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b", + "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74", + "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb", + "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0" ], "index": "pypi", - "version": "==9.0.1" + "version": "==9.3.0" }, "pluggy": { "hashes": [ @@ -809,10 +837,11 @@ }, "retrying": { "hashes": [ - "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b" + "sha256:345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e", + "sha256:8cc4d43cb8e1125e0ff3344e9de678fefd85db3b750b81b2240dc0183af37b35" ], "index": "pypi", - "version": "==1.3.3" + "version": "==1.3.4" }, "selenium": { "hashes": [ @@ -824,11 +853,11 @@ }, "sentry-sdk": { "hashes": [ - "sha256:e7b78a1ddf97a5f715a50ab8c3f7a93f78b114c67307785ee828ef67a5d6f117", - "sha256:f467e6c7fac23d4d42bc83eb049c400f756cd2d65ab44f0cc1165d0c7c3d40bc" + "sha256:675f6279b6bb1fea09fd61751061f9a90dca3b5929ef631dd50dc8b3aeb245e9", + "sha256:8b4ff696c0bdcceb3f70bbb87a57ba84fd3168b1332d493fcd16c137f709578c" ], "index": "pypi", - "version": "==1.11.0" + "version": "==1.11.1" }, "simplejson": { "hashes": [ @@ -970,12 +999,11 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], "index": "pypi", - "markers": "python_version >= '3.6'", - "version": "==1.26.12" + "version": "==1.26.13" }, "webencodings": { "hashes": [ @@ -1223,10 +1251,10 @@ }, "certifi": { "hashes": [ - "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", - "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], - "version": "==2022.9.24" + "version": "==2022.12.7" }, "charset-normalizer": { "hashes": [ @@ -1300,11 +1328,11 @@ }, "django-coverage-plugin": { "hashes": [ - "sha256:3b0aa1ed26b52c5844c88510995f4a4b60b4fb0679970d11f82654bb8a2bd16a", - "sha256:f662efe592bf98baf2e540312059c918daa8d8379244a2a6b6f984c4a1dda015" + "sha256:245ecd6e91e5be7a66e0f811fd57091c46b55c0eb85c7fe1a1e4aebca9842a5f", + "sha256:c063d8d49ba2da30fe95d91cf3f0f9f659b55c3f80d4a029d619b2b3144b1206" ], "index": "pypi", - "version": "==2.0.4" + "version": "==3.0.0" }, "docopt": { "hashes": [ @@ -1358,10 +1386,10 @@ }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3", + "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3" ], - "version": "==21.3" + "version": "==22.0" }, "pluggy": { "hashes": [ @@ -1412,14 +1440,6 @@ "index": "pypi", "version": "==2.9.1" }, - "pyparsing": { - "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" - ], - "index": "pypi", - "version": "==2.4.7" - }, "pypom": { "hashes": [ "sha256:5da52cf447e62f43a0cfa47dfe52eb822eff07b2fdad759f930d1d227c15220b", @@ -1478,11 +1498,11 @@ }, "pytest-xdist": { "hashes": [ - "sha256:688da9b814370e891ba5de650c9327d1a9d861721a524eb917e620eec3e90291", - "sha256:9feb9a18e1790696ea23e1434fa73b325ed4998b0e9fcb221f16fd1945e6df1b" + "sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c", + "sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89" ], "index": "pypi", - "version": "==3.0.2" + "version": "==3.1.0" }, "requests": { "hashes": [ @@ -1500,14 +1520,6 @@ "index": "pypi", "version": "==3.141.0" }, - "six": { - "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" - ], - "index": "pypi", - "version": "==1.15.0" - }, "sniffio": { "hashes": [ "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", @@ -1553,12 +1565,11 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], "index": "pypi", - "markers": "python_version >= '3.6'", - "version": "==1.26.12" + "version": "==1.26.13" }, "wsproto": { "hashes": [ diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py index 5db9bf8d..13eb9748 100644 --- a/PyRIGS/settings.py +++ b/PyRIGS/settings.py @@ -42,8 +42,9 @@ if not DEBUG: INTERNAL_IPS = ['127.0.0.1'] -ADMINS = [('Tom Price', 'tomtom5152@gmail.com'), ('IT Manager', 'it@nottinghamtec.co.uk'), - ('Arona Jones', 'arona.jones@nottinghamtec.co.uk')] +DOMAIN = env('DOMAIN', default='example.com') + +ADMINS = [('IT Manager', f'it@{DOMAIN}'), ('Arona Jones', f'arona.jones@{DOMAIN}')] if DEBUG: ADMINS.append(('Testing Superuser', 'superuser@example.com')) diff --git a/RIGS/management/commands/send_reminders.py b/RIGS/management/commands/send_reminders.py new file mode 100644 index 00000000..4f38d734 --- /dev/null +++ b/RIGS/management/commands/send_reminders.py @@ -0,0 +1,38 @@ +import premailer +import datetime + +from django.template.loader import get_template +from django.contrib.staticfiles import finders +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.mail import EmailMultiAlternatives +from django.utils import timezone +from django.urls import reverse + +from RIGS import models + + +class Command(BaseCommand): + help = 'Sends email reminders as required. Triggered daily through heroku-scheduler in production.' + + def handle(self, *args, **options): + events = models.Event.objects.current_events().select_related('riskassessment') + for event in events: + earliest_time = event.earliest_time if isinstance(event.earliest_time, datetime.datetime) else timezone.make_aware(datetime.datetime.combine(event.earliest_time, datetime.time(00, 00))) + # 48 hours = 172800 seconds + if event.is_rig and not event.cancelled and not event.dry_hire and (earliest_time - timezone.now()).total_seconds() <= 172800 and not hasattr(event, 'riskassessment'): + context = { + "event": event, + "url": "https://" + settings.DOMAIN + reverse('event_ra', kwargs={'pk': event.pk}) + } + target = event.mic.email if event.mic else f"productions@{settings.DOMAIN}" + msg = EmailMultiAlternatives( + f"{event} - Risk Assessment Incomplete", + get_template("email/ra_reminder.txt").render(context), + to=[target], + reply_to=[f"h.s.manager@{settings.DOMAIN}"], + ) + css = finders.find('css/email.css') + html = premailer.Premailer(get_template("email/ra_reminder.html").render(context), external_styles=css).transform() + msg.attach_alternative(html, 'text/html') + msg.send() diff --git a/RIGS/signals.py b/RIGS/signals.py index 1a9aee51..46793c71 100644 --- a/RIGS/signals.py +++ b/RIGS/signals.py @@ -58,13 +58,13 @@ def send_eventauthorisation_success_email(instance): client_email = EmailMultiAlternatives( subject, - get_template("eventauthorisation_client_success.txt").render(context), + get_template("email/eventauthorisation_client_success.txt").render(context), to=[instance.email], reply_to=[settings.AUTHORISATION_NOTIFICATION_ADDRESS], ) css = finders.find('css/email.css') - html = Premailer(get_template("eventauthorisation_client_success.html").render(context), + html = Premailer(get_template("email/eventauthorisation_client_success.html").render(context), external_styles=css).transform() client_email.attach_alternative(html, 'text/html') @@ -82,7 +82,7 @@ def send_eventauthorisation_success_email(instance): mic_email = EmailMessage( subject, - get_template("eventauthorisation_mic_success.txt").render(context), + get_template("email/eventauthorisation_mic_success.txt").render(context), to=[mic_email_address] ) @@ -117,12 +117,12 @@ def send_admin_awaiting_approval_email(user, request, **kwargs): email = EmailMultiAlternatives( f"{context['number_of_users']} new users awaiting approval on RIGS", - get_template("admin_awaiting_approval.txt").render(context), + get_template("email/admin_awaiting_approval.txt").render(context), to=[admin.email], reply_to=[user.email], ) css = finders.find('css/email.css') - html = Premailer(get_template("admin_awaiting_approval.html").render(context), + html = Premailer(get_template("email/admin_awaiting_approval.html").render(context), external_styles=css).transform() email.attach_alternative(html, 'text/html') email.send() diff --git a/RIGS/templates/admin_awaiting_approval.html b/RIGS/templates/email/admin_awaiting_approval.html similarity index 100% rename from RIGS/templates/admin_awaiting_approval.html rename to RIGS/templates/email/admin_awaiting_approval.html diff --git a/RIGS/templates/admin_awaiting_approval.txt b/RIGS/templates/email/admin_awaiting_approval.txt similarity index 100% rename from RIGS/templates/admin_awaiting_approval.txt rename to RIGS/templates/email/admin_awaiting_approval.txt diff --git a/RIGS/templates/eventauthorisation_client_request.html b/RIGS/templates/email/eventauthorisation_client_request.html similarity index 100% rename from RIGS/templates/eventauthorisation_client_request.html rename to RIGS/templates/email/eventauthorisation_client_request.html diff --git a/RIGS/templates/eventauthorisation_client_request.txt b/RIGS/templates/email/eventauthorisation_client_request.txt similarity index 100% rename from RIGS/templates/eventauthorisation_client_request.txt rename to RIGS/templates/email/eventauthorisation_client_request.txt diff --git a/RIGS/templates/eventauthorisation_client_success.html b/RIGS/templates/email/eventauthorisation_client_success.html similarity index 100% rename from RIGS/templates/eventauthorisation_client_success.html rename to RIGS/templates/email/eventauthorisation_client_success.html diff --git a/RIGS/templates/eventauthorisation_client_success.txt b/RIGS/templates/email/eventauthorisation_client_success.txt similarity index 100% rename from RIGS/templates/eventauthorisation_client_success.txt rename to RIGS/templates/email/eventauthorisation_client_success.txt diff --git a/RIGS/templates/email/eventauthorisation_mic_success.txt b/RIGS/templates/email/eventauthorisation_mic_success.txt new file mode 100644 index 00000000..b4309dd4 --- /dev/null +++ b/RIGS/templates/email/eventauthorisation_mic_success.txt @@ -0,0 +1,5 @@ +Hi {{object.event.mic.get_full_name|default_if_none:"somebody"}}, + +Just to let you know your event N{{object.eventdisplay_id}} has been successfully authorised for £{{object.amount}} by {{object.name}} as of {{object.event.last_edited_at}}. + +The TEC Rig Information Gathering System diff --git a/RIGS/templates/email/ra_reminder.html b/RIGS/templates/email/ra_reminder.html new file mode 100644 index 00000000..e32eae11 --- /dev/null +++ b/RIGS/templates/email/ra_reminder.html @@ -0,0 +1,16 @@ +{% extends 'base_client_email.html' %} + +{% block content %} +
Hi {{event.mic.get_full_name|default_if_none:"Productions Manager"}},
+ + {% if event.mic %} +Just to let you know your event {{event.display_id}} requires a pre-event risk assessment completing prior to the event. Please do so as soon as possible.
+ {% else %} +This is a reminder that event {{event.display_id}} requires a MIC assigning and a risk assessment completing.
+ {% endif %} + +Fill it out here:
+ Create Risk Assessment + +TEC PA & Lighting
+{% endblock %} diff --git a/RIGS/templates/email/ra_reminder.txt b/RIGS/templates/email/ra_reminder.txt new file mode 100644 index 00000000..9b66e761 --- /dev/null +++ b/RIGS/templates/email/ra_reminder.txt @@ -0,0 +1,9 @@ +Hi {{event.mic.get_full_name|default_if_none:"Productions Manager"}}, + +{% if event.mic %} +Just to let you know your event {{event.display_id}} requires a risk assessment completing prior to the event. Please do so as soon as possible. +{% else %} +This is a reminder that event {{event.display_id}} requires a MIC assigning and a risk assessment completing. +{% endif %} + +The TEC Rig Information Gathering System diff --git a/RIGS/templates/eventauthorisation_mic_success.txt b/RIGS/templates/eventauthorisation_mic_success.txt deleted file mode 100644 index 43ddd5e1..00000000 --- a/RIGS/templates/eventauthorisation_mic_success.txt +++ /dev/null @@ -1,5 +0,0 @@ -Hi {{object.event.mic.get_full_name|default_if_none:"somebody"}}, - -Just to let you know your event N{{object.event.pk|stringformat:"05d"}} has been successfully authorised for £{{object.amount}} by {{object.name}} as of {{object.event.last_edited_at}}. - -The TEC Rig Information Gathering System diff --git a/RIGS/urls.py b/RIGS/urls.py index 8dc5bb0d..8331161a 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -83,7 +83,7 @@ urlpatterns = [ path('event/