diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..c3920a8b5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,16 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 3 +updates: + - package-ecosystem: "pip" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" + - package-ecosystem: 'npm' + directory: '/' + schedule: + interval: 'daily' + diff --git a/Pipfile b/Pipfile index df3f96b69..d9e2549f2 100644 --- a/Pipfile +++ b/Pipfile @@ -26,7 +26,7 @@ pyexcel-ods3 = "==0.6.1" pyexcel-xls = "==0.7.0" pyexcel-xlsx = "==0.6.0" openpyxl = "==3.0.10" -pyproj = "==3.3.1" +pyproj = "==3.6.0" python-dotenv = "==0.20.0" pytz = "==2022.1" rtreelib = "==0.2.0" @@ -38,18 +38,18 @@ notifications-utils = {editable = true, ref = "main", git = "https://github.com/ coverage = "*" [dev-packages] -isort = "==5.10.1" +isort = "==5.12.0" pytest = "==7.1.2" pytest-env = "==0.6.2" -pytest-mock = "==3.7.0" +pytest-mock = "==3.11.1" pytest-xdist = "==2.5.0" -beautifulsoup4 = "==4.11.1" +beautifulsoup4 = "==4.12.2" freezegun = "==1.2.1" flake8 = "==4.0.1" flake8-bugbear = "==22.4.25" flake8-print = "==5.0.0" moto = "==3.1.7" -requests-mock = "==1.10.0" +requests-mock = "==1.11.0" # used for creating manifest file locally jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} pip-audit = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 2a64f2f82..fbd1c75ab 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "59c6c377e8503bdfeb0c4b27fbc67107f14582213c191d6b3e5dec8d91be5784" + "sha256": "034b38241face3c8641c7aece5bdc4f2b6688d7163ba4e3d863b7e950606e73a" }, "pipfile-spec": 6, "requires": { @@ -50,19 +50,19 @@ }, "boto3": { "hashes": [ - "sha256:3d7f1b43d2e5a10ee29d4940e714d72a2f6f1a6f6ba856c82ba9328d83062605", - "sha256:a03e42dfa09c785cd223422d59c06e8babf667983b513a9a172b73c106f3b37e" + "sha256:9e7242b9059d937f34264125fecd844cb5e01acce6be093f6c44869fdf7c6e30", + "sha256:fa85b67147c8dc99b6e7c699fc086103f958f9677db934f70659e6e6a72a818c" ], "markers": "python_version >= '3.7'", - "version": "==1.26.146" + "version": "==1.26.165" }, "botocore": { "hashes": [ - "sha256:77f7793cb36074eb84d606a23ad6e1d57c20f7a2eeab7d9136d3e63c584e0504", - "sha256:ac57003292f18206ee942eafc381ecd9a3420a3844d6b7e1c1b0f4b88b28263b" + "sha256:6f35d59e230095aed7cd747604fe248fa384bebb7d09549077892f936a8ca3df", + "sha256:988b948be685006b43c4bbd8f5c0cb93e77c66deb70561994e0c5b31b5a67210" ], "markers": "python_version >= '3.7'", - "version": "==1.29.146" + "version": "==1.29.165" }, "cachetools": { "hashes": [ @@ -305,28 +305,28 @@ }, "cryptography": { "hashes": [ - "sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55", - "sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895", - "sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be", - "sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928", - "sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d", - "sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8", - "sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237", - "sha256:5c1f7293c31ebc72163a9a0df246f890d65f66b4a40d9ec80081969ba8c78cc9", - "sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78", - "sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d", - "sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0", - "sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46", - "sha256:88ff107f211ea696455ea8d911389f6d2b276aabf3231bf72c8853d22db755c5", - "sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4", - "sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d", - "sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75", - "sha256:b846d59a8d5a9ba87e2c3d757ca019fa576793e8758174d3868aecb88d6fc8eb", - "sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2", - "sha256:f5d0bf9b252f30a31664b6f64432b4730bb7038339bd18b1fafe129cfc2be9be" + "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", + "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", + "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", + "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", + "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", + "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", + "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", + "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", + "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", + "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", + "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", + "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", + "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", + "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", + "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", + "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", + "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", + "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", + "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" ], - "index": "pypi", - "version": "==41.0.0" + "markers": "python_version >= '3.7'", + "version": "==41.0.1" }, "dnspython": { "hashes": [ @@ -529,11 +529,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", - "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" + "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4", + "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5" ], "markers": "python_version < '3.10'", - "version": "==6.6.0" + "version": "==6.7.0" }, "itsdangerous": { "hashes": [ @@ -651,59 +651,59 @@ }, "markupsafe": { "hashes": [ - "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", - "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", - "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", - "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", - "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", - "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", - "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", - "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", - "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", - "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", - "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", - "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", - "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", - "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", - "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", - "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", - "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", - "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", - "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", - "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", - "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", - "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", - "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", - "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", - "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", - "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", - "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", - "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", - "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", - "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", - "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", - "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", - "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", - "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", - "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", - "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", - "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", - "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", - "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", - "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", - "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", - "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", - "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", - "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", - "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", - "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", - "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", - "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", - "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", - "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" ], "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "version": "==2.1.3" }, "mistune": { "hashes": [ @@ -747,37 +747,34 @@ }, "numpy": { "hashes": [ - "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", - "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812", - "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7", - "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4", - "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6", - "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0", - "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4", - "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570", - "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4", - "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f", - "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80", - "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289", - "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385", - "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078", - "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c", - "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463", - "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3", - "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950", - "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155", - "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7", - "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c", - "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096", - "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17", - "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf", - "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4", - "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02", - "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c", - "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b" + "sha256:0ac6edfb35d2a99aaf102b509c8e9319c499ebd4978df4971b94419a116d0790", + "sha256:26815c6c8498dc49d81faa76d61078c4f9f0859ce7817919021b9eba72b425e3", + "sha256:4aedd08f15d3045a4e9c648f1e04daca2ab1044256959f1f95aafeeb3d794c16", + "sha256:4c69fe5f05eea336b7a740e114dec995e2f927003c30702d896892403df6dbf0", + "sha256:5177310ac2e63d6603f659fadc1e7bab33dd5a8db4e0596df34214eeab0fee3b", + "sha256:5aa48bebfb41f93043a796128854b84407d4df730d3fb6e5dc36402f5cd594c0", + "sha256:5b1b90860bf7d8a8c313b372d4f27343a54f415b20fb69dd601b7efe1029c91e", + "sha256:6c284907e37f5e04d2412950960894b143a648dea3f79290757eb878b91acbd1", + "sha256:6d183b5c58513f74225c376643234c369468e02947b47942eacbb23c1671f25d", + "sha256:7412125b4f18aeddca2ecd7219ea2d2708f697943e6f624be41aa5f8a9852cc4", + "sha256:7cd981ccc0afe49b9883f14761bb57c964df71124dcd155b0cba2b591f0d64b9", + "sha256:85cdae87d8c136fd4da4dad1e48064d700f63e923d5af6c8c782ac0df8044542", + "sha256:8aa130c3042052d656751df5e81f6d61edff3e289b5994edcf77f54118a8d9f4", + "sha256:95367ccd88c07af21b379be1725b5322362bb83679d36691f124a16357390153", + "sha256:9c7211d7920b97aeca7b3773a6783492b5b93baba39e7c36054f6e749fc7490c", + "sha256:9e3f2b96e3b63c978bc29daaa3700c028fe3f049ea3031b58aa33fe2a5809d24", + "sha256:b76aa836a952059d70a2788a2d98cb2a533ccd46222558b6970348939e55fc24", + "sha256:b792164e539d99d93e4e5e09ae10f8cbe5466de7d759fc155e075237e0c274e4", + "sha256:c0dc071017bc00abb7d7201bac06fa80333c6314477b3d10b52b58fa6a6e38f6", + "sha256:cc3fda2b36482891db1060f00f881c77f9423eead4c3579629940a3e12095fe8", + "sha256:d6b267f349a99d3908b56645eebf340cb58f01bd1e773b4eea1a905b3f0e4208", + "sha256:d76a84998c51b8b68b40448ddd02bd1081bb33abcdc28beee6cd284fe11036c6", + "sha256:e559c6afbca484072a98a51b6fa466aae785cfe89b69e8b856c3191bc8872a82", + "sha256:ecc68f11404930e9c7ecfc937aa423e1e50158317bf67ca91736a9864eae0232", + "sha256:f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19" ], - "markers": "python_version >= '3.8'", - "version": "==1.24.3" + "markers": "python_version >= '3.9'", + "version": "==1.25.0" }, "openpyxl": { "hashes": [ @@ -795,10 +792,10 @@ }, "phonenumbers": { "hashes": [ - "sha256:4bdf8c989aff0cdb105aef170ad2c21f14b4537bcb32cf349f1f710df992a40a", - "sha256:55657adb607484aba6d56270b8a1f9b302f35496076e6c02051d06ed366374d9" + "sha256:634b277dc53933962961697211746f2fb7bf945a6725a853a1556cdb4a7531e4", + "sha256:adf80fc0027ce8eac990f5e1d3fa00022b481133d65fa40c1c40ae9020fc5a66" ], - "version": "==8.13.13" + "version": "==8.13.15" }, "prometheus-client": { "hashes": [ @@ -880,34 +877,34 @@ }, "pyproj": { "hashes": [ - "sha256:07c9d8d7ec009bbac09e233cfc725601586fe06880e5538a3a44eaf560ba3a62", - "sha256:120d45ed73144c65e9677dc73ba8a531c495d179dd9f9f0471ac5acc02d7ac4b", - "sha256:140fa649fedd04f680a39f8ad339799a55cb1c49f6a84e1b32b97e49646647aa", - "sha256:1adc9ccd1bf04998493b6a2e87e60656c75ab790653b36cfe351e9ef214828ed", - "sha256:1ef1bfbe2dcc558c7a98e2f1836abdcd630390f3160724a6f4f5c818b2be0ad5", - "sha256:2fef9c1e339f25c57f6ae0558b5ab1bbdf7994529a30d8d7504fc6302ea51c03", - "sha256:3cc4771403db54494e1e55bca8e6d33cde322f8cf0ed39f1557ff109c66d2cd1", - "sha256:42eea10afc750fccd1c5c4ba56de29ab791ab4d83c1f7db72705566282ac5396", - "sha256:45487942c19c5a8b09c91964ea3201f4e094518e34743cae373889a36e3d9260", - "sha256:473961faef7a9fd723c5d432f65220ea6ab3854e606bf84b4d409a75a4261c78", - "sha256:52efb681647dfac185cc655a709bc0caaf910031a0390f816f5fc8ce150cbedc", - "sha256:531ea36519fa7b581466d4b6ab32f66ae4dadd9499d726352f71ee5e19c3d1c5", - "sha256:56b0f9ee2c5b2520b18db30a393a7b86130cf527ddbb8c96e7f3c837474a9d79", - "sha256:5ab0d6e38fda7c13726afacaf62e9f9dd858089d67910471758afd9cb24e0ecd", - "sha256:5ca5f32b56210429b367ca4f9a57ffe67975c487af82e179a24370879a3daf68", - "sha256:5dac03d4338a4c8bd0f69144c527474f517b4cbd7d2d8c532cd8937799723248", - "sha256:5f92d8f6514516124abb714dce912b20867831162cfff9fae2678ef07b6fcf0f", - "sha256:67025e37598a6bbed2c9c6c9e4c911f6dd39315d3e1148ead935a5c4d64309d5", - "sha256:797ad5655d484feac14b0fbb4a4efeaac0cf780a223046e2465494c767fd1c3b", - "sha256:aba199704c824fb84ab64927e7bc9ef71e603e483130ec0f7e09e97259b8f61f", - "sha256:aed1a3c0cd4182425f91b48d5db39f459bc2fe0d88017ead6425a1bc85faee33", - "sha256:b3d8e14d91cc95fb3dbc03a9d0588ac58326803eefa5bbb0978d109de3304fbe", - "sha256:b59c08aea13ee428cf8a919212d55c036cc94784805ed77c8f31a4d1f541058c", - "sha256:c99f7b5757a28040a2dd4a28c9805fdf13eef79a796f4a566ab5cb362d10630d", - "sha256:f1032e5dfb50eae06382bcc7b9011b994f7104d932fe91bd83a722275e30e8ce" + "sha256:00fab048596c17572fa8980014ef117dbb2a445e6f7ba3b9ddfcc683efc598e7", + "sha256:08dfc5c9533c78a97afae9d53b99b810a4a8f97c3be9eb2b8f323b726c736403", + "sha256:1283d3c1960edbb74828f5f3405b27578a9a27f7766ab6a3956f4bd851f08239", + "sha256:137a07404f937f264b11b7130cd4cfa00002dbe4333b222e8056db84849c2ea4", + "sha256:18a8bdb87aeb41b60a2e91d32f623227de3569fb83b4c64b174c3a7c5b0ed3ae", + "sha256:23787460fab85ba2f857ee60ffb2e8e21fd9bd5db9833c51c1c05b2a6d9f0be5", + "sha256:2799499a4045e4fb73e44c31bdacab0593a253a7a4b6baae6fdd27d604cf9bc2", + "sha256:3a4d2d438b007cb1f8d5f6f308d53d7ff9a2508cff8f9da6e2a93b76ffd98aaf", + "sha256:4d8a9773503085eada59b6892c96ddf686ab8cf64cfdc18ad744d13ee76dfa6f", + "sha256:557e6592855111c84eda176ddf6b130f55d5e2b9cb1c017b8c91b69f37f474f5", + "sha256:595376e4d3bb72b7dceeccbce0f4c43053d47561f17a1ad0224407e9980ee849", + "sha256:78276c6b0c831255c97c56dff7313a3571f327a284d8ac63d6a56437a72ed0e0", + "sha256:830e6de7cfe43853967afee5ef908dfd5aa72d1ec12af9b9e3fecc179886e346", + "sha256:8fbac2eb9a0e425d7d6b7c6f4ebacd675cf3bdef0c59887057b8b4b0374e7c12", + "sha256:95120d65cbc5983dfd877076f28dbc18b9b329cbee38ca6e217bb7a5a043c099", + "sha256:9de1aab71234bfd3fd648a1152519b5ee152c43113d7d8ea52590a0140129501", + "sha256:a5b111865b3f0f8b77b3983f2fbe4dd6248fc09d3730295949977c8dcd988062", + "sha256:ba5e7c8ddd6ed5a3f9fcf95ea80ba44c931913723de2ece841c94bb38b200c4a", + "sha256:d7f6cd045df29aae960391dfe06a575c110af598f1dea5add8be6ca42332b0f5", + "sha256:de6288b6ceabdeeac01abf627c74414822d322d8f55dc8efe4d29dedd27c5719", + "sha256:dfe392dfc0eba2248dc08c976a72f52ff9da2bddfddfd9ff5dcf18e8e88200c7", + "sha256:e342b3010b2b20134671564ff9a8c476e5e512bf589477480aded1a5813af7c8", + "sha256:e427ccdbb1763872416549bdfa9fa1f5f169054653c4daf674e71480cc39cf11", + "sha256:e600f6a2771d3b41aeb2cc1efd96771ae9a01451013da1dd48ff272e7c6e34ef", + "sha256:f04f6297c615c3b17f835df2556ac8fb9b4f51f281e960437eaf0cd80e7ae26a" ], "index": "pypi", - "version": "==3.3.1" + "version": "==3.6.0" }, "python-dateutil": { "hashes": [ @@ -989,11 +986,11 @@ }, "redis": { "hashes": [ - "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119", - "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880" + "sha256:585dc516b9eb042a619ef0a39c3d7d55fe81bdb4df09a52c9cdde0d07bf1aa7d", + "sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c" ], "markers": "python_version >= '3.7'", - "version": "==4.5.5" + "version": "==4.6.0" }, "requests": { "hashes": [ @@ -1021,11 +1018,11 @@ }, "setuptools": { "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" + "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", + "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235" ], "markers": "python_version >= '3.7'", - "version": "==67.8.0" + "version": "==68.0.0" }, "shapely": { "hashes": [ @@ -1094,11 +1091,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:5d8c9dac95c27d20df12fb1d97b9793ab8b2af8a3a525e68c80e21060c161771", + "sha256:935ccf31549830cda708b42289d44b6f74084d616a00be651601a4f968e77c82" ], "markers": "python_version < '3.10'", - "version": "==4.6.3" + "version": "==4.7.0" }, "urllib3": { "hashes": [ @@ -1117,11 +1114,11 @@ }, "werkzeug": { "hashes": [ - "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", - "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" + "sha256:935539fa1413afbb9195b24880778422ed620c0fc09670945185cce4d91a8890", + "sha256:98c774df2f91b05550078891dee5f0eb0cb797a522c757a2452b9cee5b202330" ], "index": "pypi", - "version": "==2.3.4" + "version": "==2.3.6" }, "wtforms": { "hashes": [ @@ -1174,38 +1171,38 @@ }, "beautifulsoup4": { "hashes": [ - "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30", - "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693" + "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da", + "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a" ], "index": "pypi", - "version": "==4.11.1" + "version": "==4.12.2" }, "boto3": { "hashes": [ - "sha256:3d7f1b43d2e5a10ee29d4940e714d72a2f6f1a6f6ba856c82ba9328d83062605", - "sha256:a03e42dfa09c785cd223422d59c06e8babf667983b513a9a172b73c106f3b37e" + "sha256:9e7242b9059d937f34264125fecd844cb5e01acce6be093f6c44869fdf7c6e30", + "sha256:fa85b67147c8dc99b6e7c699fc086103f958f9677db934f70659e6e6a72a818c" ], "markers": "python_version >= '3.7'", - "version": "==1.26.146" + "version": "==1.26.165" }, "botocore": { "hashes": [ - "sha256:77f7793cb36074eb84d606a23ad6e1d57c20f7a2eeab7d9136d3e63c584e0504", - "sha256:ac57003292f18206ee942eafc381ecd9a3420a3844d6b7e1c1b0f4b88b28263b" + "sha256:6f35d59e230095aed7cd747604fe248fa384bebb7d09549077892f936a8ca3df", + "sha256:988b948be685006b43c4bbd8f5c0cb93e77c66deb70561994e0c5b31b5a67210" ], "markers": "python_version >= '3.7'", - "version": "==1.29.146" + "version": "==1.29.165" }, "cachecontrol": { "extras": [ "filecache" ], "hashes": [ - "sha256:4544a012a25cf0a73c53cd986f68b4f9c9f6b1df01d741c2923c3d56c66c7bda", - "sha256:fd3fd2cb0ca66b9a6c1d56cc9709e7e49c63dbd19b1b1bcbd8d3f94cedfe8ce5" + "sha256:95dedbec849f46dda3137866dc28b9d133fc9af55f5b805ab1291833e4457aa4", + "sha256:f012366b79d2243a6118309ce73151bf52a38d4a5dac8ea57f09bd29087e506b" ], - "markers": "python_version >= '3.6'", - "version": "==0.13.0" + "markers": "python_version >= '3.7'", + "version": "==0.13.1" }, "certifi": { "hashes": [ @@ -1367,35 +1364,35 @@ }, "cryptography": { "hashes": [ - "sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55", - "sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895", - "sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be", - "sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928", - "sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d", - "sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8", - "sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237", - "sha256:5c1f7293c31ebc72163a9a0df246f890d65f66b4a40d9ec80081969ba8c78cc9", - "sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78", - "sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d", - "sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0", - "sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46", - "sha256:88ff107f211ea696455ea8d911389f6d2b276aabf3231bf72c8853d22db755c5", - "sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4", - "sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d", - "sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75", - "sha256:b846d59a8d5a9ba87e2c3d757ca019fa576793e8758174d3868aecb88d6fc8eb", - "sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2", - "sha256:f5d0bf9b252f30a31664b6f64432b4730bb7038339bd18b1fafe129cfc2be9be" + "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", + "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", + "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", + "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", + "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", + "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", + "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", + "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", + "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", + "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", + "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", + "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", + "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", + "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", + "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", + "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", + "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", + "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", + "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" ], - "index": "pypi", - "version": "==41.0.0" + "markers": "python_version >= '3.7'", + "version": "==41.0.1" }, "cyclonedx-python-lib": { "hashes": [ "sha256:493bf2f30e26c48f305f745ed8580ce10d05a8d68d62a598fe95f05a0d9007dc", "sha256:fabc4c8baf722faeea01c3bbca83730e3489dfb37d85c6036baa67a9a7519d40" ], - "markers": "python_version >= '3.6' and python_version < '4.0'", + "markers": "python_version < '4.0' and python_full_version >= '3.6.0'", "version": "==2.7.1" }, "execnet": { @@ -1408,10 +1405,10 @@ }, "filelock": { "hashes": [ - "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9", - "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718" + "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81", + "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec" ], - "version": "==3.12.0" + "version": "==3.12.2" }, "flake8": { "hashes": [ @@ -1487,11 +1484,11 @@ }, "isort": { "hashes": [ - "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", - "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951" + "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504", + "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6" ], "index": "pypi", - "version": "==5.10.1" + "version": "==5.12.0" }, "jinja2": { "hashes": [ @@ -1522,67 +1519,67 @@ }, "markdown-it-py": { "hashes": [ - "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30", - "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1" + "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", + "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb" ], - "markers": "python_version >= '3.7'", - "version": "==2.2.0" + "markers": "python_version >= '3.8'", + "version": "==3.0.0" }, "markupsafe": { "hashes": [ - "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", - "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", - "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", - "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", - "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", - "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", - "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", - "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", - "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", - "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", - "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", - "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", - "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", - "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", - "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", - "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", - "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", - "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", - "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", - "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", - "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", - "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", - "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", - "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", - "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", - "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", - "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", - "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", - "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", - "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", - "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", - "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", - "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", - "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", - "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", - "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", - "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", - "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", - "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", - "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", - "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", - "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", - "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", - "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", - "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", - "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", - "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", - "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", - "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", - "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" + "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", + "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", + "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", + "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", + "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", + "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", + "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", + "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", + "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", + "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", + "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", + "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", + "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", + "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", + "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", + "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", + "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", + "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", + "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", + "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", + "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", + "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", + "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", + "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", + "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", + "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", + "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", + "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", + "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", + "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", + "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", + "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", + "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", + "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", + "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", + "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", + "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", + "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", + "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", + "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", + "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", + "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", + "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", + "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", + "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", + "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", + "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", + "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", + "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", + "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2" ], "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "version": "==2.1.3" }, "mccabe": { "hashes": [ @@ -1728,16 +1725,16 @@ "sha256:4659bc2a667783e7a15d190f6fccf8b2486685b6dba4c19c3876314769c57526", "sha256:b4fa3a7a0be38243123cf9d1f3518da10c51bdb165a2b2985566247f9155a7d3" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==32.0.1" }, "pluggy": { "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", + "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3" ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "markers": "python_version >= '3.7'", + "version": "==1.2.0" }, "py": { "hashes": [ @@ -1780,11 +1777,11 @@ }, "pyparsing": { "hashes": [ - "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", - "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" + "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1", + "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea" ], "markers": "python_full_version >= '3.6.8'", - "version": "==3.0.9" + "version": "==3.1.0" }, "pytest": { "hashes": [ @@ -1811,11 +1808,11 @@ }, "pytest-mock": { "hashes": [ - "sha256:5112bd92cc9f186ee96e1a92efc84969ea494939c3aead39c50f421c4cc69534", - "sha256:6cff27cec936bf81dc5ee87f07132b807bcda51106b5ec4b90a04331cba76231" + "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39", + "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f" ], "index": "pypi", - "version": "==3.7.0" + "version": "==3.11.1" }, "pytest-xdist": { "hashes": [ @@ -1897,11 +1894,11 @@ }, "requests-mock": { "hashes": [ - "sha256:2fdbb637ad17ee15c06f33d31169e71bf9fe2bdb7bc9da26185be0dd8d842699", - "sha256:59c9c32419a9fb1ae83ec242d98e889c45bd7d7a65d48375cc243ec08441658b" + "sha256:ef10b572b489a5f28e09b708697208c4a3b2b89ef80a9f01584340ea357ec3c4", + "sha256:f7fae383f228633f6bececebdab236c478ace2284d6292c6e7e2867b9ab74d15" ], "index": "pypi", - "version": "==1.10.0" + "version": "==1.11.0" }, "responses": { "hashes": [ @@ -1913,11 +1910,11 @@ }, "rich": { "hashes": [ - "sha256:76f6b65ea7e5c5d924ba80e322231d7cb5b5981aa60bfc1e694f1bc097fe6fe1", - "sha256:d204aadb50b936bf6b1a695385429d192bc1fdaf3e8b907e8e26f4c4e4b5bf75" + "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec", + "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898" ], "markers": "python_version >= '3.7'", - "version": "==13.4.1" + "version": "==13.4.2" }, "s3transfer": { "hashes": [ @@ -1929,11 +1926,11 @@ }, "setuptools": { "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" + "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", + "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235" ], "markers": "python_version >= '3.7'", - "version": "==67.8.0" + "version": "==68.0.0" }, "six": { "hashes": [ @@ -1948,7 +1945,7 @@ "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94", "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936" ], - "markers": "python_version >= '3.6'", + "markers": "python_full_version >= '3.6.0'", "version": "==5.0.0" }, "sortedcontainers": { @@ -2014,11 +2011,11 @@ }, "werkzeug": { "hashes": [ - "sha256:1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76", - "sha256:48e5e61472fee0ddee27ebad085614ebedb7af41e88f687aaf881afb723a162f" + "sha256:935539fa1413afbb9195b24880778422ed620c0fc09670945185cce4d91a8890", + "sha256:98c774df2f91b05550078891dee5f0eb0cb797a522c757a2452b9cee5b202330" ], "index": "pypi", - "version": "==2.3.4" + "version": "==2.3.6" }, "xmltodict": { "hashes": [ diff --git a/app/assets/js/gtm_head.js b/app/assets/js/gtm_head.js index e6f73d28d..4c562a2e9 100644 --- a/app/assets/js/gtm_head.js +++ b/app/assets/js/gtm_head.js @@ -1,5 +1,5 @@ - \ No newline at end of file +})(window,document,'script','dataLayer','GTM-WX5NGWF'); \ No newline at end of file diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss index f5bbbeb15..ec5d97b0f 100644 --- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss +++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss @@ -156,17 +156,42 @@ td.table-empty-message { box-shadow: none; } +.template-list-item-without-ancestors a.template-list-folder:first-of-type { + background-image: url(../images/folder-blue-bold.svg); + background-size: 30px 30px; +} + .folder-heading a.folder-heading-folder, -.folder-heading-folder, .template-list-folder { - background-image: none; - padding-left: 0; - text-indent: 0; + background-image: url(../images/folder-blue-bold.svg); &:hover { color: color("blue-warm-70v"); + background-image: url(../images/folder-blue-bold.svg); } } -.template-list-item-without-ancestors a.template-list-folder:first-of-type { - text-indent: 0; +.folder-heading-folder { + background-image: url(../images/folder-black.svg); +} + +.folder-heading a.folder-heading-folder-truncated { + background-position: 0; +} + +.usa-template-list-template { + background: url(../img/material-icons/description.svg) no-repeat; + padding-left: 40px; + background-size: 30px 30px; +} + +.js-enabled .live-search { + display: flex; + margin-bottom: units(2); + .usa-form-group { + @include u-width("mobile-lg"); + } + input#search { + width: 100%; + border: 1px solid color("gray-60"); + } } diff --git a/app/main/forms.py b/app/main/forms.py index 4b69224ff..17954f614 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -1234,15 +1234,7 @@ class BaseTemplateForm(StripWhitespaceForm): NoCommasInPlaceHolders() ] ) - process_type = GovukRadiosField( - "Use priority queue?", - choices=[ - ('priority', 'Yes'), - ('normal', 'No'), - ], - thing='yes or no', - default='normal' - ) + process_type = HiddenField('normal') class SMSTemplateForm(BaseTemplateForm): diff --git a/app/main/views/index.py b/app/main/views/index.py index 7c418d179..dea9852ef 100644 --- a/app/main/views/index.py +++ b/app/main/views/index.py @@ -18,7 +18,7 @@ from app.main.views.sub_navigation_dictionaries import ( features_nav, using_notify_nav, ) -from app.utils import hide_from_search_engines +from app.utils.user import user_is_logged_in @main.route('/') @@ -42,11 +42,13 @@ def error(status_code): @main.route('/privacy') +@user_is_logged_in def privacy(): return render_template('views/privacy.html') @main.route('/accessibility-statement') +@user_is_logged_in def accessibility_statement(): return render_template('views/accessibility_statement.html') @@ -58,11 +60,13 @@ def delivery_and_failure(): @main.route('/design-patterns-content-guidance') +@user_is_logged_in def design_content(): return redirect('https://www.gov.uk/service-manual/design/sending-emails-and-text-messages', 301) @main.route('/_email') +@user_is_logged_in def email_template(): branding_type = 'govuk' branding_style = request.args.get('branding_style', None) @@ -152,6 +156,7 @@ def email_template(): @main.route('/documentation') +@user_is_logged_in def documentation(): return render_template( 'views/documentation.html', @@ -172,6 +177,7 @@ def callbacks(): # --- Features page set --- # @main.route('/features') +@user_is_logged_in def features(): return render_template( 'views/features.html', @@ -180,6 +186,7 @@ def features(): @main.route('/features/roadmap', endpoint='roadmap') +@user_is_logged_in def roadmap(): return render_template( 'views/roadmap.html', @@ -188,7 +195,7 @@ def roadmap(): @main.route('/features/email') -@hide_from_search_engines +@user_is_logged_in def features_email(): return render_template( 'views/features/emails.html', @@ -197,6 +204,7 @@ def features_email(): @main.route('/features/sms') +@user_is_logged_in def features_sms(): return render_template( 'views/features/text-messages.html', @@ -205,6 +213,7 @@ def features_sms(): @main.route('/features/security', endpoint='security') +@user_is_logged_in def security(): return render_template( 'views/security.html', @@ -213,6 +222,7 @@ def security(): @main.route('/features/terms', endpoint='terms') +@user_is_logged_in def terms(): return render_template( 'views/terms-of-use.html', @@ -221,6 +231,7 @@ def terms(): @main.route('/features/using-notify') +@user_is_logged_in def using_notify(): return render_template( 'views/using-notify.html', @@ -229,6 +240,7 @@ def using_notify(): @main.route('/using-notify/delivery-status') +@user_is_logged_in def message_status(): return render_template( 'views/message-status.html', @@ -237,11 +249,13 @@ def message_status(): @main.route('/features/get-started') +@user_is_logged_in def get_started_old(): return redirect(url_for('.get_started'), 301) @main.route('/using-notify/get-started') +@user_is_logged_in def get_started(): return render_template( 'views/get-started.html', @@ -269,6 +283,7 @@ def trial_mode_new(): @main.route('/using-notify/guidance') +@user_is_logged_in def guidance_index(): return render_template( 'views/guidance/index.html', @@ -277,6 +292,7 @@ def guidance_index(): @main.route('/using-notify/guidance/branding-and-customisation') +@user_is_logged_in def branding_and_customisation(): return render_template( 'views/guidance/branding-and-customisation.html', @@ -285,6 +301,7 @@ def branding_and_customisation(): @main.route('/using-notify/guidance/create-and-send-messages') +@user_is_logged_in def create_and_send_messages(): return render_template( 'views/guidance/create-and-send-messages.html', @@ -293,6 +310,7 @@ def create_and_send_messages(): @main.route('/using-notify/guidance/edit-and-format-messages') +@user_is_logged_in def edit_and_format_messages(): return render_template( 'views/guidance/edit-and-format-messages.html', @@ -301,6 +319,7 @@ def edit_and_format_messages(): @main.route('/using-notify/guidance/send-files-by-email') +@user_is_logged_in def send_files_by_email(): return render_template( 'views/guidance/send-files-by-email.html', diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index 533ca3797..fae1ac186 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -275,7 +275,7 @@ def get_status_filters(service, message_type, statistics): filters = [ # key, label, option ('requested', 'total', 'sending,delivered,failed'), - ('sending', 'sending', 'sending'), + ('sending', 'pending', 'pending'), ('delivered', 'delivered', 'delivered'), ('failed', 'failed', 'failed'), ] @@ -320,10 +320,10 @@ def _get_job_counts(job): ], [ Markup( - f'''sending + f'''pending {message_count_noun(job.notifications_sending, job_type)}''' ), - 'sending', + 'pending', job.notifications_sending ], [ diff --git a/app/main/views/pricing.py b/app/main/views/pricing.py index 18a3d426a..bdbc0a454 100644 --- a/app/main/views/pricing.py +++ b/app/main/views/pricing.py @@ -7,11 +7,13 @@ from notifications_utils.international_billing_rates import ( from app.main import main from app.main.forms import SearchByNameForm from app.main.views.sub_navigation_dictionaries import using_notify_nav +from app.utils.user import user_is_logged_in CURRENT_SMS_RATE = '1.72' @main.route('/using-notify/pricing') +@user_is_logged_in def pricing(): return render_template( 'views/pricing/index.html', @@ -26,6 +28,7 @@ def pricing(): @main.route('/pricing/how-to-pay') +@user_is_logged_in def how_to_pay(): return render_template( 'views/pricing/how-to-pay.html', @@ -34,6 +37,7 @@ def how_to_pay(): @main.route('/pricing/billing-details') +@user_is_logged_in def billing_details(): if current_user.is_authenticated: return render_template( diff --git a/app/main/views/templates.py b/app/main/views/templates.py index fb84df3e2..84958807c 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -451,7 +451,6 @@ def add_service_template(service_id, template_type, template_folder_id=None): form.template_content.data, service_id, form.subject.data if hasattr(form, 'subject') else None, - form.process_type.data, template_folder_id ) except HTTPError as e: @@ -525,8 +524,7 @@ def edit_service_template(service_id, template_id): template['template_type'], form.template_content.data, service_id, - subject, - form.process_type.data, + subject ) except HTTPError as e: if e.status_code == 400: diff --git a/app/notify_client/service_api_client.py b/app/notify_client/service_api_client.py index 8c55d5157..0fdcc8b85 100644 --- a/app/notify_client/service_api_client.py +++ b/app/notify_client/service_api_client.py @@ -163,7 +163,7 @@ class ServiceAPIClient(NotifyAdminAPIClient): return self.delete(endpoint, data) @cache.delete('service-{service_id}-templates') - def create_service_template(self, name, type_, content, service_id, subject=None, process_type='normal', + def create_service_template(self, name, type_, content, service_id, subject=None, parent_folder_id=None): """ Create a service template. @@ -173,7 +173,7 @@ class ServiceAPIClient(NotifyAdminAPIClient): "template_type": type_, "content": content, "service": service_id, - "process_type": process_type, + "process_type": 'normal', } if subject: data.update({ @@ -190,7 +190,7 @@ class ServiceAPIClient(NotifyAdminAPIClient): @cache.delete('service-{service_id}-templates') @cache.delete_by_pattern('service-{service_id}-template-*') def update_service_template( - self, id_, name, type_, content, service_id, subject=None, process_type=None + self, id_, name, type_, content, service_id, subject=None ): """ Update a service template. @@ -206,10 +206,9 @@ class ServiceAPIClient(NotifyAdminAPIClient): data.update({ 'subject': subject }) - if process_type: - data.update({ - 'process_type': process_type - }) + data.update({ + 'process_type': 'normal' + }) data = _attach_current_user(data) endpoint = "/service/{0}/template/{1}".format(service_id, id_) return self.post(endpoint, data) diff --git a/app/templates/admin_template.html b/app/templates/admin_template.html index 8e91178f2..67f6f5412 100644 --- a/app/templates/admin_template.html +++ b/app/templates/admin_template.html @@ -31,7 +31,7 @@ {% endblock %} {% block meta %} {% endblock %} - + {% endblock %} {% block pageTitle %} @@ -51,6 +51,16 @@ {% if current_user.is_authenticated %} {% if current_user.platform_admin %} {% set navigation = [ + { + "href": url_for('main.get_started'), + "text": "Using notify", + "active": header_navigation.is_selected('using_notify') + }, + { + "href": url_for('main.features'), + "text": "Features", + "active": header_navigation.is_selected('features') + }, { "href": url_for('main.user_profile'), "text": current_user.name, diff --git a/app/templates/partials/count.html b/app/templates/partials/count.html index 21834648b..001130a1b 100644 --- a/app/templates/partials/count.html +++ b/app/templates/partials/count.html @@ -5,9 +5,12 @@ {% if notifications_deleted %}
{% for label, query_param, url, count in counts %} -
- {{ big_number(count, label, smaller=True) }} -
+ {% if query_param == 'pending' %} +
{{ big_number(count, query_param, smaller=True) }}
+ {% else %} +
{{ big_number(count, label, smaller=True) }}
+ {% endif %} + {% endfor %}
{% else %} diff --git a/app/templates/partials/notifications/status.html b/app/templates/partials/notifications/status.html index c8124b94b..aa4eb45e5 100644 --- a/app/templates/partials/notifications/status.html +++ b/app/templates/partials/notifications/status.html @@ -1,3 +1,4 @@ +
{% set field_status = notification.status|format_notification_status_as_field_status(notification.notification_type) %} {% set status_url = notification.status|format_notification_status_as_url(notification.notification_type) %} @@ -5,9 +6,18 @@ {% if status_url %} {% endif %} + + {% if notification.status != 'sending' %} {{ notification.status|format_notification_status( notification.template.template_type ) }} + {% endif %} + + {% if notification.status == 'sending' %} +

+ Pending. Messages will remain in pending state until carrier status is received, typically 5 minutes. +

+ {% endif %} {% if status_url %}
{% endif %} @@ -15,4 +25,5 @@ (test) {% endif %}

+
diff --git a/app/templates/views/activity/counts.html b/app/templates/views/activity/counts.html index b73738966..bf458a1f6 100644 --- a/app/templates/views/activity/counts.html +++ b/app/templates/views/activity/counts.html @@ -1,5 +1,4 @@ {% from "components/pill.html" import pill %} -
{{ pill( status_filters, diff --git a/app/templates/views/dashboard/_jobs.html b/app/templates/views/dashboard/_jobs.html index eaa8d026d..0b1ecad2f 100644 --- a/app/templates/views/dashboard/_jobs.html +++ b/app/templates/views/dashboard/_jobs.html @@ -50,7 +50,7 @@ {{ big_number( item.notifications_sending, smallest=True, - label='sending', + label='pending', ) }}
diff --git a/app/templates/views/jobs/job.html b/app/templates/views/jobs/job.html index 193bbc8a6..89ba335b9 100644 --- a/app/templates/views/jobs/job.html +++ b/app/templates/views/jobs/job.html @@ -17,6 +17,6 @@ {{ ajax_block(partials, updates_url, 'counts', finished=job.processing_finished) }} {{ ajax_block(partials, updates_url, 'notifications', finished=job.processing_finished) }} -
 
+
{% endblock %} diff --git a/app/templates/views/notifications.html b/app/templates/views/notifications.html index 598ab743e..57c1aee9c 100644 --- a/app/templates/views/notifications.html +++ b/app/templates/views/notifications.html @@ -25,6 +25,11 @@ 'counts' ) }} + +

+ Messages will remain in pending state until carrier status is received, typically 5 minutes. +

+ {% call form_wrapper( action=url_for('.view_notifications', service_id=current_service.id, message_type=message_type), class="usa-search margin-bottom-2" @@ -50,6 +55,10 @@ {% endcall %} + + + + {% call form_wrapper(id="search-form") %} diff --git a/app/templates/views/templates/choose.html b/app/templates/views/templates/choose.html index 01eb809c5..ffb055a74 100644 --- a/app/templates/views/templates/choose.html +++ b/app/templates/views/templates/choose.html @@ -50,7 +50,7 @@
{% if current_user.has_permissions('manage_templates') and current_template_folder_id and user_has_template_folder_permission %}
- Manage this folder + Manage this folder
{% endif %} diff --git a/app/utils/csv.py b/app/utils/csv.py index 2bcde2282..a30d47375 100644 --- a/app/utils/csv.py +++ b/app/utils/csv.py @@ -62,7 +62,7 @@ def generate_notifications_csv(**kwargs): original_column_headers = original_upload.column_headers fieldnames = ['Row number'] + original_column_headers + ['Template', 'Type', 'Job', 'Status', 'Time'] else: - fieldnames = ['Recipient', 'Reference', 'Template', 'Type', 'Sent by', 'Sent by email', 'Job', 'Status', 'Time'] + fieldnames = ['Recipient', 'Template', 'Type', 'Sent by', 'Job', 'Status', 'Time'] yield ','.join(fieldnames) + '\n' @@ -85,11 +85,9 @@ def generate_notifications_csv(**kwargs): else: values = [ notification['recipient'], - notification['client_reference'], notification['template_name'], notification['template_type'], notification['created_by_name'] or '', - notification['created_by_email_address'] or '', notification['job_name'] or '', notification['status'], notification['created_at'] diff --git a/docs/sprint-goals.md b/docs/sprint-goals.md index c9cb9abbd..cdb15bc89 100644 --- a/docs/sprint-goals.md +++ b/docs/sprint-goals.md @@ -1,6 +1,16 @@ # Notify Sprint Goals Log -## Sprint: L (6/7/23) +## Sprint: M (6/22/23) + +| | Goals | Impact | +|-------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------| +| Engineering | Implement beta.notify.gov [landing page strategy](https://github.com/GSA/notifications-admin/issues/566); work towards completion of ["smart retention quotas"](https://github.com/GSA/notifications-api/issues/295) by [updating the data model](https://github.com/GSA/notifications-api/issues/141) ; document, configure, and test [auto-reply](https://github.com/GSA/notifications-api/issues/271) messages for demo phone number; explore [stress testing](https://github.com/GSA/notifications-api/issues/87) and [end-to-end tests](https://github.com/GSA/notifications-admin/issues/549) | Prepare site for public launch after LATO, make the data model align with our vision and progress towards higher daily messag send capability, enable automated replies for first partner, work towards a more reliable application | +| UX | Recruit usability testers; kick-off user testing in earnest; [propose new flows and wireframes](https://github.com/GSA/notifications-admin/issues/455) (remains from last sprint); | Gain feedback on usability and functionality, streamline confusing flows and processes | +| Content | Contribute to the strategy of the newly forming Content sub-team | Clearer understanding of roles and responsibilities on content strategy | +| Security | Respond to any assessment questions and/or needs | Keep the LATO award timeline as short as possible + + +## Sprint: Lazuli Bunting (6/7/23) | | Goals | Impact | |-------------|-----------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/tests/app/main/views/test_activity.py b/tests/app/main/views/test_activity.py index b76a6491c..cf5238147 100644 --- a/tests/app/main/views/test_activity.py +++ b/tests/app/main/views/test_activity.py @@ -520,7 +520,7 @@ def test_get_status_filters_calculates_stats(client_request): assert {label: count for label, _option, _link, count in ret} == { 'total': 6, - 'sending': 3, + 'pending': 3, 'failed': 2, 'delivered': 1 } @@ -530,7 +530,7 @@ def test_get_status_filters_in_right_order(client_request): ret = get_status_filters(Service({'id': 'foo'}), 'sms', STATISTICS) assert [label for label, _option, _link, _count in ret] == [ - 'total', 'sending', 'delivered', 'failed' + 'total', 'pending', 'delivered', 'failed' ] diff --git a/tests/app/main/views/test_index.py b/tests/app/main/views/test_index.py index 2e17dfeb9..08286faf9 100644 --- a/tests/app/main/views/test_index.py +++ b/tests/app/main/views/test_index.py @@ -71,7 +71,6 @@ def test_robots(client_request): ('bat_phone', {}), ('thanks', {}), ('register', {}), - ('features_email', {}), pytest.param('index', {}, marks=pytest.mark.xfail(raises=AssertionError)), )) @freeze_time('2012-12-12 12:12') # So we don’t go out of business hours @@ -116,12 +115,17 @@ def test_static_pages( session['service_id'] = None request() - # Check it still works when they sign out + # Check it redirects to the login screen when they sign out client_request.logout() with client_request.session_transaction() as session: session['service_id'] = None session['user_id'] = None - request() + request( + _expected_status=302, + _expected_redirect='/sign-in?next={}'.format( + url_for('main.{}'.format(view)) + ) + ) def test_guidance_pages_link_to_service_pages_when_signed_in( @@ -143,12 +147,12 @@ def test_guidance_pages_link_to_service_pages_when_signed_in( page = request() assert not page.select_one(selector) - # Check it still works when they sign out + # Check it redirects to the login screen when they sign out client_request.logout() with client_request.session_transaction() as session: session['service_id'] = None session['user_id'] = None - page = request() + page = request(_expected_status=302) assert not page.select_one(selector) diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index f3b691b6d..5a017f8c9 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -182,7 +182,7 @@ def test_should_show_job_in_progress( normalize_spaces(link.text) for link in page.select('.pill a:not(.pill-item--selected)') ] == [ - '10 sending text messages', '0 delivered text messages', '0 failed text messages' + '10 pending text messages', '0 delivered text messages', '0 failed text messages' ] assert page.select_one('p.hint').text.strip() == 'Report is 50% complete…' @@ -207,7 +207,7 @@ def test_should_show_job_without_notifications( normalize_spaces(link.text) for link in page.select('.pill a:not(.pill-item--selected)') ] == [ - '10 sending text messages', '0 delivered text messages', '0 failed text messages' + '10 pending text messages', '0 delivered text messages', '0 failed text messages' ] assert page.select_one('p.hint').text.strip() == 'Report is 50% complete…' assert page.select_one('tbody').text.strip() == 'No messages to show yet…' @@ -307,7 +307,7 @@ def test_should_show_old_job( for column in page.select('main .govuk-grid-column-one-quarter') ] == [ '1 total text messages', - '1 sending text message', + '1 pending', '0 delivered text messages', '0 failed text messages', ] @@ -395,7 +395,7 @@ def test_should_show_updates_for_one_job_as_json( ) content = json.loads(response.get_data(as_text=True)) - assert 'sending' in content['counts'] + assert 'pending' in content['counts'] assert 'delivered' in content['counts'] assert 'failed' in content['counts'] assert 'Recipient' in content['notifications'] @@ -432,7 +432,7 @@ def test_should_show_updates_for_scheduled_job_as_json( ) content = response.json - assert 'sending' in content['counts'] + assert 'pending' in content['counts'] assert 'delivered' in content['counts'] assert 'failed' in content['counts'] assert 'Recipient' in content['notifications'] diff --git a/tests/app/main/views/test_notifications.py b/tests/app/main/views/test_notifications.py index e6d8c2791..6c6cc06f2 100644 --- a/tests/app/main/views/test_notifications.py +++ b/tests/app/main/views/test_notifications.py @@ -15,7 +15,8 @@ from tests.conftest import ( @pytest.mark.parametrize('key_type, notification_status, expected_status', [ (None, 'created', 'Sending'), - (None, 'sending', 'Sending'), + (None, 'sending', + "Pending. Messages will remain in pending state until carrier status is received, typically 5 minutes."), (None, 'delivered', 'Delivered'), (None, 'failed', 'Failed'), (None, 'temporary-failure', 'Phone not accepting messages right now'), @@ -23,7 +24,8 @@ from tests.conftest import ( (None, 'technical-failure', 'Technical failure'), ('team', 'delivered', 'Delivered'), ('live', 'delivered', 'Delivered'), - ('test', 'sending', 'Sending (test)'), + ('test', 'sending', + "Pending. Messages will remain in pending state until carrier status is received, typically 5 minutes. (test)"), ('test', 'delivered', 'Delivered (test)'), ('test', 'permanent-failure', 'Not delivered (test)'), ]) diff --git a/tests/app/main/views/test_template_folders.py b/tests/app/main/views/test_template_folders.py index bbc8d089d..d11a97659 100644 --- a/tests/app/main/views/test_template_folders.py +++ b/tests/app/main/views/test_template_folders.py @@ -522,7 +522,6 @@ def test_can_create_email_template_with_parent_folder( 'template_content': "here's a burrito 🌯", 'template_type': 'email', 'service': SERVICE_ONE_ID, - 'process_type': 'normal', 'parent_folder_id': PARENT_FOLDER_ID } client_request.post('.add_service_template', @@ -540,7 +539,6 @@ def test_can_create_email_template_with_parent_folder( data['template_content'], SERVICE_ONE_ID, data['subject'], - data['process_type'], data['parent_folder_id']) diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index 486e57ef0..ce3150a1b 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -658,7 +658,7 @@ def test_should_show_page_template_with_priority_select_if_platform_admin( assert page.select_one('input[name=name]')['value'] == "Two week reminder" assert "Template <em>content</em> with & entity" in str(page.select_one('textarea')) - assert "Use priority queue?" in page.text + assert "Use priority queue?" not in page.text mock_get_service_template.assert_called_with(service_one['id'], template_id, None) @@ -1110,7 +1110,6 @@ def test_should_redirect_when_saving_a_template( 'template_content': content, 'template_type': 'sms', 'service': SERVICE_ONE_ID, - 'process_type': 'normal', }, _expected_status=302, _expected_redirect=url_for( @@ -1120,7 +1119,7 @@ def test_should_redirect_when_saving_a_template( ), ) mock_update_service_template.assert_called_with( - fake_uuid, name, 'sms', content, SERVICE_ONE_ID, None, 'normal', + fake_uuid, name, 'sms', content, SERVICE_ONE_ID, None ) @@ -1140,7 +1139,6 @@ def test_should_edit_content_when_process_type_is_priority_not_platform_admin( 'template_content': "new template content with & entity", 'template_type': 'sms', 'service': SERVICE_ONE_ID, - 'process_type': 'priority', }, _expected_status=302, _expected_redirect=url_for( @@ -1155,8 +1153,7 @@ def test_should_edit_content_when_process_type_is_priority_not_platform_admin( 'sms', "new template content with & entity", SERVICE_ONE_ID, - None, - 'priority' + None ) @@ -1420,7 +1417,6 @@ def test_should_redirect_when_saving_a_template_email( 'template_type': 'email', 'service': SERVICE_ONE_ID, 'subject': subject, - 'process_type': 'normal' }, _expected_status=302, _expected_redirect=url_for( @@ -1430,7 +1426,7 @@ def test_should_redirect_when_saving_a_template_email( ), ) mock_update_service_template.assert_called_with( - fake_uuid, name, 'email', content, SERVICE_ONE_ID, subject, 'normal', + fake_uuid, name, 'email', content, SERVICE_ONE_ID, subject ) @@ -1803,7 +1799,6 @@ def test_should_create_sms_template_without_downgrading_unicode_characters( 'template_content': msg, 'template_type': template_type, 'service': SERVICE_ONE_ID, - 'process_type': 'normal' }, expected_status=302, ) @@ -1814,8 +1809,7 @@ def test_should_create_sms_template_without_downgrading_unicode_characters( msg, # content ANY, # service_id ANY, # subject - ANY, # process_type - ANY, # parent_folder_id + ANY # parent_folder_id ) diff --git a/tests/app/main/views/uploads/test_upload_hub.py b/tests/app/main/views/uploads/test_upload_hub.py index 2ca1c45f2..780c0d0c6 100644 --- a/tests/app/main/views/uploads/test_upload_hub.py +++ b/tests/app/main/views/uploads/test_upload_hub.py @@ -49,7 +49,7 @@ def test_get_upload_hub_page( assert normalize_spaces(uploads[0].text.strip()) == ( 'some.csv ' 'Sent 1 January 2016 at 11:09 ' - '0 sending 8 delivered 2 failed' + '0 pending 8 delivered 2 failed' ) assert uploads[0].select_one('a.file-list-filename-large')['href'] == ( '/services/{}/jobs/job_id_1'.format(SERVICE_ONE_ID) diff --git a/tests/app/utils/test_csv.py b/tests/app/utils/test_csv.py index 304de6f8e..18e74a8f0 100644 --- a/tests/app/utils/test_csv.py +++ b/tests/app/utils/test_csv.py @@ -77,14 +77,14 @@ def _get_notifications_csv_mock( @pytest.mark.parametrize('created_by_name, expected_content', [ ( None, [ - 'Recipient,Reference,Template,Type,Sent by,Sent by email,Job,Status,Time\n', - 'foo@bar.com,ref 1234,foo,sms,,sender@email.gsa.gov,,Delivered,1943-04-19 12:00:00\r\n', + 'Recipient,Template,Type,Sent by,Job,Status,Time\n', + 'foo@bar.com,foo,sms,,,Delivered,1943-04-19 12:00:00\r\n', ] ), ( 'Anne Example', [ - 'Recipient,Reference,Template,Type,Sent by,Sent by email,Job,Status,Time\n', - 'foo@bar.com,ref 1234,foo,sms,Anne Example,sender@email.gsa.gov,,Delivered,1943-04-19 12:00:00\r\n', + 'Recipient,Template,Type,Sent by,Job,Status,Time\n', + 'foo@bar.com,foo,sms,Anne Example,,Delivered,1943-04-19 12:00:00\r\n', ] ), ])