From f949786e2dca774a0ba19e2e1dc241d366b4799e Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 15:40:22 -0400 Subject: [PATCH 01/31] Updated dependencies and add py-lock make command This changeset updates dependencies that have been flagged as out-of date and/or vulnerable. It also adds a py-lock Makefile command for keeping the poetry.lock file in sync without introducing additional issues from transitive dependency updates. Signed-off-by: Carlo Costino --- Makefile | 6 +++++- poetry.lock | 30 +++++++++++------------------- pyproject.toml | 4 ++-- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index 33130f9f3..80f6e6098 100644 --- a/Makefile +++ b/Makefile @@ -81,9 +81,13 @@ test: ## Run tests and create coverage report poetry run coverage report -m --fail-under=95 poetry run coverage html -d .coverage_cache +.PHONY: py-lock +py-lock: ## Syncs dependencies and updates lock file without performing recursive internal updates + poetry lock --no-update + .PHONY: freeze-requirements freeze-requirements: ## Pin all requirements including sub dependencies into requirements.txt - poetry lock + poetry lock --no-update poetry requirements .PHONY: audit diff --git a/poetry.lock b/poetry.lock index 0afd07cea..5f3f9af37 100644 --- a/poetry.lock +++ b/poetry.lock @@ -355,20 +355,22 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "4.1.0" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"}, - {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] -packaging = "*" six = ">=1.9.0" webencodings = "*" +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + [[package]] name = "blinker" version = "1.6.2" @@ -2032,16 +2034,6 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -3981,13 +3973,13 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "2.3.7" +version = "3.0.1" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-2.3.7-py3-none-any.whl", hash = "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528"}, - {file = "werkzeug-2.3.7.tar.gz", hash = "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8"}, + {file = "werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10"}, + {file = "werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc"}, ] [package.dependencies] @@ -4280,4 +4272,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7eaaee518cc69711bb1704d655c28f8df19dd25361d4657d4ca1bb614d2558eb" +content-hash = "398f184c12d6f8a626d60a9d85434e597257f3b5f5e8170963d799e16e19b91b" diff --git a/pyproject.toml b/pyproject.toml index 80ae76fe7..9ed0e8ed1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ black = "==23.9.1" bcrypt = "==3.2.2" beautifulsoup4 = "==4.12.2" billiard = "==3.6.4.0" -bleach = "==4.1.0" +bleach = "^6.1.0" blinker = "~=1.4" boto3 = "==1.28.15" botocore = "==1.31.15" @@ -61,7 +61,7 @@ pyjwt = "==2.8.0" python-dotenv = "==1.0.0" radon = "==6.0.1" sqlalchemy = "==1.4.40" -werkzeug = "~=2.3" +werkzeug = "^3.0.1" vulture = "==2.10" packaging = "==23.1" notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true, branch = "main"} From 7cc7a2a53f0dbce0c86493433171bf3da0e2cbc3 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 15:47:39 -0400 Subject: [PATCH 02/31] Update freeze-requirements command Signed-off-by: Carlo Costino --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 80f6e6098..cda8e952c 100644 --- a/Makefile +++ b/Makefile @@ -87,8 +87,7 @@ py-lock: ## Syncs dependencies and updates lock file without performing recursiv .PHONY: freeze-requirements freeze-requirements: ## Pin all requirements including sub dependencies into requirements.txt - poetry lock --no-update - poetry requirements + poetry export --without-hashes --format=requirements.txt > requirements.txt .PHONY: audit audit: From c3049cec733887462f98e64e2237648019540463 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 15:54:22 -0400 Subject: [PATCH 03/31] Update project dependencies and shift some things to dev dependencies Signed-off-by: Carlo Costino --- poetry.lock | 2 +- pyproject.toml | 27 ++++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5f3f9af37..bab015478 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4272,4 +4272,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "398f184c12d6f8a626d60a9d85434e597257f3b5f5e8170963d799e16e19b91b" +content-hash = "93f166fed3957e89157453ad23720d574c653afe2fc6e615fefa19bbb6d9e252" diff --git a/pyproject.toml b/pyproject.toml index 9ed0e8ed1..31e919e76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,7 @@ description = "Notify.gov backend" authors = ["Your Name "] readme = "README.md" + [tool.poetry.dependencies] python = "^3.9" alembic = "==1.12.0" @@ -14,7 +15,6 @@ asn1crypto = "==1.5.1" async-timeout = "==4.0.3" attrs = "==23.1.0" awscli = "==1.29.15" -black = "==23.9.1" bcrypt = "==3.2.2" beautifulsoup4 = "==4.12.2" billiard = "==3.6.4.0" @@ -52,40 +52,41 @@ jsonschema = {version = "==4.17.0", extras = ["format"]} lxml = "==4.9.3" marshmallow = "==3.20.1" marshmallow-sqlalchemy = "==0.29.0" +newrelic = "*" notifications-python-client = "==8.0.1" +notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true, branch = "main"} oscrypto = "==1.3.0" -poetry = "==1.6.1" +packaging = "==23.1" poetry-dotenv-plugin = "==0.2.0" psycopg2-binary = "==2.9.3" pyjwt = "==2.8.0" python-dotenv = "==1.0.0" -radon = "==6.0.1" sqlalchemy = "==1.4.40" werkzeug = "^3.0.1" -vulture = "==2.10" -packaging = "==23.1" -notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true, branch = "main"} -newrelic = "*" [tool.poetry.group.dev.dependencies] +bandit = "*" +black = "==23.9.1" +cloudfoundry-client = "*" exceptiongroup = "==1.1.3" flake8 = "==4.0.1" flake8-bugbear = "==23.3.12" +freezegun = "==1.2.2" +honcho = "*" isort = "==5.12.0" +jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} moto = "==4.2.6" +pip-audit = "*" pytest = "==7.4.2" pytest-env = "==1.0.1" pytest-mock = "==3.11.1" pytest-cov = "==4.1.0" pytest-xdist = "==3.3.1" -freezegun = "==1.2.2" +radon = "==6.0.1" requests-mock = "==1.11.0" -jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} -pip-audit = "*" -bandit = "*" -honcho = "*" -cloudfoundry-client = "*" +vulture = "==2.10" + [build-system] requires = ["poetry-core"] From 5e206ab10b8d620a86ccdf17cbfd239fbe27faf5 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 16:07:36 -0400 Subject: [PATCH 04/31] More dependency updates Signed-off-by: Carlo Costino --- poetry.lock | 82 ++++++++++++++++++++++++-------------------------- pyproject.toml | 26 ++++++++-------- 2 files changed, 52 insertions(+), 56 deletions(-) diff --git a/poetry.lock b/poetry.lock index bab015478..066704cd6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -309,33 +309,29 @@ files = [ [[package]] name = "black" -version = "23.9.1" +version = "23.10.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, - {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, - {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, - {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, - {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, - {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, - {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, - {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, - {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, - {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, - {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, - {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, - {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, + {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, + {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, + {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, + {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, + {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, + {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, + {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, + {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, + {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, + {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, ] [package.dependencies] @@ -1111,19 +1107,19 @@ typing = ["typing-extensions (>=4.7.1)"] [[package]] name = "flake8" -version = "4.0.1" +version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8.1" files = [ - {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, - {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, ] [package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.8.0,<2.9.0" -pyflakes = ">=2.4.0,<2.5.0" +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" [[package]] name = "flake8-bugbear" @@ -2110,13 +2106,13 @@ tests = ["pytest", "pytest-lazy-fixture (>=0.6.2)"] [[package]] name = "mccabe" -version = "0.6.1" +version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] [[package]] @@ -2932,13 +2928,13 @@ files = [ [[package]] name = "pycodestyle" -version = "2.8.0" +version = "2.11.1" description = "Python style guide checker" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, - {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, + {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, + {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, ] [[package]] @@ -2954,13 +2950,13 @@ files = [ [[package]] name = "pyflakes" -version = "2.4.0" +version = "3.1.0" description = "passive checker of Python programs" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, - {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, ] [[package]] @@ -4272,4 +4268,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "93f166fed3957e89157453ad23720d574c653afe2fc6e615fefa19bbb6d9e252" +content-hash = "7a061dfe30fbcbb363823ae6fc5d956f487a6abab85ba3d2008e4e7bdf6647a2" diff --git a/pyproject.toml b/pyproject.toml index 31e919e76..824a9dab5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -67,25 +67,25 @@ werkzeug = "^3.0.1" [tool.poetry.group.dev.dependencies] bandit = "*" -black = "==23.9.1" +black = "^23.10.1" cloudfoundry-client = "*" exceptiongroup = "==1.1.3" -flake8 = "==4.0.1" -flake8-bugbear = "==23.3.12" -freezegun = "==1.2.2" +flake8 = "^6.1.0" +flake8-bugbear = "^23.3.12" +freezegun = "^1.2.2" honcho = "*" -isort = "==5.12.0" +isort = "^5.12.0" jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} moto = "==4.2.6" pip-audit = "*" -pytest = "==7.4.2" -pytest-env = "==1.0.1" -pytest-mock = "==3.11.1" -pytest-cov = "==4.1.0" -pytest-xdist = "==3.3.1" -radon = "==6.0.1" -requests-mock = "==1.11.0" -vulture = "==2.10" +pytest = "^7.4.2" +pytest-env = "^1.0.1" +pytest-mock = "^3.11.1" +pytest-cov = "^4.1.0" +pytest-xdist = "^3.3.1" +radon = "^6.0.1" +requests-mock = "^1.11.0" +vulture = "^2.10" [build-system] From 8c825a43bd93ffb3254d47af12dad10bcd6dc4a8 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 16:16:49 -0400 Subject: [PATCH 05/31] Updated a couple more dependencies and fix flake8 warnings Signed-off-by: Carlo Costino --- app/dao/date_util.py | 2 +- poetry.lock | 39 +++++++++++---------- pyproject.toml | 6 ++-- tests/app/clients/test_document_download.py | 4 +-- tests/app/test_model.py | 2 +- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/app/dao/date_util.py b/app/dao/date_util.py index a9b8e3561..8bacdcb0c 100644 --- a/app/dao/date_util.py +++ b/app/dao/date_util.py @@ -60,7 +60,7 @@ def get_current_calendar_year_start_year(): def get_calendar_year_for_datetime(start_date): - if type(start_date) == date: + if isinstance(start_date) == date: start_date = datetime.combine(start_date, time.min) year = int(start_date.strftime("%Y")) diff --git a/poetry.lock b/poetry.lock index 066704cd6..20c9dd042 100644 --- a/poetry.lock +++ b/poetry.lock @@ -211,22 +211,22 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte [[package]] name = "awscli" -version = "1.29.15" +version = "1.29.74" description = "Universal Command Line Environment for AWS." optional = false python-versions = ">= 3.7" files = [ - {file = "awscli-1.29.15-py3-none-any.whl", hash = "sha256:87747ef7af86d3c929510fcc5e22559662b77b81891af9efc4a5d5ff4b0fd9f3"}, - {file = "awscli-1.29.15.tar.gz", hash = "sha256:d2ce17d09886340aedcde9cbbf58f23a237b255adb62f89d7dae68a09f7a238e"}, + {file = "awscli-1.29.74-py3-none-any.whl", hash = "sha256:ad9b1d5da39aab6c048f7114127b29a0c84416a32b2510c1e7fa106ed6912a8e"}, + {file = "awscli-1.29.74.tar.gz", hash = "sha256:dfb25caebf0356639fd42772b7562377201feb2619380ab58d24938f47b1d24d"}, ] [package.dependencies] -botocore = "1.31.15" +botocore = "1.31.74" colorama = ">=0.2.5,<0.4.5" docutils = ">=0.10,<0.17" PyYAML = ">=3.10,<6.1" rsa = ">=3.1.2,<4.8" -s3transfer = ">=0.6.0,<0.7.0" +s3transfer = ">=0.7.0,<0.8.0" [[package]] name = "bandit" @@ -391,38 +391,41 @@ files = [ [[package]] name = "boto3" -version = "1.28.15" +version = "1.28.74" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.28.15-py3-none-any.whl", hash = "sha256:84b7952858e9319968b0348d9894a91a6bb5f31e81a45c68044d040a12362abe"}, - {file = "boto3-1.28.15.tar.gz", hash = "sha256:a6e711e0b6960c3a5b789bd30c5a18eea7263f2a59fc07f85efa5e04804e49d2"}, + {file = "boto3-1.28.74-py3-none-any.whl", hash = "sha256:a12619d23d50523bdfa6bd2d0c124a9567a5434ec63e47df71c3e88fc9d482f6"}, + {file = "boto3-1.28.74.tar.gz", hash = "sha256:c4d89ff98cf53e1e74ed8c1c1bb13a7bd7d909e1c0d9ad25792ccfe2cb1575bc"}, ] [package.dependencies] -botocore = ">=1.31.15,<1.32.0" +botocore = ">=1.31.74,<1.32.0" jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.6.0,<0.7.0" +s3transfer = ">=0.7.0,<0.8.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.31.15" +version = "1.31.74" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.31.15-py3-none-any.whl", hash = "sha256:b3a0f787f275711875476cbe12a0123b2e6570b2f505e2fa509dcec3c5410b57"}, - {file = "botocore-1.31.15.tar.gz", hash = "sha256:b46d1ce4e0cf42d28fdf61ce0c999904645d38b51cb809817a361c0cec16d487"}, + {file = "botocore-1.31.74-py3-none-any.whl", hash = "sha256:3eef070a8d8c4240aad07e5c89395002b140af213bcfc4dcd1d441e3ee4b3bee"}, + {file = "botocore-1.31.74.tar.gz", hash = "sha256:2549ca7dc0f9227d8692a56a133c1346642efb38736c7c3f1330724d937ad6ec"}, ] [package.dependencies] jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" -urllib3 = ">=1.25.4,<1.27" +urllib3 = [ + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""}, +] [package.extras] crt = ["awscrt (==0.16.26)"] @@ -3541,13 +3544,13 @@ pyasn1 = ">=0.1.3" [[package]] name = "s3transfer" -version = "0.6.2" +version = "0.7.0" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">= 3.7" files = [ - {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, - {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, + {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"}, + {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"}, ] [package.dependencies] @@ -4268,4 +4271,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7a061dfe30fbcbb363823ae6fc5d956f487a6abab85ba3d2008e4e7bdf6647a2" +content-hash = "3a9174f44eaffc65224e48815e2d8961f25a34f228fec9d663c3c75c0ddf24ab" diff --git a/pyproject.toml b/pyproject.toml index 824a9dab5..f8b0bba22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,14 +14,14 @@ arrow = "==1.2.3" asn1crypto = "==1.5.1" async-timeout = "==4.0.3" attrs = "==23.1.0" -awscli = "==1.29.15" +awscli = "^1.29.74" bcrypt = "==3.2.2" beautifulsoup4 = "==4.12.2" billiard = "==3.6.4.0" bleach = "^6.1.0" blinker = "~=1.4" -boto3 = "==1.28.15" -botocore = "==1.31.15" +boto3 = "^1.28.66" +botocore = "^1.31.66" cachetools = "==5.3.1" celery = {version = "==5.2.7", extras = ["redis"]} certifi = ">=2022.12.7" diff --git a/tests/app/clients/test_document_download.py b/tests/app/clients/test_document_download.py index 96469ae93..be8f38e40 100644 --- a/tests/app/clients/test_document_download.py +++ b/tests/app/clients/test_document_download.py @@ -76,7 +76,7 @@ def test_should_raise_non_400_statuses_as_exceptions(document_download): document_download.upload_document("service-id", "abababab") assert ( - type(excinfo.value) == Exception + isinstance(excinfo.value) == Exception ) # make sure it's a base exception, so will be handled as a 500 by v2 api assert ( str(excinfo.value) @@ -98,6 +98,6 @@ def test_should_raise_exceptions_without_http_response_bodies_as_exceptions( document_download.upload_document("service-id", "abababab") assert ( - type(excinfo.value) == Exception + isinstance(excinfo.value) == Exception ) # make sure it's a base exception, so will be handled as a 500 by v2 api assert str(excinfo.value) == "Unhandled document download error: ConnectTimeout()" diff --git a/tests/app/test_model.py b/tests/app/test_model.py index 20a7763cb..bdfc4c6cb 100644 --- a/tests/app/test_model.py +++ b/tests/app/test_model.py @@ -403,7 +403,7 @@ def test_notification_get_created_by_email_address(sample_notification, sample_u def test_notification_history_from_original(sample_notification): history = NotificationHistory.from_original(sample_notification) - assert type(history) == NotificationHistory + assert isinstance(history) == NotificationHistory def test_rate_str(): From 490893397e835963c9c6469f57091ad85010385c Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 16:30:06 -0400 Subject: [PATCH 06/31] Fixed isinstance() calls, oops Signed-off-by: Carlo Costino --- app/dao/date_util.py | 2 +- tests/app/clients/test_document_download.py | 8 ++++---- tests/app/test_model.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/dao/date_util.py b/app/dao/date_util.py index 8bacdcb0c..b338703c4 100644 --- a/app/dao/date_util.py +++ b/app/dao/date_util.py @@ -60,7 +60,7 @@ def get_current_calendar_year_start_year(): def get_calendar_year_for_datetime(start_date): - if isinstance(start_date) == date: + if isinstance(start_date, date): start_date = datetime.combine(start_date, time.min) year = int(start_date.strftime("%Y")) diff --git a/tests/app/clients/test_document_download.py b/tests/app/clients/test_document_download.py index be8f38e40..8cc891b76 100644 --- a/tests/app/clients/test_document_download.py +++ b/tests/app/clients/test_document_download.py @@ -75,8 +75,8 @@ def test_should_raise_non_400_statuses_as_exceptions(document_download): document_download.upload_document("service-id", "abababab") - assert ( - isinstance(excinfo.value) == Exception + assert isinstance( + excinfo.value, Exception ) # make sure it's a base exception, so will be handled as a 500 by v2 api assert ( str(excinfo.value) @@ -97,7 +97,7 @@ def test_should_raise_exceptions_without_http_response_bodies_as_exceptions( document_download.upload_document("service-id", "abababab") - assert ( - isinstance(excinfo.value) == Exception + assert isinstance( + excinfo.value, Exception ) # make sure it's a base exception, so will be handled as a 500 by v2 api assert str(excinfo.value) == "Unhandled document download error: ConnectTimeout()" diff --git a/tests/app/test_model.py b/tests/app/test_model.py index bdfc4c6cb..e2a2d1221 100644 --- a/tests/app/test_model.py +++ b/tests/app/test_model.py @@ -403,7 +403,7 @@ def test_notification_get_created_by_email_address(sample_notification, sample_u def test_notification_history_from_original(sample_notification): history = NotificationHistory.from_original(sample_notification) - assert isinstance(history) == NotificationHistory + assert isinstance(history, NotificationHistory) def test_rate_str(): From 4b2586cd3b780a2a3aa1c10b50163de06416d34b Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Mon, 30 Oct 2023 16:56:40 -0400 Subject: [PATCH 07/31] Added instructions to the README Signed-off-by: Carlo Costino --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8910fba68..1331a6fc2 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ On MacOS, using [Homebrew](https://brew.sh/) for package management is highly re brew services start redis ``` -1. Install +1. Install 1. Run the project setup `make bootstrap` @@ -66,11 +66,44 @@ On MacOS, using [Homebrew](https://brew.sh/) for package management is highly re `make run-celery` +### Python dependency management + +We're using [`Poetry`](https://python-poetry.org/) for managing our Python +dependencies and local virtual environments. When it comes to managing the +Python dependencies, there are a couple of things to bear in mind. + +For situations where you manually manipulate the `pyproject.toml` file, you +should use the `make py-lock` command to sync the `poetry.lock` file. This will +ensure that you don't inadvertently bring in other transitive dependency updates +that have not been fully tested with the project yet. + +If you're just trying to update a dependency to a newer (or the latest) version, +you should let Poetry take care of that for you by running the following: + +``` +poetry update [...] +``` + +You can specify more than one dependency together. With this command, Poetry +will do the following for you: + +- Find the latest compatible version(s) of the specified dependency/dependencies +- Install the new versions +- Update and sync the `poetry.lock` file + +In either situation, once you are finished and have verified the dependency +changes are working, please be sure to commit both the `pyproject.toml` and +`poetry.lock` files. + ### Known installation issues -On M1 Macs, if you get a `fatal error: 'Python.h' file not found` message, try a different method of installing Python. Installation via `pyenv` is known to work. +On M1 Macs, if you get a `fatal error: 'Python.h' file not found` message, try a +different method of installing Python. Installation via `pyenv` is known to +work. -A direct installation of PostgreSQL will not put the `createdb` command on your `$PATH`. It can be added there in your shell startup script, or a Homebrew-managed installation of PostgreSQL will take care of it. +A direct installation of PostgreSQL will not put the `createdb` command on your +`$PATH`. It can be added there in your shell startup script, or a +Homebrew-managed installation of PostgreSQL will take care of it. ## Documentation From dfa729d5c7d0583fb2f61d13a718fcf656603a7a Mon Sep 17 00:00:00 2001 From: Steven Reilly Date: Mon, 30 Oct 2023 16:46:03 -0400 Subject: [PATCH 08/31] update onboarding docs --- docs/all.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/all.md b/docs/all.md index bac7762ca..28dea614a 100644 --- a/docs/all.md +++ b/docs/all.md @@ -147,13 +147,18 @@ We are using [New Relic](https://one.newrelic.com/nr1-core?account=3389907) for ## Onboarding - [ ] Join [the GSA GitHub org](https://github.com/GSA/GitHub-Administration#join-the-gsa-organization) -- [ ] Get permissions for the repos +- [ ] Get permissions for the repos via GitHub teams - [ ] Get access to the cloud.gov org && spaces +- [ ] Set up a user account on [the staging site](https://notify-staging.app.cloud.gov) - [ ] Get [access to AWS](https://handbook.tts.gsa.gov/launching-software/infrastructure/#cloud-service-provider-csp-sandbox-accounts), if necessary - [ ] Get [access to New Relic](https://handbook.tts.gsa.gov/tools/new-relic/#how-do-i-get-access-to-new-relic), if necessary -- [ ] Create the local `.env` file by copying `sample.env` and running `./run.sh` within the `terraform/development` folder +- [ ] Create the local `.env` file by copying `sample.env` and running `./run.sh` within the `terraform/development` folder (see [these docs](https://github.com/GSA/notifications-api/blob/main/docs/all.md#development)) +- [ ] Run through [the local setup process](https://github.com/GSA/notifications-api/tree/main#local-setup) +- [ ] Review [the system diagram](https://github.com/GSA/us-notify-compliance/blob/main/diagrams/rendered/apps/application.boundary.png) - [ ] Do stuff! +Upon completion, an admin should update 🔒[the permissions and access tracker](https://docs.google.com/spreadsheets/d/1Z8s82dbLHHxGC8fF2U1K6YhtZZYVaEdliOZRbKWW9L4/edit#gid=0). + ## Setting up the infrastructure These steps are required for new cloud.gov environments. Local development borrows SES & SNS infrastructure from the `notify-staging` cloud.gov space, so these steps are not required for new developers. From d6d11746b13be2d583d2015b7bf7b4df2ef8a732 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Wed, 1 Nov 2023 12:15:53 -0400 Subject: [PATCH 09/31] Update more dependencies and fix notifications-utils This changeset updates a few more dependencies and addresses the challenges we have had in keeping the notifications-utils dependency up-to-date. The changes include instructions on what to do going forward for future notifications-utils updates. Signed-off-by: Carlo Costino --- Makefile | 12 +- README.md | 17 +++ poetry.lock | 296 +++++++++++++++++++++++++++++++++++++++++-------- pyproject.toml | 10 +- 4 files changed, 281 insertions(+), 54 deletions(-) diff --git a/Makefile b/Makefile index cda8e952c..7418714be 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ GIT_COMMIT ?= $(shell git rev-parse HEAD) .PHONY: bootstrap bootstrap: ## Set up everything to run the app make generate-version-file - poetry install + poetry install --sync poetry self add poetry-dotenv-plugin createdb notification_api || true (poetry run flask db upgrade) || true @@ -84,6 +84,14 @@ test: ## Run tests and create coverage report .PHONY: py-lock py-lock: ## Syncs dependencies and updates lock file without performing recursive internal updates poetry lock --no-update + poetry install --sync + +.PHONY: update-utils +update-utils: ## Forces Poetry to pull the latest changes from the notifications-utils repo; requires that you commit the changes to poetry.lock! + poetry update notifications-utils + @echo + @echo !!! PLEASE MAKE SURE TO COMMIT AND PUSH THE UPDATED poetry.lock FILE !!! + @echo .PHONY: freeze-requirements freeze-requirements: ## Pin all requirements including sub dependencies into requirements.txt @@ -94,7 +102,7 @@ audit: poetry requirements > requirements.txt poetry requirements --dev > requirements_for_test.txt poetry run pip-audit -r requirements.txt - -poetry run pip-audit -r requirements_for_test.txt + poetry run pip-audit -r requirements_for_test.txt .PHONY: static-scan static-scan: diff --git a/README.md b/README.md index 1331a6fc2..64ea0faeb 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,23 @@ In either situation, once you are finished and have verified the dependency changes are working, please be sure to commit both the `pyproject.toml` and `poetry.lock` files. +### Keeping the notification-utils dependency up-to-date + +The `notifications-utils` dependency references the other repository we have at +https://github.com/GSA/notifications-utils - this dependency requires a bit of +extra legwork to ensure it stays up-to-date. + +Whenever a PR is merged in the `notifications-utils` repository, we need to make +sure the changes are pulled in here and committed to this repository as well. +You can do this by going through these steps: + +- Make sure your local `main` branch is up-to-date +- Create a new branch to work in +- Run `make update-utils` +- Commit the updated `poetry.lock` file and push the changes +- Make a new PR with the change +- Have the PR get reviewed and merged + ### Known installation issues On M1 Macs, if you get a `fatal error: 'Python.h' file not found` message, try a diff --git a/poetry.lock b/poetry.lock index 20c9dd042..15b0abcd8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -617,18 +617,103 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "2.0.12" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] -[package.extras] -unicode-backport = ["unicodedata2"] - [[package]] name = "cleo" version = "2.0.1" @@ -1350,13 +1435,13 @@ files = [ [[package]] name = "geojson" -version = "2.5.0" +version = "3.0.1" description = "Python bindings and utilities for GeoJSON" optional = false -python-versions = "*" +python-versions = ">=3.7, <3.12" files = [ - {file = "geojson-2.5.0-py2.py3-none-any.whl", hash = "sha256:ccbd13368dd728f4e4f13ffe6aaf725b6e802c692ba0dde628be475040c534ba"}, - {file = "geojson-2.5.0.tar.gz", hash = "sha256:6e4bb7ace4226a45d9c8c8b1348b3fc43540658359f93c3f7e03efa9f15f658a"}, + {file = "geojson-3.0.1-py3-none-any.whl", hash = "sha256:e49df982b204ed481e4c1236c57f587adf71537301cf8faf7120ab27d73c7568"}, + {file = "geojson-3.0.1.tar.gz", hash = "sha256:ff3d75acab60b1e66504a11f7ea12c104bad32ff3c410a807788663b966dee4a"}, ] [[package]] @@ -2403,39 +2488,59 @@ requests = ">=2.0.0" [[package]] name = "notifications-utils" -version = "56.0.3" -description = "Shared python code for Notify applications" +version = "0.2.0" +description = "" optional = false -python-versions = "*" +python-versions = ">=3.9,<3.12" files = [] develop = true [package.dependencies] -bleach = ">=4.1.0" -boto3 = ">=1.19.4" -cachetools = ">=4.1.1" -cryptography = ">=39.0.1" -Flask = ">=2.2.2" -Flask-Redis = ">=0.4.0" -geojson = ">=2.5.0" -govuk-bank-holidays = ">=0.10" -itsdangerous = ">=1.1.0" -Jinja2 = ">=2.11.3" -mistune = "<2.0.0" -orderedset = ">=2.0.3" -phonenumbers = ">=8.13.3" -python-json-logger = ">=2.0.1" -pytz = ">=2020.4" -pyyaml = ">=5.3.1" -requests = ">=2.25.0" -Shapely = ">=1.8.0" -smartypants = ">=2.0.1" +async-timeout = "^4.0.2" +bleach = "^6.1.0" +blinker = "^1.6.2" +boto3 = "^1.28.66" +botocore = "^1.31.66" +cachetools = "^5.3.0" +certifi = "^2023.7.22" +cffi = "^1.16.0" +charset-normalizer = "^3.1.0" +click = "^8.1.3" +cryptography = "^41.0.4" +flask = "^2.3.2" +flask-redis = "^0.4.0" +geojson = "^3.0.1" +govuk-bank-holidays = "^0.13" +idna = "^3.4" +itsdangerous = "^2.1.2" +jinja2 = "^3.1.2" +jmespath = "^1.0.1" +markupsafe = "^2.1.2" +mistune = "==0.8.4" +numpy = "^1.24.2" +orderedset = "^2.0.3" +phonenumbers = "^8.13.8" +pycparser = "^2.21" +python-dateutil = "^2.8.2" +python-json-logger = "^2.0.7" +pytz = "^2023.3" +pyyaml = "^6.0" +redis = "^5.0.1" +regex = "^2023.10.3" +requests = "^2.31.0" +s3transfer = "^0.7.0" +shapely = "^2.0.1" +six = "^1.16.0" +smartypants = "^2.0.1" +urllib3 = "^1.26.18" +webencodings = "^0.5.1" +werkzeug = "^3.0.1" [package.source] type = "git" url = "https://github.com/GSA/notifications-utils.git" -reference = "main" -resolved_reference = "5eadd38702fd187fd2954a5c763314b9b2446bea" +reference = "HEAD" +resolved_reference = "e8154e0981166b7085638e17503ec169b4c5cf62" [[package]] name = "numpy" @@ -3059,13 +3164,13 @@ files = [ [[package]] name = "pytest" -version = "7.4.2" +version = "7.4.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, - {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] @@ -3116,13 +3221,13 @@ test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] [[package]] name = "pytest-mock" -version = "3.11.1" +version = "3.12.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, + {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, + {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, ] [package.dependencies] @@ -3395,13 +3500,13 @@ full = ["numpy"] [[package]] name = "redis" -version = "5.0.0" +version = "5.0.1" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-5.0.0-py3-none-any.whl", hash = "sha256:06570d0b2d84d46c21defc550afbaada381af82f5b83e5b3777600e05d8e2ed0"}, - {file = "redis-5.0.0.tar.gz", hash = "sha256:5cea6c0d335c9a7332a460ed8729ceabb4d0c489c7285b0a86dbbf8a017bd120"}, + {file = "redis-5.0.1-py3-none-any.whl", hash = "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f"}, + {file = "redis-5.0.1.tar.gz", hash = "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"}, ] [package.dependencies] @@ -3411,6 +3516,103 @@ async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2 hiredis = ["hiredis (>=1.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] +[[package]] +name = "regex" +version = "2023.10.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +files = [ + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, +] + [[package]] name = "requests" version = "2.31.0" @@ -4270,5 +4472,5 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" -python-versions = "^3.9" -content-hash = "3a9174f44eaffc65224e48815e2d8961f25a34f228fec9d663c3c75c0ddf24ab" +python-versions = ">=3.9,<3.12" +content-hash = "6bdd49370f101f16f1a0d01f23f63696aa4a0980d8f65bd319036e7555112622" diff --git a/pyproject.toml b/pyproject.toml index f8b0bba22..23f10d0ea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] -python = "^3.9" +python = ">=3.9,<3.12" alembic = "==1.12.0" amqp = "==5.1.1" arrow = "==1.2.3" @@ -26,7 +26,7 @@ cachetools = "==5.3.1" celery = {version = "==5.2.7", extras = ["redis"]} certifi = ">=2022.12.7" cffi = "==1.16.0" -charset-normalizer = "==2.0.12" +charset-normalizer = "^3.1.0" click = "==8.1.6" click-datetime = "==0.2" click-didyoumean = "==0.3.0" @@ -54,7 +54,7 @@ marshmallow = "==3.20.1" marshmallow-sqlalchemy = "==0.29.0" newrelic = "*" notifications-python-client = "==8.0.1" -notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true, branch = "main"} +notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true} oscrypto = "==1.3.0" packaging = "==23.1" poetry-dotenv-plugin = "==0.2.0" @@ -78,9 +78,9 @@ isort = "^5.12.0" jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} moto = "==4.2.6" pip-audit = "*" -pytest = "^7.4.2" +pytest = "^7.4.3" pytest-env = "^1.0.1" -pytest-mock = "^3.11.1" +pytest-mock = "^3.12.0" pytest-cov = "^4.1.0" pytest-xdist = "^3.3.1" radon = "^6.0.1" From 338977fd88b0f5f874e5b669e4368f507d790074 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 16:58:26 +0000 Subject: [PATCH 10/31] Bump pytest-env from 1.0.1 to 1.1.1 Bumps [pytest-env](https://github.com/pytest-dev/pytest-env) from 1.0.1 to 1.1.1. - [Release notes](https://github.com/pytest-dev/pytest-env/releases) - [Commits](https://github.com/pytest-dev/pytest-env/compare/1.0.1...1.1.1) --- updated-dependencies: - dependency-name: pytest-env dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 27 +++++++++++++++++++-------- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 15b0abcd8..0667ade19 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2118,6 +2118,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -3204,20 +3214,21 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale [[package]] name = "pytest-env" -version = "1.0.1" -description = "py.test plugin that allows you to add environment variables." +version = "1.1.1" +description = "pytest plugin that allows you to add environment variables." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest_env-1.0.1-py3-none-any.whl", hash = "sha256:e8faf927c6fcdbbc8fe3317506acc116713c9708d01652a0fd945f9ae27b71aa"}, - {file = "pytest_env-1.0.1.tar.gz", hash = "sha256:603fe216e8e03a5d134989cb41317c59aabef013d2250c71b864ab0798fbe6f6"}, + {file = "pytest_env-1.1.1-py3-none-any.whl", hash = "sha256:2b71b37c6810f28bec790a7b373c777af87352b3a359b3de0edb9d24df5cf8b3"}, + {file = "pytest_env-1.1.1.tar.gz", hash = "sha256:1efb8acce1f6431196150f3b30673443ff05a6fabff64539a9495cd2248adf9e"}, ] [package.dependencies] -pytest = ">=7.3.1" +pytest = ">=7.4.3" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "pytest-mock (>=3.12)"] [[package]] name = "pytest-mock" @@ -4473,4 +4484,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "6bdd49370f101f16f1a0d01f23f63696aa4a0980d8f65bd319036e7555112622" +content-hash = "aa3f1cd06a660f499435886748987d86b585229f096d9ec64fe78cf8ec8036ec" diff --git a/pyproject.toml b/pyproject.toml index 23f10d0ea..b991fbe09 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -79,7 +79,7 @@ jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} moto = "==4.2.6" pip-audit = "*" pytest = "^7.4.3" -pytest-env = "^1.0.1" +pytest-env = "^1.1.1" pytest-mock = "^3.12.0" pytest-cov = "^4.1.0" pytest-xdist = "^3.3.1" From ab87098cac817b582addec88297e86cce105b786 Mon Sep 17 00:00:00 2001 From: Steven Reilly Date: Thu, 2 Nov 2023 10:24:48 -0400 Subject: [PATCH 11/31] mark 0006 as implemented --- docs/adrs/0006-use-for-dependency-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/adrs/0006-use-for-dependency-management.md b/docs/adrs/0006-use-for-dependency-management.md index 568fe9ba5..8f02aa9a6 100644 --- a/docs/adrs/0006-use-for-dependency-management.md +++ b/docs/adrs/0006-use-for-dependency-management.md @@ -4,7 +4,7 @@ Date: 2023-09-08 ### Status -Accepted +Implemented ### Context From dfbd8cbb5c10d8cf278bf3e7bff69d7bbc60c952 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:25:50 +0000 Subject: [PATCH 12/31] Bump psycopg2-binary from 2.9.3 to 2.9.9 Bumps [psycopg2-binary](https://github.com/psycopg/psycopg2) from 2.9.3 to 2.9.9. - [Changelog](https://github.com/psycopg/psycopg2/blob/master/NEWS) - [Commits](https://github.com/psycopg/psycopg2/commits/2.9.9) --- updated-dependencies: - dependency-name: psycopg2-binary dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- poetry.lock | 137 +++++++++++++++++++++++++++---------------------- pyproject.toml | 2 +- 2 files changed, 76 insertions(+), 63 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0667ade19..e75d5d724 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2942,70 +2942,83 @@ files = [ [[package]] name = "psycopg2-binary" -version = "2.9.3" +version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "psycopg2-binary-2.9.3.tar.gz", hash = "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f2534ab7dc7e776a263b463a16e189eb30e85ec9bbe1bff9e78dae802608932"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-win32.whl", hash = "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029"}, - {file = "psycopg2_binary-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b"}, - {file = "psycopg2_binary-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba"}, - {file = "psycopg2_binary-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e6aa71ae45f952a2205377773e76f4e3f27951df38e69a4c95440c779e013560"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-win32.whl", hash = "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce"}, - {file = "psycopg2_binary-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b3a24a1982ae56461cc24f6680604fffa2c1b818e9dc55680da038792e004d18"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"}, - {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"}, + {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win32.whl", hash = "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win32.whl", hash = "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, ] [[package]] @@ -4484,4 +4497,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "aa3f1cd06a660f499435886748987d86b585229f096d9ec64fe78cf8ec8036ec" +content-hash = "96614090c34644513a5b90edfb12ce8f7ebdae97b465a22c24053bb6f8b1169f" diff --git a/pyproject.toml b/pyproject.toml index b991fbe09..51b6fb452 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,7 +58,7 @@ notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", d oscrypto = "==1.3.0" packaging = "==23.1" poetry-dotenv-plugin = "==0.2.0" -psycopg2-binary = "==2.9.3" +psycopg2-binary = "==2.9.9" pyjwt = "==2.8.0" python-dotenv = "==1.0.0" sqlalchemy = "==1.4.40" From b1189964fad9565c0e3fead23355afd908f8885c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:38:15 +0000 Subject: [PATCH 13/31] Bump arrow from 1.2.3 to 1.3.0 Bumps [arrow](https://github.com/arrow-py/arrow) from 1.2.3 to 1.3.0. - [Release notes](https://github.com/arrow-py/arrow/releases) - [Changelog](https://github.com/arrow-py/arrow/blob/master/CHANGELOG.rst) - [Commits](https://github.com/arrow-py/arrow/compare/1.2.3...1.3.0) --- updated-dependencies: - dependency-name: arrow dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 26 +++++++++++++++++++++----- pyproject.toml | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index e75d5d724..1c69eea57 100644 --- a/poetry.lock +++ b/poetry.lock @@ -157,17 +157,22 @@ vine = ">=5.0.0" [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] [package.dependencies] python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] name = "asn1crypto" @@ -4046,6 +4051,17 @@ files = [ {file = "trove_classifiers-2023.9.19-py3-none-any.whl", hash = "sha256:55460364fe248294386d4dfa5d16544ec930493ecc6bd1db07a0d50afb37018e"}, ] +[[package]] +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = "*" +files = [ + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, +] + [[package]] name = "types-pyyaml" version = "6.0.12.12" @@ -4497,4 +4513,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "96614090c34644513a5b90edfb12ce8f7ebdae97b465a22c24053bb6f8b1169f" +content-hash = "57920386647451091ac38f5ea01eb6b915f8473e1f03127e0a2fe759c39c0b78" diff --git a/pyproject.toml b/pyproject.toml index 51b6fb452..36e182c5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ readme = "README.md" python = ">=3.9,<3.12" alembic = "==1.12.0" amqp = "==5.1.1" -arrow = "==1.2.3" +arrow = "==1.3.0" asn1crypto = "==1.5.1" async-timeout = "==4.0.3" attrs = "==23.1.0" From 03a5aa6ea675e35dca3957800f507d14a5155faf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:54:21 +0000 Subject: [PATCH 14/31] Bump dnspython from 2.2.1 to 2.4.2 Bumps [dnspython](https://github.com/rthalley/dnspython) from 2.2.1 to 2.4.2. - [Release notes](https://github.com/rthalley/dnspython/releases) - [Changelog](https://github.com/rthalley/dnspython/blob/master/doc/whatsnew.rst) - [Commits](https://github.com/rthalley/dnspython/compare/v2.2.1...v2.4.2) --- updated-dependencies: - dependency-name: dnspython dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 18 +++++++++--------- pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1c69eea57..3104b18b3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1026,21 +1026,21 @@ files = [ [[package]] name = "dnspython" -version = "2.2.1" +version = "2.4.2" description = "DNS toolkit" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.8,<4.0" files = [ - {file = "dnspython-2.2.1-py3-none-any.whl", hash = "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f"}, - {file = "dnspython-2.2.1.tar.gz", hash = "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e"}, + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, ] [package.extras] -curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] -dnssec = ["cryptography (>=2.6,<37.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.10.0)"] +dnssec = ["cryptography (>=2.6,<42.0)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] +doq = ["aioquic (>=0.9.20)"] idna = ["idna (>=2.1,<4.0)"] -trio = ["trio (>=0.14,<0.20)"] +trio = ["trio (>=0.14,<0.23)"] wmi = ["wmi (>=1.5.1,<2.0.0)"] [[package]] @@ -4513,4 +4513,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "57920386647451091ac38f5ea01eb6b915f8473e1f03127e0a2fe759c39c0b78" +content-hash = "272f097f775eca90e3e6d69684ff1d82e8fb113c9ddad927163c81165711d16e" diff --git a/pyproject.toml b/pyproject.toml index 36e182c5f..57f975aa5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ click-repl = "==0.3.0" colorama = "==0.4.4" defusedxml = "==0.7.1" deprecated = "==1.2.14" -dnspython = "==2.2.1" +dnspython = "==2.4.2" docopt = "==0.6.2" docutils = "==0.16" eventlet = "==0.33.3" From 2883b93ba200eaba5bee743458a8c8c4a36b2c6e Mon Sep 17 00:00:00 2001 From: Steven Reilly Date: Thu, 2 Nov 2023 16:01:15 -0400 Subject: [PATCH 15/31] update 0002 for et instead of utc --- docs/adrs/0002-how-to-handle-timezones.md | 37 ++++++----------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/docs/adrs/0002-how-to-handle-timezones.md b/docs/adrs/0002-how-to-handle-timezones.md index 39612e957..2a0df5954 100644 --- a/docs/adrs/0002-how-to-handle-timezones.md +++ b/docs/adrs/0002-how-to-handle-timezones.md @@ -1,9 +1,9 @@ # TITLE: Determine How to Handle Timezones in US Notify -| CREATED DATE | LAST UPDATED | STATUS | AUTHOR | STAKEHOLDERS | +| CREATED DATE | LAST UPDATED | STATUS | AUTHOR | | :---: | :---: | :---: | :---: | :---: | -| 06/06/2023 | 06/15/2023 | Accepted | @terrazoon, @ccostino | @GSA/notify-contributors | +| 06/06/2023 | 11/02/2023 | Accepted | @terrazoon, @ccostino | ## CONTEXT AND PROBLEM STATEMENT @@ -106,15 +106,11 @@ Cons of converting parts of the frontend now: customization, if any. -## CHOSEN OPTION: Backend UTC, frontend UTC +## CHOSEN OPTION: Backend UTC, frontend explicitly ET After talking through each of these options together as a team, we have decided to move forward with converting the backend to UTC fully and pairing that work -with displaying UTC in the frontend where need be. - -@terrazoon had an [open PR](https://github.com/GSA/notifications-api/pull/272) -with most of the work already accounted for, and explained the rationale for -making the change based on previous work and project experience. +with displaying ET in the frontend where need be. Multiple team members also spoke about the benefits of storing, processing, and managaging timezones as only UTC in the backend of the system and that it's @@ -122,25 +118,11 @@ worth the additional work to implement. The challenges inherent in trying to manage timezones directly are too many and greatly increase the risk of new bugs and undesired behavior and side-effects being introduced into the system. - -### Consequences - -- Positive - - Work was already partially complete for the backend adjustment. - - Consistent handling of timezones with just UTC across the system in the - backend. - - Provides support to adjust the frontend and other clients as desired going - forward. - -- Negative - - The additional work includes updating tests to make sure they all continue - to work properly. - - User testing will also have to be conducted to account for both the app - still functioning properly and noting where in the UI/frontend things will - need to change. +Previously, using UTC in the UI as well proved that UTC is unclear to nearly all +users. ET is a more understandable and expected default. -## VALIDATION AND NEXT STEPS +## NEXT STEPS With the decision to move the backend to UTC, the following actions need to be taken: @@ -157,9 +139,8 @@ taken: We also need to update the frontend to account for these changes. This will be done in two parts: -1. We'll update the UI to make sure everything reflects UTC where necessary for - any timzone displays. This work will be tracked in this issue: - https://github.com/GSA/notifications-admin/issues/525 +1. We'll update the UI to make sure everything reflects ET where necessary for + any timzone displays. 1. We need to create an ADR for future frontend work for how we'd like to handle timezones in the UI going forward. This is currently noted in this issue: From a346a734fc97149e0475821420b8bca7ad9c3bb0 Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Thu, 21 Sep 2023 13:26:27 -0600 Subject: [PATCH 16/31] Removed/replaced retention redis count with notification count from db call --- app/dao/notifications_dao.py | 4 + app/notifications/process_notifications.py | 14 +- app/notifications/validators.py | 11 +- app/service/statistics.py | 23 +-- .../notification_dao/test_notification_dao.py | 10 + .../test_process_notification.py | 189 +++++++++--------- tests/app/notifications/test_validators.py | 24 ++- 7 files changed, 134 insertions(+), 141 deletions(-) diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index aa8ebb880..5a3fde63b 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -190,6 +190,10 @@ def dao_get_notification_count_for_job_id(*, job_id): return Notification.query.filter_by(job_id=job_id).count() +def dao_get_notification_count_for_service(*, service): + return Notification.query.filter_by(service_id=service.id).count() + + def get_notification_with_personalisation(service_id, notification_id, key_type): filter_dict = {"service_id": service_id, "id": notification_id} if key_type: diff --git a/app/notifications/process_notifications.py b/app/notifications/process_notifications.py index 0aff166f3..08b8963a5 100644 --- a/app/notifications/process_notifications.py +++ b/app/notifications/process_notifications.py @@ -2,7 +2,6 @@ import uuid from datetime import datetime from flask import current_app -from notifications_utils.clients import redis from notifications_utils.recipients import ( format_email_address, get_international_phone_info, @@ -10,7 +9,6 @@ from notifications_utils.recipients import ( ) from notifications_utils.template import PlainTextEmailTemplate, SMSMessageTemplate -from app import redis_store from app.celery import provider_tasks from app.config import QueueNames from app.dao.notifications_dao import ( @@ -141,17 +139,7 @@ def persist_notification( service.id ) ) - total_key = redis.daily_total_cache_key() - if redis_store.get(total_key) is None: - current_app.logger.info("Redis daily total cache key does not exist") - redis_store.set(total_key, 1, ex=86400) - current_app.logger.info("Set redis daily total cache key to 1") - else: - current_app.logger.info("Redis total limit cache key does exist") - redis_store.incr(total_key) - current_app.logger.info( - f"Redis total limit cache key has been incremented to {redis_store.get(total_key)}" - ) + current_app.logger.info( "{} {} created at {}".format( notification_type, notification_id, notification_created_at diff --git a/app/notifications/validators.py b/app/notifications/validators.py index e6c164080..463a4ceb1 100644 --- a/app/notifications/validators.py +++ b/app/notifications/validators.py @@ -1,7 +1,6 @@ from flask import current_app from notifications_utils import SMS_CHAR_COUNT_LIMIT from notifications_utils.clients.redis import ( - daily_total_cache_key, rate_limit_cache_key, total_limit_cache_key, ) @@ -13,6 +12,7 @@ from notifications_utils.recipients import ( from sqlalchemy.orm.exc import NoResultFound from app import redis_store +from app.dao.notifications_dao import dao_get_notification_count_for_service from app.dao.service_email_reply_to_dao import dao_get_reply_to_by_id from app.dao.service_sms_sender_dao import dao_get_service_sms_senders_by_id from app.models import ( @@ -69,15 +69,10 @@ def check_service_over_total_message_limit(key_type, service): def check_application_over_retention_limit(key_type, service): if key_type == KEY_TYPE_TEST or not current_app.config["REDIS_ENABLED"]: return 0 + total_stats = dao_get_notification_count_for_service(service=service) - cache_key = daily_total_cache_key() daily_message_limit = current_app.config["DAILY_MESSAGE_LIMIT"] - total_stats = redis_store.get(cache_key) - if total_stats is None: - # first message of the day, set the cache to 0 and the expiry to 24 hours - total_stats = 0 - redis_store.set(cache_key, total_stats, ex=86400) - return total_stats + if int(total_stats) >= daily_message_limit: current_app.logger.info( "while sending for service {}, daily message limit of {} reached".format( diff --git a/app/service/statistics.py b/app/service/statistics.py index c61a3c55f..9d20c5f7f 100644 --- a/app/service/statistics.py +++ b/app/service/statistics.py @@ -1,8 +1,7 @@ from collections import defaultdict -from datetime import datetime from app.dao.date_util import get_months_for_financial_year -from app.models import NOTIFICATION_STATUS_TYPES, NOTIFICATION_TYPES +from app.models import NOTIFICATION_TYPES def format_statistics(statistics): @@ -55,26 +54,6 @@ def create_stats_dict(): return stats_dict -def format_monthly_template_notification_stats(year, rows): - stats = { - datetime.strftime(date, "%Y-%m"): {} - for date in [datetime(year, month, 1) for month in range(4, 13)] - + [datetime(year + 1, month, 1) for month in range(1, 4)] - } - - for row in rows: - formatted_month = row.month.strftime("%Y-%m") - if str(row.template_id) not in stats[formatted_month]: - stats[formatted_month][str(row.template_id)] = { - "name": row.name, - "type": row.template_type, - "counts": dict.fromkeys(NOTIFICATION_STATUS_TYPES, 0), - } - stats[formatted_month][str(row.template_id)]["counts"][row.status] += row.count - - return stats - - def create_zeroed_stats_dicts(): return { template_type: {status: 0 for status in ("requested", "delivered", "failed")} diff --git a/tests/app/dao/notification_dao/test_notification_dao.py b/tests/app/dao/notification_dao/test_notification_dao.py index e854b8e8f..92b386d49 100644 --- a/tests/app/dao/notification_dao/test_notification_dao.py +++ b/tests/app/dao/notification_dao/test_notification_dao.py @@ -13,6 +13,7 @@ from app.dao.notifications_dao import ( dao_get_last_notification_added_for_job_id, dao_get_notification_by_reference, dao_get_notification_count_for_job_id, + dao_get_notification_count_for_service, dao_get_notification_history_by_reference, dao_get_notifications_by_recipient_or_reference, dao_timeout_notifications, @@ -595,6 +596,15 @@ def test_dao_get_notification_count_for_job_id(notify_db_session): assert dao_get_notification_count_for_job_id(job_id=job.id) == 3 +def test_dao_get_notification_count_for_service(notify_db_session): + service = create_service() + template = create_template(service) + + create_notification(template) + + assert dao_get_notification_count_for_service(service=service) == 1 + + def test_dao_get_notification_count_for_job_id_returns_zero_for_no_notifications_for_job( notify_db_session, ): diff --git a/tests/app/notifications/test_process_notification.py b/tests/app/notifications/test_process_notification.py index 3eca8c8ec..dc8c13202 100644 --- a/tests/app/notifications/test_process_notification.py +++ b/tests/app/notifications/test_process_notification.py @@ -1,7 +1,6 @@ import datetime import uuid from collections import namedtuple -from unittest.mock import call import pytest from boto3.exceptions import Boto3Error @@ -21,8 +20,7 @@ from app.notifications.process_notifications import ( ) from app.serialised_models import SerialisedTemplate from app.v2.errors import BadRequestError -from tests.app.db import create_api_key, create_service, create_template -from tests.conftest import set_config +from tests.app.db import create_service, create_template def test_create_content_for_notification_passes(sample_email_template): @@ -189,103 +187,102 @@ def test_persist_notification_cache_is_not_incremented_on_failure_to_create_noti mocked_redis.assert_not_called() -def test_persist_notification_does_not_increment_cache_if_test_key( - notify_api, sample_template, sample_job, mocker, sample_test_api_key -): - daily_limit_cache = mocker.patch( - "app.notifications.process_notifications.redis_store.incr" - ) - - assert Notification.query.count() == 0 - assert NotificationHistory.query.count() == 0 - with set_config(notify_api, "REDIS_ENABLED", True): - persist_notification( - template_id=sample_template.id, - template_version=sample_template.version, - recipient="+447111111111", - service=sample_template.service, - personalisation={}, - notification_type="sms", - api_key_id=sample_test_api_key.id, - key_type=sample_test_api_key.key_type, - job_id=sample_job.id, - job_row_number=100, - reference="ref", - ) - - assert Notification.query.count() == 1 - - assert not daily_limit_cache.called +# def test_persist_notification_does_not_increment_cache_if_test_key( +# notify_api, sample_template, sample_job, mocker, sample_test_api_key +# ): +# mocker.patch( +# "app.notifications.process_notifications.dao_get_notification_count_for_service", +# return_value=1, +# ) +# +# assert Notification.query.count() == 0 +# assert NotificationHistory.query.count() == 0 +# with set_config(notify_api, "REDIS_ENABLED", True): +# persist_notification( +# template_id=sample_template.id, +# template_version=sample_template.version, +# recipient="+447111111111", +# service=sample_template.service, +# personalisation={}, +# notification_type="sms", +# api_key_id=sample_test_api_key.id, +# key_type=sample_test_api_key.key_type, +# job_id=sample_job.id, +# job_row_number=100, +# reference="ref", +# ) +# +# assert Notification.query.count() == 1 -@pytest.mark.parametrize("restricted_service", [True, False]) -@freeze_time("2016-01-01 11:09:00.061258") -def test_persist_notification_increments_cache_for_trial_or_live_service( - notify_api, notify_db_session, mocker, restricted_service -): - service = create_service(restricted=restricted_service) - template = create_template(service=service) - api_key = create_api_key(service=service) - mocker.patch( - "app.notifications.process_notifications.redis_store.get", return_value=1 - ) - mock_incr = mocker.patch("app.notifications.process_notifications.redis_store.incr") - with set_config(notify_api, "REDIS_ENABLED", True): - persist_notification( - template_id=template.id, - template_version=template.version, - recipient="+447111111122", - service=template.service, - personalisation={}, - notification_type="sms", - api_key_id=api_key.id, - key_type=api_key.key_type, - reference="ref2", - ) - - assert mock_incr.call_count == 1 - mock_incr.assert_has_calls( - [ - # call(str(service.id) + "-2016-01-01-count", ), - call( - "2016-01-01-total", - ) - ] - ) +# @pytest.mark.parametrize("restricted_service", [True, False]) +# @freeze_time("2016-01-01 11:09:00.061258") +# def test_persist_notification_increments_cache_for_trial_or_live_service( +# notify_api, notify_db_session, mocker, restricted_service +# ): +# service = create_service(restricted=restricted_service) +# template = create_template(service=service) +# api_key = create_api_key(service=service) +# mocker.patch( +# "app.notifications.process_notifications.redis_store.get", return_value=1 +# ) +# mock_incr = mocker.patch("app.notifications.process_notifications.redis_store.incr") +# with set_config(notify_api, "REDIS_ENABLED", True): +# persist_notification( +# template_id=template.id, +# template_version=template.version, +# recipient="+447111111122", +# service=template.service, +# personalisation={}, +# notification_type="sms", +# api_key_id=api_key.id, +# key_type=api_key.key_type, +# reference="ref2", +# ) +# +# assert mock_incr.call_count == 1 +# mock_incr.assert_has_calls( +# [ +# # call(str(service.id) + "-2016-01-01-count", ), +# call( +# "2016-01-01-total", +# ) +# ] +# ) -@pytest.mark.parametrize("restricted_service", [True, False]) -@freeze_time("2016-01-01 11:09:00.061258") -def test_persist_notification_sets_daily_limit_cache_if_one_does_not_exists( - notify_api, notify_db_session, mocker, restricted_service -): - service = create_service(restricted=restricted_service) - template = create_template(service=service) - api_key = create_api_key(service=service) - mocker.patch( - "app.notifications.process_notifications.redis_store.get", return_value=None - ) - mock_set = mocker.patch("app.notifications.process_notifications.redis_store.set") - with set_config(notify_api, "REDIS_ENABLED", True): - persist_notification( - template_id=template.id, - template_version=template.version, - recipient="+447111111122", - service=template.service, - personalisation={}, - notification_type="sms", - api_key_id=api_key.id, - key_type=api_key.key_type, - reference="ref2", - ) - - assert mock_set.call_count == 1 - mock_set.assert_has_calls( - [ - # call(str(service.id) + "-2016-01-01-count", 1, ex=86400), - call("2016-01-01-total", 1, ex=86400) - ] - ) +# @pytest.mark.parametrize("restricted_service", [True, False]) +# @freeze_time("2016-01-01 11:09:00.061258") +# def test_persist_notification_sets_daily_limit_cache_if_one_does_not_exists( +# notify_api, notify_db_session, mocker, restricted_service +# ): +# service = create_service(restricted=restricted_service) +# template = create_template(service=service) +# api_key = create_api_key(service=service) +# mocker.patch( +# "app.notifications.process_notifications.redis_store.get", return_value=None +# ) +# mock_set = mocker.patch("app.notifications.process_notifications.redis_store.set") +# with set_config(notify_api, "REDIS_ENABLED", True): +# persist_notification( +# template_id=template.id, +# template_version=template.version, +# recipient="+447111111122", +# service=template.service, +# personalisation={}, +# notification_type="sms", +# api_key_id=api_key.id, +# key_type=api_key.key_type, +# reference="ref2", +# ) +# +# assert mock_set.call_count == 1 +# mock_set.assert_has_calls( +# [ +# # call(str(service.id) + "-2016-01-01-count", 1, ex=86400), +# call("2016-01-01-total", 1, ex=86400) +# ] +# ) @pytest.mark.parametrize( diff --git a/tests/app/notifications/test_validators.py b/tests/app/notifications/test_validators.py index 5ee731266..5cef7bb66 100644 --- a/tests/app/notifications/test_validators.py +++ b/tests/app/notifications/test_validators.py @@ -55,11 +55,31 @@ def enable_redis(notify_api): @pytest.mark.parametrize("key_type", ["team", "normal"]) -def test_check_service_message_limit_over_total_limit_fails( +def test_check_service_over_total_message_limit_fails( key_type, mocker, notify_db_session ): service = create_service() - mocker.patch("app.redis_store.get", return_value="5001") + mocker.patch( + "app.redis_store.get", + return_value="250001", + ) + + with pytest.raises(TotalRequestsError) as e: + check_service_over_total_message_limit(key_type, service) + assert e.value.status_code == 429 + assert e.value.message == "Exceeded total application limits (250000) for today" + assert e.value.fields == [] + + +@pytest.mark.parametrize("key_type", ["team", "normal"]) +def test_check_application_over_retention_limit_fails( + key_type, mocker, notify_db_session +): + service = create_service() + mocker.patch( + "app.notifications.validators.dao_get_notification_count_for_service", + return_value="5001", + ) with pytest.raises(TotalRequestsError) as e: check_application_over_retention_limit(key_type, service) From 1db57c289a6dd67b96c7790b81488b8514156eb0 Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Thu, 21 Sep 2023 13:40:27 -0600 Subject: [PATCH 17/31] Removed tests related to daily total key --- .../test_process_notification.py | 98 ------------------- 1 file changed, 98 deletions(-) diff --git a/tests/app/notifications/test_process_notification.py b/tests/app/notifications/test_process_notification.py index dc8c13202..b68e4503d 100644 --- a/tests/app/notifications/test_process_notification.py +++ b/tests/app/notifications/test_process_notification.py @@ -187,104 +187,6 @@ def test_persist_notification_cache_is_not_incremented_on_failure_to_create_noti mocked_redis.assert_not_called() -# def test_persist_notification_does_not_increment_cache_if_test_key( -# notify_api, sample_template, sample_job, mocker, sample_test_api_key -# ): -# mocker.patch( -# "app.notifications.process_notifications.dao_get_notification_count_for_service", -# return_value=1, -# ) -# -# assert Notification.query.count() == 0 -# assert NotificationHistory.query.count() == 0 -# with set_config(notify_api, "REDIS_ENABLED", True): -# persist_notification( -# template_id=sample_template.id, -# template_version=sample_template.version, -# recipient="+447111111111", -# service=sample_template.service, -# personalisation={}, -# notification_type="sms", -# api_key_id=sample_test_api_key.id, -# key_type=sample_test_api_key.key_type, -# job_id=sample_job.id, -# job_row_number=100, -# reference="ref", -# ) -# -# assert Notification.query.count() == 1 - - -# @pytest.mark.parametrize("restricted_service", [True, False]) -# @freeze_time("2016-01-01 11:09:00.061258") -# def test_persist_notification_increments_cache_for_trial_or_live_service( -# notify_api, notify_db_session, mocker, restricted_service -# ): -# service = create_service(restricted=restricted_service) -# template = create_template(service=service) -# api_key = create_api_key(service=service) -# mocker.patch( -# "app.notifications.process_notifications.redis_store.get", return_value=1 -# ) -# mock_incr = mocker.patch("app.notifications.process_notifications.redis_store.incr") -# with set_config(notify_api, "REDIS_ENABLED", True): -# persist_notification( -# template_id=template.id, -# template_version=template.version, -# recipient="+447111111122", -# service=template.service, -# personalisation={}, -# notification_type="sms", -# api_key_id=api_key.id, -# key_type=api_key.key_type, -# reference="ref2", -# ) -# -# assert mock_incr.call_count == 1 -# mock_incr.assert_has_calls( -# [ -# # call(str(service.id) + "-2016-01-01-count", ), -# call( -# "2016-01-01-total", -# ) -# ] -# ) - - -# @pytest.mark.parametrize("restricted_service", [True, False]) -# @freeze_time("2016-01-01 11:09:00.061258") -# def test_persist_notification_sets_daily_limit_cache_if_one_does_not_exists( -# notify_api, notify_db_session, mocker, restricted_service -# ): -# service = create_service(restricted=restricted_service) -# template = create_template(service=service) -# api_key = create_api_key(service=service) -# mocker.patch( -# "app.notifications.process_notifications.redis_store.get", return_value=None -# ) -# mock_set = mocker.patch("app.notifications.process_notifications.redis_store.set") -# with set_config(notify_api, "REDIS_ENABLED", True): -# persist_notification( -# template_id=template.id, -# template_version=template.version, -# recipient="+447111111122", -# service=template.service, -# personalisation={}, -# notification_type="sms", -# api_key_id=api_key.id, -# key_type=api_key.key_type, -# reference="ref2", -# ) -# -# assert mock_set.call_count == 1 -# mock_set.assert_has_calls( -# [ -# # call(str(service.id) + "-2016-01-01-count", 1, ex=86400), -# call("2016-01-01-total", 1, ex=86400) -# ] -# ) - - @pytest.mark.parametrize( ("requested_queue, notification_type, key_type, expected_queue, expected_task"), [ From 0dd862f9362e308483827158e1d3b6c27e0725e9 Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Fri, 22 Sep 2023 09:57:18 -0600 Subject: [PATCH 18/31] Revert removal of unneeded code --- app/service/statistics.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/service/statistics.py b/app/service/statistics.py index 9d20c5f7f..c61a3c55f 100644 --- a/app/service/statistics.py +++ b/app/service/statistics.py @@ -1,7 +1,8 @@ from collections import defaultdict +from datetime import datetime from app.dao.date_util import get_months_for_financial_year -from app.models import NOTIFICATION_TYPES +from app.models import NOTIFICATION_STATUS_TYPES, NOTIFICATION_TYPES def format_statistics(statistics): @@ -54,6 +55,26 @@ def create_stats_dict(): return stats_dict +def format_monthly_template_notification_stats(year, rows): + stats = { + datetime.strftime(date, "%Y-%m"): {} + for date in [datetime(year, month, 1) for month in range(4, 13)] + + [datetime(year + 1, month, 1) for month in range(1, 4)] + } + + for row in rows: + formatted_month = row.month.strftime("%Y-%m") + if str(row.template_id) not in stats[formatted_month]: + stats[formatted_month][str(row.template_id)] = { + "name": row.name, + "type": row.template_type, + "counts": dict.fromkeys(NOTIFICATION_STATUS_TYPES, 0), + } + stats[formatted_month][str(row.template_id)]["counts"][row.status] += row.count + + return stats + + def create_zeroed_stats_dicts(): return { template_type: {status: 0 for status in ("requested", "delivered", "failed")} From c247891c97ea3ee0c707eaf47b0e6b02287e089d Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Wed, 27 Sep 2023 11:32:39 -0600 Subject: [PATCH 19/31] Add initial steps to call api for count --- app/dao/notifications_dao.py | 4 +++- app/service/rest.py | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index 5a3fde63b..8d6b7a21a 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -191,7 +191,9 @@ def dao_get_notification_count_for_job_id(*, job_id): def dao_get_notification_count_for_service(*, service): - return Notification.query.filter_by(service_id=service.id).count() + count = Notification.query.filter_by(service_id=service.id).count() + print(count) + return count def get_notification_with_personalisation(service_id, notification_id, key_type): diff --git a/app/service/rest.py b/app/service/rest.py index 91cf752af..81e1a6ed4 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -25,6 +25,7 @@ from app.dao.fact_notification_status_dao import ( fetch_stats_for_all_services_by_date_range, ) from app.dao.inbound_numbers_dao import dao_allocate_number_for_service +from app.dao.notifications_dao import dao_get_notification_count_for_service from app.dao.organization_dao import dao_get_organization_by_service_id from app.dao.service_data_retention_dao import ( fetch_service_data_retention, @@ -1037,3 +1038,9 @@ def check_if_reply_to_address_already_in_use(service_id, email_address): ), status_code=409, ) + + +@service_blueprint.route("//notification_count", methods=["GET"]) +def get_notification_count_for_job_id(service): + count = dao_get_notification_count_for_service(service=service) + return jsonify(count=count), 200 \ No newline at end of file From db7aa969cd0a4f2836d2426f1759f2bc853eafad Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Fri, 13 Oct 2023 14:07:10 -0600 Subject: [PATCH 20/31] Added api endpoint for count --- app/dao/notifications_dao.py | 4 ++-- app/service/rest.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index 8d6b7a21a..95167fff2 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -190,8 +190,8 @@ def dao_get_notification_count_for_job_id(*, job_id): return Notification.query.filter_by(job_id=job_id).count() -def dao_get_notification_count_for_service(*, service): - count = Notification.query.filter_by(service_id=service.id).count() +def dao_get_notification_count_for_service(*, service_id): + count = Notification.query.filter_by(service_id=service_id).count() print(count) return count diff --git a/app/service/rest.py b/app/service/rest.py index 81e1a6ed4..3c35dc183 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -1040,7 +1040,7 @@ def check_if_reply_to_address_already_in_use(service_id, email_address): ) -@service_blueprint.route("//notification_count", methods=["GET"]) -def get_notification_count_for_job_id(service): - count = dao_get_notification_count_for_service(service=service) +@service_blueprint.route("/service//notification-count", methods=["GET"]) +def get_notification_count_for_job_id(service_id): + count = dao_get_notification_count_for_service(service_id=service_id) return jsonify(count=count), 200 \ No newline at end of file From 32dca0f5e0ad59825694ca275e2826686e85e31c Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Mon, 23 Oct 2023 10:24:00 -0600 Subject: [PATCH 21/31] Add notification history and notification to count --- app/dao/notifications_dao.py | 7 ++++--- app/service/rest.py | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index 95167fff2..5d9dc2e33 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -191,9 +191,10 @@ def dao_get_notification_count_for_job_id(*, job_id): def dao_get_notification_count_for_service(*, service_id): - count = Notification.query.filter_by(service_id=service_id).count() - print(count) - return count + notification_count = Notification.query.filter_by(service_id=service_id).count() + notification_history_count = NotificationHistory.query.filter_by(service_id=service_id).count() + total_count = notification_count + notification_history_count + return total_count def get_notification_with_personalisation(service_id, notification_id, key_type): diff --git a/app/service/rest.py b/app/service/rest.py index 3c35dc183..a75f53b4f 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -1040,7 +1040,7 @@ def check_if_reply_to_address_already_in_use(service_id, email_address): ) -@service_blueprint.route("/service//notification-count", methods=["GET"]) -def get_notification_count_for_job_id(service_id): +@service_blueprint.route("//notification-count", methods=["GET"]) +def get_notification_count_for_service_id(service_id): count = dao_get_notification_count_for_service(service_id=service_id) return jsonify(count=count), 200 \ No newline at end of file From 9444310d4b2090bf54f4b29c8c124e8e0708d533 Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Mon, 23 Oct 2023 10:33:37 -0600 Subject: [PATCH 22/31] Fix linting/imports --- app/service/rest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/service/rest.py b/app/service/rest.py index a75f53b4f..b05763c3f 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -1043,4 +1043,4 @@ def check_if_reply_to_address_already_in_use(service_id, email_address): @service_blueprint.route("//notification-count", methods=["GET"]) def get_notification_count_for_service_id(service_id): count = dao_get_notification_count_for_service(service_id=service_id) - return jsonify(count=count), 200 \ No newline at end of file + return jsonify(count=count), 200 From 948bb17a6c292c2ddd39ec39b01f40721010e3de Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Fri, 27 Oct 2023 10:26:52 -0600 Subject: [PATCH 23/31] Removed history count from total count --- app/dao/notifications_dao.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/dao/notifications_dao.py b/app/dao/notifications_dao.py index 5d9dc2e33..2d5df12ee 100644 --- a/app/dao/notifications_dao.py +++ b/app/dao/notifications_dao.py @@ -192,9 +192,7 @@ def dao_get_notification_count_for_job_id(*, job_id): def dao_get_notification_count_for_service(*, service_id): notification_count = Notification.query.filter_by(service_id=service_id).count() - notification_history_count = NotificationHistory.query.filter_by(service_id=service_id).count() - total_count = notification_count + notification_history_count - return total_count + return notification_count def get_notification_with_personalisation(service_id, notification_id, key_type): From 67d38ef32db20060b5d30a4f62e1502838add70d Mon Sep 17 00:00:00 2001 From: Andrew Shumway Date: Fri, 27 Oct 2023 11:17:22 -0600 Subject: [PATCH 24/31] Fixed tests with appropriate parameters --- app/notifications/validators.py | 2 +- tests/app/dao/notification_dao/test_notification_dao.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/notifications/validators.py b/app/notifications/validators.py index 463a4ceb1..bb3e08c5d 100644 --- a/app/notifications/validators.py +++ b/app/notifications/validators.py @@ -69,7 +69,7 @@ def check_service_over_total_message_limit(key_type, service): def check_application_over_retention_limit(key_type, service): if key_type == KEY_TYPE_TEST or not current_app.config["REDIS_ENABLED"]: return 0 - total_stats = dao_get_notification_count_for_service(service=service) + total_stats = dao_get_notification_count_for_service(service_id=service.id) daily_message_limit = current_app.config["DAILY_MESSAGE_LIMIT"] diff --git a/tests/app/dao/notification_dao/test_notification_dao.py b/tests/app/dao/notification_dao/test_notification_dao.py index 92b386d49..babddda1b 100644 --- a/tests/app/dao/notification_dao/test_notification_dao.py +++ b/tests/app/dao/notification_dao/test_notification_dao.py @@ -602,7 +602,7 @@ def test_dao_get_notification_count_for_service(notify_db_session): create_notification(template) - assert dao_get_notification_count_for_service(service=service) == 1 + assert dao_get_notification_count_for_service(service_id=service.id) == 1 def test_dao_get_notification_count_for_job_id_returns_zero_for_no_notifications_for_job( From 8dac36cba4e045f31db0de9d9d3d67f764d6cf42 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Thu, 2 Nov 2023 17:25:05 -0400 Subject: [PATCH 25/31] Update notifications-utils This changeset updates the notificiations-utils library with the latest commits. Signed-off-by: Carlo Costino --- poetry.lock | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3104b18b3..153123c1a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2123,16 +2123,6 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -2555,7 +2545,7 @@ werkzeug = "^3.0.1" type = "git" url = "https://github.com/GSA/notifications-utils.git" reference = "HEAD" -resolved_reference = "e8154e0981166b7085638e17503ec169b4c5cf62" +resolved_reference = "6acc6bcb81e7b4c6944fc15efb98cf02316d4540" [[package]] name = "numpy" From 23f17b166c1aff7149c7830832647aae3a4f1b30 Mon Sep 17 00:00:00 2001 From: Carlo Costino Date: Thu, 2 Nov 2023 17:43:30 -0400 Subject: [PATCH 26/31] Updated notification retention limit validator test to account for the new 10K limit Signed-off-by: Carlo Costino --- tests/app/notifications/test_validators.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/app/notifications/test_validators.py b/tests/app/notifications/test_validators.py index 5cef7bb66..9643a0d0f 100644 --- a/tests/app/notifications/test_validators.py +++ b/tests/app/notifications/test_validators.py @@ -78,13 +78,13 @@ def test_check_application_over_retention_limit_fails( service = create_service() mocker.patch( "app.notifications.validators.dao_get_notification_count_for_service", - return_value="5001", + return_value="10001", ) with pytest.raises(TotalRequestsError) as e: check_application_over_retention_limit(key_type, service) assert e.value.status_code == 429 - assert e.value.message == "Exceeded total application limits (5000) for today" + assert e.value.message == "Exceeded total application limits (10000) for today" assert e.value.fields == [] From 8bcbc7d1187fc5cb0d0242dbc147f62ee611cfe3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:57:25 +0000 Subject: [PATCH 27/31] Bump click from 8.1.6 to 8.1.7 Bumps [click](https://github.com/pallets/click) from 8.1.6 to 8.1.7. - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.1.6...8.1.7) --- updated-dependencies: - dependency-name: click dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- poetry.lock | 18 ++++++++++++++---- pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 153123c1a..64b817b6a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -736,13 +736,13 @@ rapidfuzz = ">=2.2.0,<3.0.0" [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -2123,6 +2123,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -4503,4 +4513,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "272f097f775eca90e3e6d69684ff1d82e8fb113c9ddad927163c81165711d16e" +content-hash = "0520d4ef7e657c925efb6f5dd8d2a2fab29f78c8be5848ed73d4c24ed2ce8008" diff --git a/pyproject.toml b/pyproject.toml index 57f975aa5..a0e092018 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ celery = {version = "==5.2.7", extras = ["redis"]} certifi = ">=2022.12.7" cffi = "==1.16.0" charset-normalizer = "^3.1.0" -click = "==8.1.6" +click = "==8.1.7" click-datetime = "==0.2" click-didyoumean = "==0.3.0" click-plugins = "==1.1.1" From 8c0dc0212f26d2b4df50eff1fe8ca0e455707679 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 22:14:18 +0000 Subject: [PATCH 28/31] Bump pip from 23.2.1 to 23.3 Bumps [pip](https://github.com/pypa/pip) from 23.2.1 to 23.3. - [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/pip/compare/23.2.1...23.3) --- updated-dependencies: - dependency-name: pip dependency-type: indirect ... Signed-off-by: dependabot[bot] --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 64b817b6a..4a8d5c145 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2706,13 +2706,13 @@ files = [ [[package]] name = "pip" -version = "23.2.1" +version = "23.3" description = "The PyPA recommended tool for installing Python packages." optional = false python-versions = ">=3.7" files = [ - {file = "pip-23.2.1-py3-none-any.whl", hash = "sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be"}, - {file = "pip-23.2.1.tar.gz", hash = "sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"}, + {file = "pip-23.3-py3-none-any.whl", hash = "sha256:bc38bb52bc286514f8f7cb3a1ba5ed100b76aaef29b521d48574329331c5ae7b"}, + {file = "pip-23.3.tar.gz", hash = "sha256:bb7d4f69f488432e4e96394612f43ab43dd478d073ef7422604a570f7157561e"}, ] [[package]] From fd26d332aabd60e6cb66cc50ec3679b67c83c584 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 01:11:41 +0000 Subject: [PATCH 29/31] Bump moto from 4.2.6 to 4.2.7 Bumps [moto](https://github.com/getmoto/moto) from 4.2.6 to 4.2.7. - [Release notes](https://github.com/getmoto/moto/releases) - [Changelog](https://github.com/getmoto/moto/blob/master/CHANGELOG.md) - [Commits](https://github.com/getmoto/moto/compare/4.2.6...4.2.7) --- updated-dependencies: - dependency-name: moto dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- poetry.lock | 28 ++++++++++++++-------------- pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4a8d5c145..f489d00b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2253,13 +2253,13 @@ files = [ [[package]] name = "moto" -version = "4.2.6" +version = "4.2.7" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "moto-4.2.6-py2.py3-none-any.whl", hash = "sha256:20cd41f89b7fe363ef49b9ead787c9a1f3d560f4d0711b3767e7416694de1127"}, - {file = "moto-4.2.6.tar.gz", hash = "sha256:ce0a55d7e756c59a5a4392c7097aa5ca53e00aa2dd3f7000093356be15e7aef9"}, + {file = "moto-4.2.7-py2.py3-none-any.whl", hash = "sha256:3e0ef388900448485cd6eff18e9f7fcaa6cf4560b6fb536ba2e2e1278a5ecc59"}, + {file = "moto-4.2.7.tar.gz", hash = "sha256:1298006aaa6996b886658eb194cac0e3a5679c9fcce6cb13e741ccc5a7247abb"}, ] [package.dependencies] @@ -2274,29 +2274,29 @@ werkzeug = ">=0.5,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1" xmltodict = "*" [package.extras] -all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.2.8)", "py-partiql-parser (==0.4.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -apigateway = ["PyYAML (>=5.1)", "ecdsa (!=0.15)", "openapi-spec-validator (>=0.2.8)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] +all = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +apigateway = ["PyYAML (>=5.1)", "ecdsa (!=0.15)", "openapi-spec-validator (>=0.5.0)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] apigatewayv2 = ["PyYAML (>=5.1)"] appsync = ["graphql-core"] awslambda = ["docker (>=3.0.0)"] batch = ["docker (>=3.0.0)"] -cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.2.8)", "py-partiql-parser (==0.4.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] cognitoidp = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] ds = ["sshpubkeys (>=3.1.0)"] -dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.4.0)"] -dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.4.0)"] +dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.4.1)"] +dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.4.1)"] ebs = ["sshpubkeys (>=3.1.0)"] ec2 = ["sshpubkeys (>=3.1.0)"] efs = ["sshpubkeys (>=3.1.0)"] eks = ["sshpubkeys (>=3.1.0)"] glue = ["pyparsing (>=3.0.7)"] iotdata = ["jsondiff (>=1.1.2)"] -proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.2.8)", "py-partiql-parser (==0.4.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.2.8)", "py-partiql-parser (==0.4.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] +proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] route53resolver = ["sshpubkeys (>=3.1.0)"] -s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.4.0)"] -s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.4.0)"] -server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.2.8)", "py-partiql-parser (==0.4.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] +s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.4.1)"] +s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.4.1)"] +server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.4.1)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] ssm = ["PyYAML (>=5.1)"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] @@ -4513,4 +4513,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "0520d4ef7e657c925efb6f5dd8d2a2fab29f78c8be5848ed73d4c24ed2ce8008" +content-hash = "5d1e44154061ef029b156d22b9e28f3c274dde7f35c6ea888a264363edbaf247" diff --git a/pyproject.toml b/pyproject.toml index a0e092018..dfd4bd208 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -76,7 +76,7 @@ freezegun = "^1.2.2" honcho = "*" isort = "^5.12.0" jinja2-cli = {version = "==0.8.2", extras = ["yaml"]} -moto = "==4.2.6" +moto = "==4.2.7" pip-audit = "*" pytest = "^7.4.3" pytest-env = "^1.1.1" From 0278bf8c9064ac2ef35ec92b090a1796e78f2208 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 01:26:14 +0000 Subject: [PATCH 30/31] Bump notifications-python-client from 8.0.1 to 8.1.0 Bumps [notifications-python-client](https://github.com/alphagov/notifications-python-client) from 8.0.1 to 8.1.0. - [Changelog](https://github.com/alphagov/notifications-python-client/blob/main/CHANGELOG.md) - [Commits](https://github.com/alphagov/notifications-python-client/compare/8.0.1...8.1.0) --- updated-dependencies: - dependency-name: notifications-python-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index f489d00b6..2535f2811 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2488,12 +2488,12 @@ infinite-tracing = ["grpcio", "protobuf"] [[package]] name = "notifications-python-client" -version = "8.0.1" +version = "8.1.0" description = "Python API client for GOV.UK Notify." optional = false python-versions = ">=3.7" files = [ - {file = "notifications_python_client-8.0.1-py3-none-any.whl", hash = "sha256:e89f5ad7caf17065ede88a1c2270c32cc24de75843856e524a2336f952260b4c"}, + {file = "notifications_python_client-8.1.0-py3-none-any.whl", hash = "sha256:8aec1f7a4ba592fd699eae899df8ccca9ccafb614f47826c07b318ca903c9c13"}, ] [package.dependencies] @@ -4513,4 +4513,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "5d1e44154061ef029b156d22b9e28f3c274dde7f35c6ea888a264363edbaf247" +content-hash = "991d3f03daba0c8681fd062343fe87d8f165dc8eaa2f276b80d165d04d65377e" diff --git a/pyproject.toml b/pyproject.toml index dfd4bd208..98fa80055 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,7 @@ lxml = "==4.9.3" marshmallow = "==3.20.1" marshmallow-sqlalchemy = "==0.29.0" newrelic = "*" -notifications-python-client = "==8.0.1" +notifications-python-client = "==8.1.0" notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true} oscrypto = "==1.3.0" packaging = "==23.1" From 925f2d8218b0676649b4bd080b03fb711e15c6cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Nov 2023 01:38:59 +0000 Subject: [PATCH 31/31] Bump packaging from 23.1 to 23.2 Bumps [packaging](https://github.com/pypa/packaging) from 23.1 to 23.2. - [Release notes](https://github.com/pypa/packaging/releases) - [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pypa/packaging/compare/23.1...23.2) --- updated-dependencies: - dependency-name: packaging dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2535f2811..ce51f12fc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2648,13 +2648,13 @@ test = ["pytest"] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -4513,4 +4513,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "991d3f03daba0c8681fd062343fe87d8f165dc8eaa2f276b80d165d04d65377e" +content-hash = "33a526cbe27d2ed2d301dca8fadf22c71b365801ee80c810187ad08c8497b365" diff --git a/pyproject.toml b/pyproject.toml index 98fa80055..31d12dde6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,7 +56,7 @@ newrelic = "*" notifications-python-client = "==8.1.0" notifications-utils = {git = "https://github.com/GSA/notifications-utils.git", develop = true} oscrypto = "==1.3.0" -packaging = "==23.1" +packaging = "==23.2" poetry-dotenv-plugin = "==0.2.0" psycopg2-binary = "==2.9.9" pyjwt = "==2.8.0"