diff --git a/Pipfile b/Pipfile index 67082f2286..918535fe0d 100644 --- a/Pipfile +++ b/Pipfile @@ -83,6 +83,7 @@ django-log-formatter-asim = "~=0.0.5" dbt-copilot-python = "~=0.2.1" cryptography = "~=43.0.1" django-cacheops = "~=7.0.2" +ordered-set = "==4.1.0" [requires] python_version = "3.9" diff --git a/Pipfile.lock b/Pipfile.lock index 758a7c8afb..fd18878d44 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0007401dfada79e42bbdb34d04f99bae7d371dcbfd49c18a4aaf19d7c16ed5e0" + "sha256": "4750b43cbcc896cf4ca646f602ca3968f524082eda51ce3d4cb9c80e60b61fc3" }, "pipfile-spec": 6, "requires": { @@ -426,12 +426,12 @@ }, "django": { "hashes": [ - "sha256:1ddc333a16fc139fd253035a1606bb24261951bbc3a6ca256717fa06cc41a898", - "sha256:6f1616c2786c408ce86ab7e10f792b8f15742f7b7b7460243929cb371e7f1dad" + "sha256:3a93350214ba25f178d4045c0786c61573e7dbfa3c509b3551374f1e11ba8de0", + "sha256:6b56d834cc94c8b21a8f4e775064896be3b4a4ca387f2612d4406a5927cd2fdc" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==4.2.16" + "version": "==4.2.17" }, "django-allow-cidr": { "hashes": [ @@ -652,64 +652,64 @@ }, "grpcio": { "hashes": [ - "sha256:0d230852ba97654453d290e98d6aa61cb48fa5fafb474fb4c4298d8721809354", - "sha256:0efbbd849867e0e569af09e165363ade75cf84f5229b2698d53cf22c7a4f9e21", - "sha256:14331e5c27ed3545360464a139ed279aa09db088f6e9502e95ad4bfa852bb116", - "sha256:15327ab81131ef9b94cb9f45b5bd98803a179c7c61205c8c0ac9aff9d6c4e82a", - "sha256:15377bce516b1c861c35e18eaa1c280692bf563264836cece693c0f169b48829", - "sha256:15fa1fe25d365a13bc6d52fcac0e3ee1f9baebdde2c9b3b2425f8a4979fccea1", - "sha256:18668e36e7f4045820f069997834e94e8275910b1f03e078a6020bd464cb2363", - "sha256:2af76ab7c427aaa26aa9187c3e3c42f38d3771f91a20f99657d992afada2294a", - "sha256:2bddd04a790b69f7a7385f6a112f46ea0b34c4746f361ebafe9ca0be567c78e9", - "sha256:32a9cb4686eb2e89d97022ecb9e1606d132f85c444354c17a7dbde4a455e4a3b", - "sha256:3ac7f10850fd0487fcce169c3c55509101c3bde2a3b454869639df2176b60a03", - "sha256:3b2b559beb2d433129441783e5f42e3be40a9e1a89ec906efabf26591c5cd415", - "sha256:4028b8e9a3bff6f377698587d642e24bd221810c06579a18420a17688e421af7", - "sha256:44bcbebb24363d587472089b89e2ea0ab2e2b4df0e4856ba4c0b087c82412121", - "sha256:46a2d74d4dd8993151c6cd585594c082abe74112c8e4175ddda4106f2ceb022f", - "sha256:4df81d78fd1646bf94ced4fb4cd0a7fe2e91608089c522ef17bc7db26e64effd", - "sha256:4e300e6978df0b65cc2d100c54e097c10dfc7018b9bd890bbbf08022d47f766d", - "sha256:4f1931c7aa85be0fa6cea6af388e576f3bf6baee9e5d481c586980c774debcb4", - "sha256:50992f214264e207e07222703c17d9cfdcc2c46ed5a1ea86843d440148ebbe10", - "sha256:55d3b52fd41ec5772a953612db4e70ae741a6d6ed640c4c89a64f017a1ac02b5", - "sha256:5a180328e92b9a0050958ced34dddcb86fec5a8b332f5a229e353dafc16cd332", - "sha256:619b5d0f29f4f5351440e9343224c3e19912c21aeda44e0c49d0d147a8d01544", - "sha256:6b2f98165ea2790ea159393a2246b56f580d24d7da0d0342c18a085299c40a75", - "sha256:6f9c7ad1a23e1047f827385f4713b5b8c6c7d325705be1dd3e31fb00dcb2f665", - "sha256:79f81b7fbfb136247b70465bd836fa1733043fdee539cd6031cb499e9608a110", - "sha256:7e0a3e72c0e9a1acab77bef14a73a416630b7fd2cbd893c0a873edc47c42c8cd", - "sha256:7e7483d39b4a4fddb9906671e9ea21aaad4f031cdfc349fec76bdfa1e404543a", - "sha256:88fb2925789cfe6daa20900260ef0a1d0a61283dfb2d2fffe6194396a354c618", - "sha256:8af6137cc4ae8e421690d276e7627cfc726d4293f6607acf9ea7260bd8fc3d7d", - "sha256:8b0ff09c81e3aded7a183bc6473639b46b6caa9c1901d6f5e2cba24b95e59e30", - "sha256:8c73f9fbbaee1a132487e31585aa83987ddf626426d703ebcb9a528cf231c9b1", - "sha256:99f06232b5c9138593ae6f2e355054318717d32a9c09cdc5a2885540835067a1", - "sha256:9fe1b141cda52f2ca73e17d2d3c6a9f3f3a0c255c216b50ce616e9dca7e3441d", - "sha256:a17278d977746472698460c63abf333e1d806bd41f2224f90dbe9460101c9796", - "sha256:a59f5822f9459bed098ffbceb2713abbf7c6fd13f2b9243461da5c338d0cd6c3", - "sha256:a6213d2f7a22c3c30a479fb5e249b6b7e648e17f364598ff64d08a5136fe488b", - "sha256:a831dcc343440969aaa812004685ed322cdb526cd197112d0db303b0da1e8659", - "sha256:afbf45a62ba85a720491bfe9b2642f8761ff348006f5ef67e4622621f116b04a", - "sha256:b0cf343c6f4f6aa44863e13ec9ddfe299e0be68f87d68e777328bff785897b05", - "sha256:c03d89df516128febc5a7e760d675b478ba25802447624edf7aa13b1e7b11e2a", - "sha256:c1245651f3c9ea92a2db4f95d37b7597db6b246d5892bca6ee8c0e90d76fb73c", - "sha256:cc5f0a4f5904b8c25729a0498886b797feb817d1fd3812554ffa39551112c161", - "sha256:dba037ff8d284c8e7ea9a510c8ae0f5b016004f13c3648f72411c464b67ff2fb", - "sha256:def1a60a111d24376e4b753db39705adbe9483ef4ca4761f825639d884d5da78", - "sha256:e0d2f68eaa0a755edd9a47d40e50dba6df2bceda66960dee1218da81a2834d27", - "sha256:e0d30f3fee9372796f54d3100b31ee70972eaadcc87314be369360248a3dcffe", - "sha256:e18589e747c1e70b60fab6767ff99b2d0c359ea1db8a2cb524477f93cdbedf5b", - "sha256:e1e7ed311afb351ff0d0e583a66fcb39675be112d61e7cfd6c8269884a98afbc", - "sha256:e46541de8425a4d6829ac6c5d9b16c03c292105fe9ebf78cb1c31e8d242f9155", - "sha256:e694b5928b7b33ca2d3b4d5f9bf8b5888906f181daff6b406f4938f3a997a490", - "sha256:f60fa2adf281fd73ae3a50677572521edca34ba373a45b457b5ebe87c2d01e1d", - "sha256:f84890b205692ea813653ece4ac9afa2139eae136e419231b0eec7c39fdbe4c2", - "sha256:f8f695d9576ce836eab27ba7401c60acaf9ef6cf2f70dfe5462055ba3df02cc3", - "sha256:fc05759ffbd7875e0ff2bd877be1438dfe97c9312bbc558c8284a9afa1d0f40e", - "sha256:fd2c2d47969daa0e27eadaf15c13b5e92605c5e5953d23c06d0b5239a2f176d3" + "sha256:025f790c056815b3bf53da850dd70ebb849fd755a4b1ac822cb65cd631e37d43", + "sha256:04cfd68bf4f38f5bb959ee2361a7546916bd9a50f78617a346b3aeb2b42e2161", + "sha256:0feb02205a27caca128627bd1df4ee7212db051019a9afa76f4bb6a1a80ca95e", + "sha256:1098f03dedc3b9810810568060dea4ac0822b4062f537b0f53aa015269be0a76", + "sha256:12941d533f3cd45d46f202e3667be8ebf6bcb3573629c7ec12c3e211d99cfccf", + "sha256:255b1635b0ed81e9f91da4fcc8d43b7ea5520090b9a9ad9340d147066d1d3613", + "sha256:298ee7f80e26f9483f0b6f94cc0a046caf54400a11b644713bb5b3d8eb387600", + "sha256:2c4cec6177bf325eb6faa6bd834d2ff6aa8bb3b29012cceb4937b86f8b74323c", + "sha256:2cc1fd04af8399971bcd4f43bd98c22d01029ea2e56e69c34daf2bf8470e47f5", + "sha256:334ab917792904245a028f10e803fcd5b6f36a7b2173a820c0b5b076555825e1", + "sha256:3522c77d7e6606d6665ec8d50e867f13f946a4e00c7df46768f1c85089eae515", + "sha256:37ea3be171f3cf3e7b7e412a98b77685eba9d4fd67421f4a34686a63a65d99f9", + "sha256:390eee4225a661c5cd133c09f5da1ee3c84498dc265fd292a6912b65c421c78c", + "sha256:3aed6544e4d523cd6b3119b0916cef3d15ef2da51e088211e4d1eb91a6c7f4f1", + "sha256:3ceb56c4285754e33bb3c2fa777d055e96e6932351a3082ce3559be47f8024f0", + "sha256:44a8502dd5de653ae6a73e2de50a401d84184f0331d0ac3daeb044e66d5c5054", + "sha256:4b177f5547f1b995826ef529d2eef89cca2f830dd8b2c99ffd5fde4da734ba73", + "sha256:4efac5481c696d5cb124ff1c119a78bddbfdd13fc499e3bc0ca81e95fc573684", + "sha256:52fbf85aa71263380d330f4fce9f013c0798242e31ede05fcee7fbe40ccfc20d", + "sha256:55857c71641064f01ff0541a1776bfe04a59db5558e82897d35a7793e525774c", + "sha256:66a24f3d45c33550703f0abb8b656515b0ab777970fa275693a2f6dc8e35f1c1", + "sha256:6ab2d912ca39c51f46baf2a0d92aa265aa96b2443266fc50d234fa88bf877d8e", + "sha256:77d65165fc35cff6e954e7fd4229e05ec76102d4406d4576528d3a3635fc6172", + "sha256:7dfc914cc31c906297b30463dde0b9be48e36939575eaf2a0a22a8096e69afe5", + "sha256:7f20ebec257af55694d8f993e162ddf0d36bd82d4e57f74b31c67b3c6d63d8b2", + "sha256:80af6f1e69c5e68a2be529990684abdd31ed6622e988bf18850075c81bb1ad6e", + "sha256:83bbf5807dc3ee94ce1de2dfe8a356e1d74101e4b9d7aa8c720cc4818a34aded", + "sha256:8720c25cd9ac25dd04ee02b69256d0ce35bf8a0f29e20577427355272230965a", + "sha256:8829924fffb25386995a31998ccbbeaa7367223e647e0122043dfc485a87c666", + "sha256:8a3869a6661ec8f81d93f4597da50336718bde9eb13267a699ac7e0a1d6d0bea", + "sha256:8cb620037a2fd9eeee97b4531880e439ebfcd6d7d78f2e7dcc3726428ab5ef63", + "sha256:919d7f18f63bcad3a0f81146188e90274fde800a94e35d42ffe9eadf6a9a6330", + "sha256:95c87ce2a97434dffe7327a4071839ab8e8bffd0054cc74cbe971fba98aedd60", + "sha256:963cc8d7d79b12c56008aabd8b457f400952dbea8997dd185f155e2f228db079", + "sha256:96f473cdacfdd506008a5d7579c9f6a7ff245a9ade92c3c0265eb76cc591914f", + "sha256:9d1fae6bbf0816415b81db1e82fb3bf56f7857273c84dcbe68cbe046e58e1ccd", + "sha256:a0c8ddabef9c8f41617f213e527254c41e8b96ea9d387c632af878d05db9229c", + "sha256:a1b988b40f2fd9de5c820f3a701a43339d8dcf2cb2f1ca137e2c02671cc83ac1", + "sha256:a47faedc9ea2e7a3b6569795c040aae5895a19dde0c728a48d3c5d7995fda385", + "sha256:a8040f85dcb9830d8bbb033ae66d272614cec6faceee88d37a88a9bd1a7a704e", + "sha256:b33bd114fa5a83f03ec6b7b262ef9f5cac549d4126f1dc702078767b10c46ed9", + "sha256:c08079b4934b0bf0a8847f42c197b1d12cba6495a3d43febd7e99ecd1cdc8d54", + "sha256:c28848761a6520c5c6071d2904a18d339a796ebe6b800adc8b3f474c5ce3c3ad", + "sha256:cb400138e73969eb5e0535d1d06cae6a6f7a15f2cc74add320e2130b8179211a", + "sha256:cbb5780e2e740b6b4f2d208e90453591036ff80c02cc605fea1af8e6fc6b1bbe", + "sha256:ccf2ebd2de2d6661e2520dae293298a3803a98ebfc099275f113ce1f6c2a80f1", + "sha256:d35740e3f45f60f3c37b1e6f2f4702c23867b9ce21c6410254c9c682237da68d", + "sha256:d99abcd61760ebb34bdff37e5a3ba333c5cc09feda8c1ad42547bea0416ada78", + "sha256:ddda1aa22495d8acd9dfbafff2866438d12faec4d024ebc2e656784d96328ad0", + "sha256:dffd29a2961f3263a16d73945b57cd44a8fd0b235740cb14056f0612329b345e", + "sha256:e4842e4872ae4ae0f5497bf60a0498fa778c192cc7a9e87877abd2814aca9475", + "sha256:e8dbe3e00771bfe3d04feed8210fc6617006d06d9a2679b74605b9fed3e8362c", + "sha256:ee2e743e51cb964b4975de572aa8fb95b633f496f9fcb5e257893df3be854746", + "sha256:eeb38ff04ab6e5756a2aef6ad8d94e89bb4a51ef96e20f45c44ba190fa0bcaad", + "sha256:f8261fa2a5f679abeb2a0a93ad056d765cdca1c47745eda3f2d87f874ff4b8c9" ], "markers": "python_version >= '3.8'", - "version": "==1.68.0" + "version": "==1.68.1" }, "gunicorn": { "hashes": [ @@ -730,11 +730,11 @@ }, "identify": { "hashes": [ - "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3", - "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd" + "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02", + "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd" ], "markers": "python_version >= '3.9'", - "version": "==2.6.2" + "version": "==2.6.3" }, "idna": { "hashes": [ @@ -937,6 +937,15 @@ "markers": "python_version >= '3.7'", "version": "==0.43b0" }, + "ordered-set": { + "hashes": [ + "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", + "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==4.1.0" + }, "packaging": { "hashes": [ "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", @@ -1004,11 +1013,11 @@ }, "pyjwt": { "hashes": [ - "sha256:543b77207db656de204372350926bed5a86201c4cbff159f623f79c7bb487a15", - "sha256:7628a7eb7938959ac1b26e819a1df0fd3259505627b575e4bad6d08f76db695c" + "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", + "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb" ], "markers": "python_version >= '3.9'", - "version": "==2.10.0" + "version": "==2.10.1" }, "python-dateutil": { "hashes": [ @@ -1101,11 +1110,11 @@ }, "redis": { "hashes": [ - "sha256:0b1087665a771b1ff2e003aa5bdd354f15a70c9e25d5a7dbf9c722c16528a7b0", - "sha256:ae174f2bb3b1bf2b09d54bf3e51fbc1469cf6c10aa03e21141f51969801a7897" + "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f", + "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4" ], "markers": "python_version >= '3.8'", - "version": "==5.2.0" + "version": "==5.2.1" }, "regex": { "hashes": [ @@ -1253,11 +1262,11 @@ }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" + "version": "==1.17.0" }, "soupsieve": { "hashes": [ @@ -1269,11 +1278,11 @@ }, "sqlparse": { "hashes": [ - "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f", - "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e" + "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", + "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca" ], "markers": "python_version >= '3.8'", - "version": "==0.5.2" + "version": "==0.5.3" }, "typing-extensions": { "hashes": [ @@ -1317,11 +1326,11 @@ }, "virtualenv": { "hashes": [ - "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba", - "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4" + "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0", + "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa" ], "markers": "python_version >= '3.8'", - "version": "==20.27.1" + "version": "==20.28.0" }, "wcwidth": { "hashes": [ @@ -1348,79 +1357,74 @@ }, "wrapt": { "hashes": [ - "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", - "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", - "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", - "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", - "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", - "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", - "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", - "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", - "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", - "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", - "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", - "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", - "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", - "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", - "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", - "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", - "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", - "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", - "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", - "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", - "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", - "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", - "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", - "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", - "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", - "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", - "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", - "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", - "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", - "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", - "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", - "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", - "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", - "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", - "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", - "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", - "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", - "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", - "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", - "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", - "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", - "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", - "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", - "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", - "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", - "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", - "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", - "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", - "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", - "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", - "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", - "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", - "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", - "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", - "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", - "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", - "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", - "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", - "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", - "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", - "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", - "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", - "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", - "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", - "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", - "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", - "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", - "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", - "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", - "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" + "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", + "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", + "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", + "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", + "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", + "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", + "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", + "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", + "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", + "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", + "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", + "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", + "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f", + "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", + "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", + "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", + "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", + "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", + "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", + "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", + "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", + "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea", + "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", + "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13", + "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", + "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", + "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", + "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", + "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", + "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", + "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", + "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", + "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", + "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", + "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", + "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", + "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", + "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce", + "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", + "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", + "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f", + "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", + "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", + "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", + "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d", + "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627", + "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", + "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", + "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c", + "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", + "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", + "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", + "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", + "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", + "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", + "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", + "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", + "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", + "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", + "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", + "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", + "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", + "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed", + "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", + "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838" ], - "markers": "python_version >= '3.6'", - "version": "==1.16.0" + "markers": "python_version >= '3.8'", + "version": "==1.17.0" }, "zipp": { "hashes": [ @@ -1467,10 +1471,11 @@ }, "asttokens": { "hashes": [ - "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24", - "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0" + "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", + "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2" ], - "version": "==2.4.1" + "markers": "python_version >= '3.8'", + "version": "==3.0.0" }, "attrs": { "hashes": [ @@ -1876,71 +1881,71 @@ "toml" ], "hashes": [ - "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433", - "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529", - "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671", - "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e", - "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42", - "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99", - "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327", - "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8", - "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06", - "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874", - "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4", - "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354", - "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1", - "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab", - "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3", - "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b", - "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37", - "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd", - "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f", - "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b", - "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c", - "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b", - "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7", - "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3", - "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808", - "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a", - "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76", - "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469", - "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55", - "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289", - "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc", - "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13", - "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2", - "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30", - "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163", - "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d", - "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c", - "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1", - "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c", - "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2", - "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3", - "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314", - "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0", - "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384", - "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb", - "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c", - "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45", - "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a", - "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24", - "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8", - "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec", - "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56", - "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777", - "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b", - "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f", - "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a", - "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d", - "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9", - "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413", - "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c", - "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b", - "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c" + "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4", + "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c", + "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f", + "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b", + "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6", + "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae", + "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692", + "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4", + "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4", + "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717", + "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d", + "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198", + "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1", + "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3", + "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb", + "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d", + "sha256:4e12ae8cc979cf83d258acb5e1f1cf2f3f83524d1564a49d20b8bec14b637f08", + "sha256:592ac539812e9b46046620341498caf09ca21023c41c893e1eb9dbda00a70cbf", + "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b", + "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710", + "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c", + "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae", + "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077", + "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00", + "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb", + "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664", + "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014", + "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9", + "sha256:8e3c3e38930cfb729cb8137d7f055e5a473ddaf1217966aa6238c88bd9fd50e6", + "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e", + "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9", + "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa", + "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611", + "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b", + "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a", + "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8", + "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030", + "sha256:a27801adef24cc30871da98a105f77995e13a25a505a0161911f6aafbd66e678", + "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015", + "sha256:adb697c0bd35100dc690de83154627fbab1f4f3c0386df266dded865fc50a902", + "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97", + "sha256:b9389a429e0e5142e69d5bf4a435dd688c14478a19bb901735cdf75e57b13845", + "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419", + "sha256:bb5555cff66c4d3d6213a296b360f9e1a8e323e74e0426b6c10ed7f4d021e464", + "sha256:be57b6d56e49c2739cdf776839a92330e933dd5e5d929966fbbd380c77f060be", + "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9", + "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7", + "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be", + "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1", + "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba", + "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5", + "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073", + "sha256:e28bf44afa2b187cc9f41749138a64435bf340adfcacb5b2290c070ce99839d4", + "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a", + "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a", + "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3", + "sha256:f1592791f8204ae9166de22ba7e6705fa4ebd02936c09436a1bb85aabca3e599", + "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0", + "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b", + "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec", + "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1", + "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3" ], "markers": "python_version >= '3.9'", - "version": "==7.6.7" + "version": "==7.6.9" }, "cryptography": { "hashes": [ @@ -1981,7 +1986,7 @@ "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" ], - "markers": "python_version >= '3.5'", + "markers": "python_version < '3.11' and python_version >= '3.7'", "version": "==5.1.1" }, "dill": { @@ -1994,12 +1999,12 @@ }, "django": { "hashes": [ - "sha256:1ddc333a16fc139fd253035a1606bb24261951bbc3a6ca256717fa06cc41a898", - "sha256:6f1616c2786c408ce86ab7e10f792b8f15742f7b7b7460243929cb371e7f1dad" + "sha256:3a93350214ba25f178d4045c0786c61573e7dbfa3c509b3551374f1e11ba8de0", + "sha256:6b56d834cc94c8b21a8f4e775064896be3b4a4ca387f2612d4406a5927cd2fdc" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==4.2.16" + "version": "==4.2.17" }, "django-debug-toolbar": { "hashes": [ @@ -2254,11 +2259,11 @@ }, "mako": { "hashes": [ - "sha256:9ec3a1583713479fae654f83ed9fa8c9a4c16b7bb0daba0e6bbebff50c0d983d", - "sha256:a91198468092a2f1a0de86ca92690fb0cfc43ca90ee17e15d93662b4c04b241a" + "sha256:42f48953c7eb91332040ff567eb7eea69b22e7a4affbc5ba8e845e8f730f6627", + "sha256:577b97e414580d3e088d47c2dbbe9594aa7a5146ed2875d4dfa9075af2dd3cc8" ], "markers": "python_version >= '3.8'", - "version": "==1.3.6" + "version": "==1.3.8" }, "markupsafe": { "hashes": [ @@ -2591,11 +2596,11 @@ }, "pyopenssl": { "hashes": [ - "sha256:4247f0dbe3748d560dcbb2ff3ea01af0f9a1a001ef5f7c4c647956ed8cbf0e95", - "sha256:967d5719b12b243588573f39b0c677637145c7a1ffedcd495a487e58177fbb8d" + "sha256:49f7a019577d834746bc55c5fce6ecbcec0f2b4ec5ce1cf43a9a173b8138bb36", + "sha256:e474f5a473cd7f92221cc04976e48f4d11502804657a08a989fb3be5514c904a" ], "markers": "python_version >= '3.7'", - "version": "==24.2.1" + "version": "==24.3.0" }, "pyparsing": { "hashes": [ @@ -2898,11 +2903,11 @@ }, "six": { "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", + "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.16.0" + "version": "==1.17.0" }, "smmap": { "hashes": [ @@ -2936,11 +2941,11 @@ }, "sqlparse": { "hashes": [ - "sha256:9e37b35e16d1cc652a2545f0997c1deb23ea28fa1f3eefe609eee3063c3b105f", - "sha256:e99bc85c78160918c3e1d9230834ab8d80fc06c59d03f8db2618f65f65dda55e" + "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272", + "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca" ], "markers": "python_version >= '3.8'", - "version": "==0.5.2" + "version": "==0.5.3" }, "stack-data": { "hashes": [ @@ -2966,11 +2971,41 @@ }, "tomli": { "hashes": [ - "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8", - "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391" + "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", + "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", + "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", + "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", + "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", + "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", + "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", + "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", + "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", + "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", + "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", + "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", + "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", + "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", + "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", + "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", + "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", + "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", + "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", + "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", + "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", + "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", + "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", + "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", + "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", + "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", + "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", + "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", + "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", + "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", + "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", + "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7" ], - "markers": "python_version < '3.11' and python_version >= '3.7'", - "version": "==2.1.0" + "markers": "python_version < '3.11'", + "version": "==2.2.1" }, "tomlkit": { "hashes": [ @@ -3046,79 +3081,74 @@ }, "wrapt": { "hashes": [ - "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", - "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", - "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", - "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", - "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", - "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", - "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", - "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", - "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", - "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", - "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", - "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", - "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", - "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", - "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", - "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", - "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", - "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", - "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", - "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", - "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", - "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", - "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", - "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", - "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", - "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", - "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", - "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", - "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", - "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", - "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", - "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", - "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", - "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", - "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", - "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", - "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", - "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", - "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", - "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", - "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", - "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", - "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", - "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", - "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", - "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", - "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", - "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", - "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", - "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", - "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", - "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", - "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", - "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", - "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", - "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", - "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", - "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", - "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", - "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", - "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", - "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", - "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", - "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", - "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", - "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", - "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", - "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", - "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", - "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" + "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", + "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", + "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", + "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", + "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", + "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", + "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", + "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", + "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", + "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", + "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", + "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", + "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f", + "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", + "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", + "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", + "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", + "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", + "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", + "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", + "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", + "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea", + "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", + "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13", + "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", + "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", + "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", + "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", + "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", + "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", + "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", + "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", + "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", + "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", + "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", + "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", + "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", + "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce", + "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", + "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", + "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f", + "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", + "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", + "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", + "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d", + "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627", + "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", + "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", + "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c", + "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", + "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", + "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", + "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", + "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", + "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", + "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", + "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", + "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", + "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", + "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", + "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", + "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", + "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed", + "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", + "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838" ], - "markers": "python_version >= '3.6'", - "version": "==1.16.0" + "markers": "python_version >= '3.8'", + "version": "==1.17.0" }, "wsproto": { "hashes": [ diff --git a/caseworker/advice/forms/consolidate.py b/caseworker/advice/forms/consolidate.py index da594ced98..fd85a27d8c 100644 --- a/caseworker/advice/forms/consolidate.py +++ b/caseworker/advice/forms/consolidate.py @@ -2,12 +2,13 @@ from django.utils.html import format_html from caseworker.advice.forms.approval import SelectAdviceForm -from caseworker.advice.forms.forms import GiveApprovalAdviceForm +from caseworker.advice.forms.forms import PicklistAdviceForm from crispy_forms_gds.helper import FormHelper from crispy_forms_gds.layout import Layout, Submit from core.forms.layouts import ( RadioTextArea, + CannedSnippetsTextArea, ) @@ -30,16 +31,46 @@ def __init__(self, team_name, *args, **kwargs): self.fields["recommendation"].label = f"{recommendation_label}?" -class ConsolidateApprovalForm(GiveApprovalAdviceForm): - """Approval form minus some fields.""" +class ConsolidateApprovalForm(PicklistAdviceForm): - def __init__(self, team_alias, *args, **kwargs): - super().__init__(*args, **kwargs) + approval_reasons = forms.CharField( + widget=forms.Textarea(attrs={"rows": 7, "class": "govuk-!-margin-top-4"}), + label="", + error_messages={"required": "Enter a reason for approving"}, + ) + approval_radios = forms.ChoiceField( + label="What is your reason for approving?", + required=False, + widget=forms.RadioSelect, + choices=(), + ) + proviso = forms.CharField( + widget=forms.Textarea(attrs={"rows": 7, "class": "govuk-!-margin-top-4"}), + label="", + required=False, + ) + proviso_snippets = forms.ChoiceField( + label="Add a licence condition (optional)", + required=False, + widget=forms.CheckboxSelectMultiple, + choices=(), + ) + + def __init__(self, approval_reason, proviso, **kwargs): + super().__init__(**kwargs) + + approval_choices, approval_text = self._picklist_to_choices(approval_reason, include_other=False) + self.approval_text = approval_text + self.fields["approval_radios"].choices = approval_choices + + proviso_choices, proviso_text = self._picklist_to_choices(proviso, include_other=False) + self.proviso_text = proviso_text + self.fields["proviso_snippets"].choices = proviso_choices self.helper = FormHelper() self.helper.layout = Layout( RadioTextArea("approval_radios", "approval_reasons", self.approval_text), - RadioTextArea("proviso_radios", "proviso", self.proviso_text), + CannedSnippetsTextArea("proviso_snippets", "proviso", self.proviso_text, add_label="Add licence condition"), Submit("submit", "Submit recommendation"), ) diff --git a/caseworker/advice/forms/forms.py b/caseworker/advice/forms/forms.py index bf5b274d66..b4c0474327 100644 --- a/caseworker/advice/forms/forms.py +++ b/caseworker/advice/forms/forms.py @@ -29,7 +29,7 @@ def get_approval_advice_form_factory(advice, approval_reason, proviso, footnote_ class PicklistAdviceForm(forms.Form): - def _picklist_to_choices(self, picklist_data): + def _picklist_to_choices(self, picklist_data, include_other=True): reasons_choices = [] reasons_text = {"other": ""} @@ -40,7 +40,8 @@ def _picklist_to_choices(self, picklist_data): choice = Choice(key, result.get("name"), divider="or") reasons_choices.append(choice) reasons_text[key] = result.get("text") - reasons_choices.append(Choice("other", "Other")) + if include_other: + reasons_choices.append(Choice("other", "Other")) return reasons_choices, reasons_text diff --git a/caseworker/advice/templates/advice/review_consolidate.html b/caseworker/advice/templates/advice/review_consolidate.html index 23488eaf68..c131746a0a 100644 --- a/caseworker/advice/templates/advice/review_consolidate.html +++ b/caseworker/advice/templates/advice/review_consolidate.html @@ -33,7 +33,7 @@

{{ subtitle|default:"Review and combine" }}

{% include "advice/advice_details.html" with team=True %}
{% endfor %} -
+
{% crispy form %}
diff --git a/caseworker/advice/views/consolidate.py b/caseworker/advice/views/consolidate.py index b8dbf40b66..99ef9925b5 100644 --- a/caseworker/advice/views/consolidate.py +++ b/caseworker/advice/views/consolidate.py @@ -1,6 +1,7 @@ from django.views.generic import FormView from django.shortcuts import redirect from django.urls import reverse +from ordered_set import OrderedSet from requests.exceptions import HTTPError @@ -23,13 +24,18 @@ class BaseConsolidationView(LoginRequiredMixin, CaseContextMixin, FormView): def get_title(self): return f"Review and combine case recommendation - {self.case.reference_code} - {self.case.organisation['name']}" - def get_context(self, **kwargs): - context = super().get_context() - team_alias = ( + def setup(self, *args, **kwargs): + super().setup(*args, **kwargs) + self.team_alias = ( self.caseworker["team"]["alias"] if self.caseworker["team"]["alias"] else self.caseworker["team"]["id"] ) - advice_to_consolidate = services.get_advice_to_consolidate(self.case.advice, team_alias) - context["advice_to_consolidate"] = list(advice_to_consolidate.values()) + self.advice_to_consolidate = list( + services.get_advice_to_consolidate(self.case.advice, self.team_alias).values() + ) + + def get_context(self, **kwargs): + context = super().get_context() + context["advice_to_consolidate"] = self.advice_to_consolidate context["denial_reasons_display"] = self.denial_reasons_display context["security_approvals_classified_display"] = self.security_approvals_classified_display context["title"] = self.get_title() @@ -46,7 +52,6 @@ class ConsolidateSelectDecisionView(BaseConsolidationView): form_class = ConsolidateSelectAdviceForm def dispatch(self, request, *args, **kwargs): - self.team_alias = self.caseworker["team"].get("alias", None) approve_advice_types = ("approve", "proviso", "no_licence_required") is_all_advice_approval = all(a["type"]["key"] in approve_advice_types for a in self.case.advice) if is_all_advice_approval: @@ -87,9 +92,16 @@ class ConsolidateApproveView(BaseConsolidationView): template_name = "advice/review_consolidate.html" form_class = ConsolidateApprovalForm - def setup(self, *args, **kwargs): - super().setup(*args, **kwargs) - self.team_alias = self.caseworker["team"].get("alias", None) + def collate_all_provisos(self): + """ + Collate all provisos across all team advice in to a single string. + """ + unique_provisos = OrderedSet() + for team_advice in self.advice_to_consolidate: + for advice in team_advice: + if advice["proviso"]: + unique_provisos.add(advice["proviso"]) + return "\n\n--------\n".join(unique_provisos) def get_form_kwargs(self): form_kwargs = super().get_form_kwargs() @@ -99,10 +111,7 @@ def get_form_kwargs(self): form_kwargs["proviso"] = get_picklists_list( self.request, type="proviso", disable_pagination=True, show_deactivated=False ) - form_kwargs["footnote_details"] = get_picklists_list( - self.request, type="footnotes", disable_pagination=True, show_deactivated=False - ) - form_kwargs["team_alias"] = self.team_alias + form_kwargs["initial"]["proviso"] = self.collate_all_provisos() return form_kwargs def form_valid(self, form): diff --git a/caseworker/advice/views/tests/test_consolidate_advice.py b/caseworker/advice/views/tests/test_consolidate_advice.py index ecfb2d29cb..f0bc4924f9 100644 --- a/caseworker/advice/views/tests/test_consolidate_advice.py +++ b/caseworker/advice/views/tests/test_consolidate_advice.py @@ -1,5 +1,6 @@ import pytest +from bs4 import BeautifulSoup from django.urls import reverse from core import client @@ -61,7 +62,7 @@ def consolidate_view_url(data_queue, data_standard_case): @pytest.fixture -def advice_data(current_user, admin_team): +def advice_data(current_user): return { "consignee": "cd2263b4-a427-4f14-8552-505e1d192bb8", # /PS-IGNORE "country": None, @@ -79,7 +80,7 @@ def advice_data(current_user, admin_team): "type": {"key": "approve", "value": "Approve"}, "ultimate_end_user": None, "user": current_user, - "team": admin_team, + "team": {"id": "some-team", "alias": "FCO"}, } @@ -344,6 +345,68 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_GET( ) +def test_ConsolidateApproveView_GET_collated_provisos( + authorized_client, + consolidate_approve_url, + mixed_advice, + advice_data, + data_standard_case, + lu_gov_user, +): + """ + Ensure that proviso is pre-filled from collecting provisos across all valid advice. + """ + mixed_advice[0]["proviso"] = "condition 1" + mixed_advice[1]["proviso"] = "condition 2" + extra_advice = { + **advice_data, + "team": {"id": "mod-ecju-team", "alias": "MOD_ECJU"}, + "good": "6daad1c3-cf97-4aad-b711-d5c9a9f4586e", + "type": {"key": "approve", "value": "Approve"}, + "proviso": "", + } + mixed_advice.append(extra_advice) + data_standard_case["case"]["advice"] = mixed_advice + + response = authorized_client.get(consolidate_approve_url, follow=False) + assert response.status_code == 200 + assert response.context["form"].initial == {"proviso": "condition 1\n\n--------\ncondition 2"} + + +def test_ConsolidateApproveView_GET_canned_snippets( + authorized_client, + consolidate_approve_url, + mixed_advice, + advice_data, + data_standard_case, + lu_gov_user, +): + """ + Ensure that the canned snippets proviso component renders as expected. + """ + mixed_advice[0]["proviso"] = "condition 1" + mixed_advice[1]["proviso"] = "condition 2" + extra_advice = { + **advice_data, + "team": {"id": "mod-ecju-team", "alias": "MOD_ECJU"}, + "good": "6daad1c3-cf97-4aad-b711-d5c9a9f4586e", + "type": {"key": "approve", "value": "Approve"}, + "proviso": "", + } + mixed_advice.append(extra_advice) + data_standard_case["case"]["advice"] = mixed_advice + + response = authorized_client.get(consolidate_approve_url, follow=False) + assert response.status_code == 200 + soup = BeautifulSoup(response.content, "html.parser") + assert "firearm serial numbers" in soup.find("div", {"id": "div_id_proviso_snippets"}).text + assert soup.find("button", attrs={"data-snippet-key": "firearm_serial_numbers"}).text == "Add licence condition" + assert ( + soup.find("script", {"id": "proviso"}).text + == '{"other": "", "firearm_serial_numbers": "Firearm serial numbers text"}' + ) + + def test_ConsolidateApproveView_POST_bad_input( authorized_client, consolidate_approve_url, @@ -446,8 +509,6 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): { "approval_reasons": "yep, go for it", "proviso": "just consider this", - "instructions_to_exporter": "and this", - "footnote": "some footnote", }, [ { @@ -455,7 +516,7 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): "end_user": "95d3ea36-6ab9-41ea-a744-7284d17b9cc5", "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -465,7 +526,7 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): "denial_reasons": [], "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -474,7 +535,7 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): "denial_reasons": [], "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -484,7 +545,7 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): "denial_reasons": [], "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "third_party": "95c2d6b7-5cfd-47e8-b3c8-dc76e1ac9747", @@ -495,7 +556,7 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): "footnote": "", "footnote_required": False, "good": "0bedd1c3-cf97-4aad-b711-d5c9a9f4586e", - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -514,7 +575,7 @@ def mock_post_approval_team_advice(requests_mock, data_standard_case): ), ), ) -def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( +def test_ConsolidateApproveView_lu_gov_user_POST_success( approval_data, expected_post_data, authorized_client, @@ -532,7 +593,7 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( assert response.status_code == 302 assert response.url == consolidate_view_url assert len(mock_post_approval_final_advice.request_history) == 1 - assert mock_post_approval_team_advice.request_history[0].json() == expected_post_data + assert mock_post_approval_final_advice.request_history[0].json() == expected_post_data @pytest.mark.parametrize( @@ -607,8 +668,6 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( { "approval_reasons": "yep, go for it", "proviso": "just consider this", - "instructions_to_exporter": "and this", - "footnote": "some footnote", }, [ { @@ -616,7 +675,7 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( "end_user": "95d3ea36-6ab9-41ea-a744-7284d17b9cc5", "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -626,7 +685,7 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( "denial_reasons": [], "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -635,7 +694,7 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( "denial_reasons": [], "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", @@ -645,7 +704,7 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( "denial_reasons": [], "footnote": "", "footnote_required": False, - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "third_party": "95c2d6b7-5cfd-47e8-b3c8-dc76e1ac9747", @@ -656,7 +715,7 @@ def test_ConsolidateApproveView_mod_ecju_gov_user_POST_success( "footnote": "", "footnote_required": False, "good": "0bedd1c3-cf97-4aad-b711-d5c9a9f4586e", - "note": "and this", + "note": "", "proviso": "just consider this", "text": "yep, go for it", "type": "proviso", diff --git a/caseworker/advice/views/views.py b/caseworker/advice/views/views.py index 1709e1e5d4..67a258e737 100644 --- a/caseworker/advice/views/views.py +++ b/caseworker/advice/views/views.py @@ -511,12 +511,8 @@ def get_form(self): form_kwargs["proviso"] = get_picklists_list( self.request, type="proviso", disable_pagination=True, show_deactivated=False ) - form_kwargs["footnote_details"] = get_picklists_list( - self.request, type="footnotes", disable_pagination=True, show_deactivated=False - ) - team_alias = self.caseworker["team"].get("alias", None) - return ConsolidateApprovalForm(team_alias=team_alias, **form_kwargs) + return ConsolidateApprovalForm(**form_kwargs) def get_context(self, **kwargs): context = super().get_context() diff --git a/caseworker/assets/javascripts/main.js b/caseworker/assets/javascripts/main.js index 05f70f97a0..9844015b90 100644 --- a/caseworker/assets/javascripts/main.js +++ b/caseworker/assets/javascripts/main.js @@ -2,10 +2,11 @@ import { initAll } from "govuk-frontend"; // our JS -import "../../../core/assets/javascripts/definitions.js"; -import "../../../core/assets/javascripts/back-link.js"; -import initCookierBanner from "../../../core/assets/javascripts/cookies/banner.js"; -import { gaPushUserID } from "../../../core/assets/javascripts/ga-events.js"; +import "core/definitions.js"; +import "core/back-link.js"; +import { initCannedSnippetsTextArea } from "core/canned-snippets-textarea.js"; +import initCookierBanner from "core/cookies/banner.js"; +import { gaPushUserID } from "core/ga-events.js"; // core // TODO: can't rewrite these as ES6 imports yet as they are used by other templates @@ -47,6 +48,7 @@ initCustomisers(); initRadioTextArea(); initSelectAllTables(); initTableExpanders(); +initCannedSnippetsTextArea(); // Push GA user_id gaPushUserID(); diff --git a/caseworker/templates/components/goods-licence-list.html b/caseworker/templates/components/goods-licence-list.html index 03a00ebba1..fc4db9248c 100644 --- a/caseworker/templates/components/goods-licence-list.html +++ b/caseworker/templates/components/goods-licence-list.html @@ -42,7 +42,7 @@

{{ good.advice.text }}

{% if good.advice.proviso %}

{% lcs 'advice.FinaliseLicenceForm.GoodsTable.PROVISO_TEXT' %}

- {{ good.advice.proviso }} + {{ good.advice.proviso|linebreaks }} {% endif %} diff --git a/caseworker/templates/includes/recommendations.html b/caseworker/templates/includes/recommendations.html index 42bf938c47..9daec95568 100644 --- a/caseworker/templates/includes/recommendations.html +++ b/caseworker/templates/includes/recommendations.html @@ -7,7 +7,7 @@ {% if advice.type.key == 'approve' %} Approved {% elif advice.type.key == 'proviso' %} - Approved with license conditions + Approved with licence conditions {% elif advice.type.key == 'refuse' %} Refused under {{ advice.denial_reasons|get_display_values:'display_value' }} diff --git a/core/assets/javascripts/__tests__/canned-snippets-textarea.test.js b/core/assets/javascripts/__tests__/canned-snippets-textarea.test.js new file mode 100644 index 0000000000..434b64f59d --- /dev/null +++ b/core/assets/javascripts/__tests__/canned-snippets-textarea.test.js @@ -0,0 +1,56 @@ +import "@testing-library/jest-dom"; +import userEvent from "@testing-library/user-event"; + +import CannedSnippetsTextArea from "../canned-snippets-textarea"; + +const createComponent = ($div) => { + return new CannedSnippetsTextArea($div); +}; + +describe("Canned snippets textarea", () => { + test("Clicking snippet appends text", async () => { + document.body.innerHTML = ` +
+ +

+ Snippet 1 + +

+

+ Snippet 2 + +

+ +
+ `; + + const $textarea = document.querySelector("textarea"); + const $div = document.querySelector("div"); + const component = createComponent($div); + + component.init(); + const addSnippet1 = document.querySelector( + "button[data-snippet-key=snippet_1]", + ); + const addSnippet2 = document.querySelector( + "button[data-snippet-key=snippet_2]", + ); + await userEvent.click(addSnippet1); + expect($textarea).toHaveDisplayValue( + `snippet 1 text + +-------- +Some starting text`, + ); + await userEvent.click(addSnippet2); + expect($textarea).toHaveDisplayValue( + `snippet 2 text + +-------- +snippet 1 text + +-------- +Some starting text`, + ); + }); +}); diff --git a/core/assets/javascripts/canned-snippets-textarea.js b/core/assets/javascripts/canned-snippets-textarea.js new file mode 100644 index 0000000000..174c509313 --- /dev/null +++ b/core/assets/javascripts/canned-snippets-textarea.js @@ -0,0 +1,30 @@ +class CannedSnippetsTextArea { + constructor($el) { + this.$addButtons = $el.querySelectorAll("button[data-snippet-key]"); + this.$textArea = $el.querySelector("textarea"); + this.$lookup = JSON.parse($el.querySelector("script").textContent); + } + + init() { + this.$addButtons.forEach((input) => { + input.addEventListener("click", (event) => { + event.preventDefault(); + const text = this.$lookup[input.getAttribute("data-snippet-key")]; + if (this.$textArea.value == "") { + this.$textArea.value = text; + } else { + this.$textArea.value = text + "\n\n--------\n" + this.$textArea.value; + } + }); + }); + } +} + +const initCannedSnippetsTextArea = () => { + document + .querySelectorAll("[data-module=canned-snippets-textarea]") + .forEach(($el) => new CannedSnippetsTextArea($el).init()); +}; + +export default CannedSnippetsTextArea; +export { initCannedSnippetsTextArea }; diff --git a/core/assets/styles/components/form/_all.scss b/core/assets/styles/components/form/_all.scss index d9dbeec959..1c562bd899 100644 --- a/core/assets/styles/components/form/_all.scss +++ b/core/assets/styles/components/form/_all.scss @@ -5,3 +5,4 @@ @import "email"; @import "file-upload"; @import "optional"; +@import "canned-snippets"; diff --git a/core/assets/styles/components/form/_canned-snippets.scss b/core/assets/styles/components/form/_canned-snippets.scss new file mode 100644 index 0000000000..be157b5960 --- /dev/null +++ b/core/assets/styles/components/form/_canned-snippets.scss @@ -0,0 +1,12 @@ +div.canned-snippets__snippet { + display: flex; + align-items: center; + + span { + flex: 0 0 50%; + } + button { + display: flex; + margin: 0; + } +} diff --git a/core/forms/layouts.py b/core/forms/layouts.py index ee717f692e..6d77aa8ac5 100644 --- a/core/forms/layouts.py +++ b/core/forms/layouts.py @@ -187,6 +187,32 @@ def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwarg return render_to_string(template, context.flatten()) +class CannedSnippetsTextArea(TemplateNameMixin): + template = "%s/layout/canned_snippets_textarea.html" + + def __init__(self, snippets_field, field, json_choices, add_label="Add"): + self.field = field + self.snippets_field = snippets_field + self.json_choices = json_choices + self.add_label = add_label + + def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwargs): + template = self.get_template_name(template_pack) + + bound_field = form[self.field] + snippets_field = form[self.snippets_field] + context.update( + { + "field": bound_field, + "snippets_field": snippets_field, + "json_choices": self.json_choices, + "add_label": self.add_label, + } + ) + + return render_to_string(template, context.flatten()) + + class StarRadioSelect(TemplateNameMixin): template = "%s/layout/star_radio_select.html" diff --git a/core/forms/templates/gds/layout/canned_snippets.html b/core/forms/templates/gds/layout/canned_snippets.html new file mode 100644 index 0000000000..43d132080f --- /dev/null +++ b/core/forms/templates/gds/layout/canned_snippets.html @@ -0,0 +1,23 @@ +{% load l10n crispy_forms_gds %} +
+ + {% if field.label %} + + {% if legend_tag %}<{{ legend_tag }} class="govuk-fieldset__heading">{% endif %} + {{ field.label|safe }} + {% if legend_tag %}{% endif %} + + {% endif %} + + {% include 'gds/layout/help_text_and_errors.html' %} + +
+ {% for choice in field.field.choices %} +
+ {{ choice.1|unlocalize }} + +
+ {% endfor %} +
+ +
diff --git a/core/forms/templates/gds/layout/canned_snippets_textarea.html b/core/forms/templates/gds/layout/canned_snippets_textarea.html new file mode 100644 index 0000000000..7d199ec113 --- /dev/null +++ b/core/forms/templates/gds/layout/canned_snippets_textarea.html @@ -0,0 +1,10 @@ +{% load l10n crispy_forms_gds %} +
+
+ {% include 'gds/layout/canned_snippets.html' with field=snippets_field add_label=add_label %} +
+
+ {% include 'gds/layout/multifield.html' with field=field %} +
+ {{ json_choices | json_script:field.html_name }} +
diff --git a/unit_tests/caseworker/advice/views/test_consolidate.py b/unit_tests/caseworker/advice/views/test_consolidate.py index 804e7448c4..bb9c2f798d 100644 --- a/unit_tests/caseworker/advice/views/test_consolidate.py +++ b/unit_tests/caseworker/advice/views/test_consolidate.py @@ -376,70 +376,6 @@ def test_consolidate_review_refusal_advice_recommendation_label( assert form.fields["recommendation"].label == recommendation_label -def test_consolidate_review_refuse(requests_mock, authorized_client, data_standard_case, url, advice): - data_standard_case["case"]["advice"] = advice - data = {"denial_reasons": ["1"], "refusal_reasons": "test", "countries": ["GB"]} - response = authorized_client.post(url + "refuse/", data=data) - assert response.status_code == 302 - request = requests_mock.request_history.pop() - assert request.method == "POST" - assert "team-advice" in request.url - assert request.json() == [ - { - "denial_reasons": ["1"], - "end_user": "95d3ea36-6ab9-41ea-a744-7284d17b9cc5", - "footnote_required": False, - "text": "test", - "type": "refuse", - "is_refusal_note": False, - }, - { - "consignee": "cd2263b4-a427-4f14-8552-505e1d192bb8", - "denial_reasons": ["1"], - "footnote_required": False, - "text": "test", - "type": "refuse", - "is_refusal_note": False, - }, - { - "denial_reasons": ["1"], - "footnote_required": False, - "text": "test", - "ultimate_end_user": "9f077b3c-6116-4111-b9a0-b2491198aa72", - "type": "refuse", - "is_refusal_note": False, - }, - { - "denial_reasons": ["1"], - "footnote_required": False, - "text": "test", - "third_party": "95c2d6b7-5cfd-47e8-b3c8-dc76e1ac9747", - "type": "refuse", - "is_refusal_note": False, - }, - { - "denial_reasons": [], - "footnote": "", - "footnote_required": False, - "good": "0bedd1c3-cf97-4aad-b711-d5c9a9f4586e", - "note": "", - "proviso": "", - "text": "", - "type": "no_licence_required", - }, - { - "denial_reasons": [], - "footnote": "", - "footnote_required": False, - "good": "6daad1c3-cf97-4aad-b711-d5c9a9f4586e", - "note": "", - "proviso": "", - "text": "", - "type": "no_licence_required", - }, - ] - - def test_view_consolidate_approve_outcome( authorized_client, data_standard_case,