Compare commits

..

46 Commits

Author SHA1 Message Date
dependabot[bot]
03f28ca25a Bump bandit from 1.9.3 to 1.9.4 (#2239)
Bumps [bandit](https://github.com/PyCQA/bandit) from 1.9.3 to 1.9.4.
- [Release notes](https://github.com/PyCQA/bandit/releases)
- [Commits](https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4)

---
updated-dependencies:
- dependency-name: bandit
  dependency-version: 1.9.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 13:47:06 -05:00
dependabot[bot]
99f325f5fd Bump virtualenv from 20.38.0 to 21.0.0 (#2240)
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.38.0 to 21.0.0.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pypa/virtualenv/compare/20.38.0...21.0.0)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-version: 21.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 13:43:42 -05:00
dependabot[bot]
24294972c5 Bump isort from 7.0.0 to 8.0.0 (#2237)
Bumps [isort](https://github.com/PyCQA/isort) from 7.0.0 to 8.0.0.
- [Release notes](https://github.com/PyCQA/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PyCQA/isort/compare/7.0.0...8.0.0)

---
updated-dependencies:
- dependency-name: isort
  dependency-version: 8.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 17:10:43 +00:00
dependabot[bot]
ff2e8a1c17 Bump faker from 40.4.0 to 40.5.1 (#2235)
Bumps [faker](https://github.com/joke2k/faker) from 40.4.0 to 40.5.1.
- [Release notes](https://github.com/joke2k/faker/releases)
- [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md)
- [Commits](https://github.com/joke2k/faker/compare/v40.4.0...v40.5.1)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 40.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 17:02:19 +00:00
dependabot[bot]
d6c216c157 Bump newrelic from 11.4.0 to 11.5.0 (#2233)
Bumps [newrelic](https://github.com/newrelic/newrelic-python-agent) from 11.4.0 to 11.5.0.
- [Release notes](https://github.com/newrelic/newrelic-python-agent/releases)
- [Commits](https://github.com/newrelic/newrelic-python-agent/compare/v11.4.0...v11.5.0)

---
updated-dependencies:
- dependency-name: newrelic
  dependency-version: 11.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 16:53:52 +00:00
Alex Janousek
8420d602a2 Updaed poetry (#2238) 2026-02-25 13:02:45 -08:00
dependabot[bot]
9250b19fbf Bump flask from 3.1.2 to 3.1.3 (#2231)
Bumps [flask](https://github.com/pallets/flask) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/pallets/flask/releases)
- [Changelog](https://github.com/pallets/flask/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/flask/compare/3.1.2...3.1.3)

---
updated-dependencies:
- dependency-name: flask
  dependency-version: 3.1.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 13:34:52 -05:00
dependabot[bot]
b90e103d03 Bump filelock from 3.24.2 to 3.24.3 (#2232)
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.24.2 to 3.24.3.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.24.2...3.24.3)

---
updated-dependencies:
- dependency-name: filelock
  dependency-version: 3.24.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 13:32:48 -05:00
dependabot[bot]
dbebb24690 Bump regex from 2026.1.15 to 2026.2.19 (#2234)
Bumps [regex](https://github.com/mrabarnett/mrab-regex) from 2026.1.15 to 2026.2.19.
- [Changelog](https://github.com/mrabarnett/mrab-regex/blob/hg/changelog.txt)
- [Commits](https://github.com/mrabarnett/mrab-regex/compare/2026.1.15...2026.2.19)

---
updated-dependencies:
- dependency-name: regex
  dependency-version: 2026.2.19
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 13:28:38 -05:00
dependabot[bot]
e4c61ca897 Bump virtualenv from 20.37.0 to 20.38.0 (#2229)
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.37.0 to 20.38.0.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pypa/virtualenv/compare/20.37.0...20.38.0)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-version: 20.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 11:23:19 -05:00
dependabot[bot]
8b45b72e03 Bump virtualenv from 20.36.1 to 20.37.0 (#2226)
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.36.1 to 20.37.0.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pypa/virtualenv/commits)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-version: 20.37.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 08:49:54 -05:00
dependabot[bot]
5803215c9a Bump hypothesis from 6.151.8 to 6.151.9 (#2227)
Bumps [hypothesis](https://github.com/HypothesisWorks/hypothesis) from 6.151.8 to 6.151.9.
- [Release notes](https://github.com/HypothesisWorks/hypothesis/releases)
- [Commits](https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.151.8...hypothesis-python-6.151.9)

---
updated-dependencies:
- dependency-name: hypothesis
  dependency-version: 6.151.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 08:34:49 -05:00
dependabot[bot]
adede6f78b Bump pytest-env from 1.3.2 to 1.5.0 (#2228)
Bumps [pytest-env](https://github.com/pytest-dev/pytest-env) from 1.3.2 to 1.5.0.
- [Release notes](https://github.com/pytest-dev/pytest-env/releases)
- [Commits](https://github.com/pytest-dev/pytest-env/compare/1.3.2...1.5.0)

---
updated-dependencies:
- dependency-name: pytest-env
  dependency-version: 1.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 08:19:44 -05:00
dependabot[bot]
f51eb6c157 Bump hypothesis from 6.151.6 to 6.151.8 (#2224)
Bumps [hypothesis](https://github.com/HypothesisWorks/hypothesis) from 6.151.6 to 6.151.8.
- [Release notes](https://github.com/HypothesisWorks/hypothesis/releases)
- [Commits](https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.151.6...hypothesis-python-6.151.8)

---
updated-dependencies:
- dependency-name: hypothesis
  dependency-version: 6.151.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 11:54:39 -05:00
dependabot[bot]
914efac7e6 Bump filelock from 3.21.2 to 3.24.2 (#2225)
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.21.2 to 3.24.2.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.21.2...3.24.2)

---
updated-dependencies:
- dependency-name: filelock
  dependency-version: 3.24.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 11:49:35 -05:00
dependabot[bot]
05849703b8 Bump gunicorn from 25.0.3 to 25.1.0 (#2221)
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.3 to 25.1.0.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.3...25.1.0)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 15:38:20 -05:00
dependabot[bot]
e8ca918db0 Bump filelock from 3.21.0 to 3.21.2 (#2222)
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.21.0 to 3.21.2.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.21.0...3.21.2)

---
updated-dependencies:
- dependency-name: filelock
  dependency-version: 3.21.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 15:29:56 -05:00
dependabot[bot]
77976a9b06 Bump phonenumbers from 9.0.23 to 9.0.24 (#2223)
Bumps [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers) from 9.0.23 to 9.0.24.
- [Commits](https://github.com/daviddrysdale/python-phonenumbers/compare/v9.0.23...v9.0.24)

---
updated-dependencies:
- dependency-name: phonenumbers
  dependency-version: 9.0.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 15:21:31 -05:00
dependabot[bot]
7ad499eb97 Bump filelock from 3.20.3 to 3.21.0 (#2220)
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.20.3 to 3.21.0.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.20.3...3.21.0)

---
updated-dependencies:
- dependency-name: filelock
  dependency-version: 3.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 09:43:40 -05:00
dependabot[bot]
a99685a6a0 Bump cloudfoundry-client from 1.40.2 to 1.40.3 (#2216)
* Bump cloudfoundry-client from 1.40.2 to 1.40.3

Bumps [cloudfoundry-client](https://github.com/cloudfoundry-community/cf-python-client) from 1.40.2 to 1.40.3.
- [Commits](https://github.com/cloudfoundry-community/cf-python-client/compare/v1.40.2...v1.40.3)

---
updated-dependencies:
- dependency-name: cloudfoundry-client
  dependency-version: 1.40.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fixing security issues

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alex Janousek <alex.janousek@gsa.gov>
2026-02-12 15:52:54 +00:00
dependabot[bot]
4896e72306 Bump pytest-env from 1.2.0 to 1.3.0 (#2218)
Bumps [pytest-env](https://github.com/pytest-dev/pytest-env) from 1.2.0 to 1.3.0.
- [Release notes](https://github.com/pytest-dev/pytest-env/releases)
- [Commits](https://github.com/pytest-dev/pytest-env/compare/1.2.0...1.3.0)

---
updated-dependencies:
- dependency-name: pytest-env
  dependency-version: 1.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 15:08:21 +00:00
dependabot[bot]
09bc850e6b Bump cachetools from 7.0.0 to 7.0.1 (#2217)
Bumps [cachetools](https://github.com/tkem/cachetools) from 7.0.0 to 7.0.1.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v7.0.0...v7.0.1)

---
updated-dependencies:
- dependency-name: cachetools
  dependency-version: 7.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 14:59:13 +00:00
dependabot[bot]
27b37c7a5e Bump hypothesis from 6.151.5 to 6.151.6 (#2219)
Bumps [hypothesis](https://github.com/HypothesisWorks/hypothesis) from 6.151.5 to 6.151.6.
- [Release notes](https://github.com/HypothesisWorks/hypothesis/releases)
- [Commits](https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.151.5...hypothesis-python-6.151.6)

---
updated-dependencies:
- dependency-name: hypothesis
  dependency-version: 6.151.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 09:50:42 -05:00
dependabot[bot]
48beb45add Bump alembic from 1.18.3 to 1.18.4 (#2215)
Bumps [alembic](https://github.com/sqlalchemy/alembic) from 1.18.3 to 1.18.4.
- [Release notes](https://github.com/sqlalchemy/alembic/releases)
- [Changelog](https://github.com/sqlalchemy/alembic/blob/main/CHANGES)
- [Commits](https://github.com/sqlalchemy/alembic/commits)

---
updated-dependencies:
- dependency-name: alembic
  dependency-version: 1.18.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 14:17:53 +00:00
dependabot[bot]
049f52d9dc Bump cryptography from 46.0.4 to 46.0.5 (#2214)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.4 to 46.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.4...46.0.5)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 09:08:23 -05:00
dependabot[bot]
05a5e33dc3 Bump moto from 5.1.20 to 5.1.21 (#2210)
Bumps [moto](https://github.com/getmoto/moto) from 5.1.20 to 5.1.21.
- [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/5.1.20...5.1.21)

---
updated-dependencies:
- dependency-name: moto
  dependency-version: 5.1.21
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 16:25:41 +00:00
dependabot[bot]
fc5e356cad Bump setuptools from 81.0.0 to 82.0.0 (#2212)
Bumps [setuptools](https://github.com/pypa/setuptools) from 81.0.0 to 82.0.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v81.0.0...v82.0.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 82.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 16:16:58 +00:00
dependabot[bot]
de73d515ac Bump gunicorn from 25.0.1 to 25.0.3 (#2211)
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 25.0.1 to 25.0.3.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/25.0.1...25.0.3)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 16:07:55 +00:00
dependabot[bot]
f9322ecfa2 Bump faker from 40.1.2 to 40.4.0 (#2213)
Bumps [faker](https://github.com/joke2k/faker) from 40.1.2 to 40.4.0.
- [Release notes](https://github.com/joke2k/faker/releases)
- [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md)
- [Commits](https://github.com/joke2k/faker/compare/v40.1.2...v40.4.0)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 40.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 10:59:20 -05:00
dependabot[bot]
e516878565 Bump setuptools from 80.10.2 to 81.0.0 (#2209)
Bumps [setuptools](https://github.com/pypa/setuptools) from 80.10.2 to 81.0.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.10.2...v81.0.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 81.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 11:40:52 -05:00
dependabot[bot]
afe927728a Bump phonenumbers from 9.0.22 to 9.0.23 (#2206)
Bumps [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers) from 9.0.22 to 9.0.23.
- [Commits](https://github.com/daviddrysdale/python-phonenumbers/compare/v9.0.22...v9.0.23)

---
updated-dependencies:
- dependency-name: phonenumbers
  dependency-version: 9.0.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-06 14:17:16 +00:00
dependabot[bot]
e557f236f9 Bump marshmallow from 4.2.1 to 4.2.2 (#2207)
Bumps [marshmallow](https://github.com/marshmallow-code/marshmallow) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst)
- [Commits](https://github.com/marshmallow-code/marshmallow/compare/4.2.1...4.2.2)

---
updated-dependencies:
- dependency-name: marshmallow
  dependency-version: 4.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-06 09:08:42 -05:00
dependabot[bot]
7ff7263717 Bump hypothesis from 6.151.4 to 6.151.5 (#2205)
Bumps [hypothesis](https://github.com/HypothesisWorks/hypothesis) from 6.151.4 to 6.151.5.
- [Release notes](https://github.com/HypothesisWorks/hypothesis/releases)
- [Commits](https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.151.4...hypothesis-python-6.151.5)

---
updated-dependencies:
- dependency-name: hypothesis
  dependency-version: 6.151.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 09:58:52 -05:00
dependabot[bot]
b2bd1d52b2 Bump gunicorn from 24.1.1 to 25.0.1 (#2203)
Bumps [gunicorn](https://github.com/benoitc/gunicorn) from 24.1.1 to 25.0.1.
- [Release notes](https://github.com/benoitc/gunicorn/releases)
- [Commits](https://github.com/benoitc/gunicorn/compare/24.1.1...25.0.1)

---
updated-dependencies:
- dependency-name: gunicorn
  dependency-version: 25.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 14:52:29 +00:00
dependabot[bot]
38bce0a994 Bump numpy from 2.4.1 to 2.4.2 (#2202)
Bumps [numpy](https://github.com/numpy/numpy) from 2.4.1 to 2.4.2.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v2.4.1...v2.4.2)

---
updated-dependencies:
- dependency-name: numpy
  dependency-version: 2.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 14:38:18 +00:00
dependabot[bot]
f6e77c2546 Bump pip from 25.3 to 26.0 (#2201)
Bumps [pip](https://github.com/pypa/pip) from 25.3 to 26.0.
- [Changelog](https://github.com/pypa/pip/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/pip/compare/25.3...26.0)

---
updated-dependencies:
- dependency-name: pip
  dependency-version: '26.0'
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 09:33:43 -05:00
dependabot[bot]
2972678def Bump cachetools from 6.2.6 to 7.0.0 (#2204)
Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.6 to 7.0.0.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v6.2.6...v7.0.0)

---
updated-dependencies:
- dependency-name: cachetools
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 09:27:29 -05:00
dependabot[bot]
e625661796 Bump newrelic from 11.3.0 to 11.4.0 (#2200)
Bumps [newrelic](https://github.com/newrelic/newrelic-python-agent) from 11.3.0 to 11.4.0.
- [Release notes](https://github.com/newrelic/newrelic-python-agent/releases)
- [Commits](https://github.com/newrelic/newrelic-python-agent/compare/v11.3.0...v11.4.0)

---
updated-dependencies:
- dependency-name: newrelic
  dependency-version: 11.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 08:39:01 -05:00
dependabot[bot]
68f7bc3547 Bump alembic from 1.18.2 to 1.18.3 (#2198)
Bumps [alembic](https://github.com/sqlalchemy/alembic) from 1.18.2 to 1.18.3.
- [Release notes](https://github.com/sqlalchemy/alembic/releases)
- [Changelog](https://github.com/sqlalchemy/alembic/blob/main/CHANGES)
- [Commits](https://github.com/sqlalchemy/alembic/commits)

---
updated-dependencies:
- dependency-name: alembic
  dependency-version: 1.18.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-30 10:13:31 -05:00
dependabot[bot]
24ca958f30 Bump hypothesis from 6.151.2 to 6.151.3 (#2196)
Bumps [hypothesis](https://github.com/HypothesisWorks/hypothesis) from 6.151.2 to 6.151.3.
- [Release notes](https://github.com/HypothesisWorks/hypothesis/releases)
- [Commits](https://github.com/HypothesisWorks/hypothesis/compare/hypothesis-python-6.151.2...hypothesis-python-6.151.3)

---
updated-dependencies:
- dependency-name: hypothesis
  dependency-version: 6.151.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 11:46:52 +00:00
dependabot[bot]
746a891bc0 Bump cryptography from 46.0.3 to 46.0.4 (#2195)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.3 to 46.0.4.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.3...46.0.4)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 11:38:02 +00:00
dependabot[bot]
231d851969 Bump alembic from 1.18.1 to 1.18.2 (#2197)
Bumps [alembic](https://github.com/sqlalchemy/alembic) from 1.18.1 to 1.18.2.
- [Release notes](https://github.com/sqlalchemy/alembic/releases)
- [Changelog](https://github.com/sqlalchemy/alembic/blob/main/CHANGES)
- [Commits](https://github.com/sqlalchemy/alembic/commits)

---
updated-dependencies:
- dependency-name: alembic
  dependency-version: 1.18.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 06:29:21 -05:00
Kenneth Kehl
3741b4cccf Merge pull request #2193 from GSA/cleanup_debug
fix debug statement in scheduled tasks
2026-01-28 12:29:07 -08:00
dependabot[bot]
b88b75f20a Bump cachetools from 6.2.5 to 6.2.6 (#2194)
Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.5 to 6.2.6.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v6.2.5...v6.2.6)

---
updated-dependencies:
- dependency-name: cachetools
  dependency-version: 6.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-28 11:49:27 -05:00
dependabot[bot]
04d8e8fc48 Bump cachetools from 6.2.4 to 6.2.5 (#2192)
Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.4 to 6.2.5.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v6.2.4...v6.2.5)

---
updated-dependencies:
- dependency-name: cachetools
  dependency-version: 6.2.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-27 13:16:03 -05:00
Kenneth Kehl
0c10e1cdde fix debug statement in scheduled tasks 2026-01-27 07:33:54 -08:00
65 changed files with 627 additions and 853 deletions

View File

@@ -285,13 +285,11 @@ def process_delivery_receipts(self):
retry_count = self.request.retries
wait_time = 3600 * 2**retry_count
current_app.logger.exception(str(ex))
try:
raise self.retry(ex=ex, countdown=wait_time)
except self.MaxRetriesExceededError:
current_app.logger.error(
"Failed process delivery receipts after max retries"
f"Failed process delivery receipts after max retries with exception {str(ex)}"
)

View File

@@ -976,10 +976,8 @@ def dao_update_delivery_receipts(receipts, delivered):
db.session.execute(stmt)
db.session.commit()
elapsed_time = (time() * 1000) - start_time_millis
current_app.logger.info(
f"#loadtestperformance batch update query time: \
updated {len(receipts)} notification in {elapsed_time} ms"
)
current_app.logger.info(f"#loadtestperformance batch update query time: \
updated {len(receipts)} notification in {elapsed_time} ms")
def dao_close_out_delivery_receipts():

View File

@@ -1240,12 +1240,10 @@ def get_service_message_ratio():
messages_remaining = my_service.total_message_limit - messages_sent
if my_service.total_message_limit - messages_sent < 0:
raise Exception(
f"Math error get_service_message_ratio(), \
raise Exception(f"Math error get_service_message_ratio(), \
total {my_service.total_message_limit} \
messages_sent {messages_sent} remaining {messages_remaining} \
service_id {service_id} current_year {current_year}"
)
service_id {service_id} current_year {current_year}")
return {
"messages_sent": messages_sent,

View File

@@ -115,8 +115,7 @@ def upgrade():
unique=False,
)
op.execute(
"""
op.execute("""
INSERT INTO notification_history
(
id,
@@ -154,8 +153,7 @@ def upgrade():
status,
reference
FROM notifications
"""
)
""")
### end Alembic commands ###

View File

@@ -34,11 +34,9 @@ def upgrade():
# caveats
# only adjusts notifications for services that have never been in research mode. On live, research mode was
# limited to only services that we have set up ourselves so deemed this acceptable.
billable_services_query = text(
"""
billable_services_query = text("""
SELECT id FROM services_history WHERE id NOT IN (SELECT id FROM services_history WHERE research_mode)
"""
)
""")
billable_services = conn.execute(billable_services_query)
# set to 'null' if there are no billable services so we don't get a syntax error in the update statement
service_ids = ",".join(f"{service.id}" for service in billable_services) or "null"
@@ -102,11 +100,9 @@ def downgrade():
# caveats
# only adjusts notifications for services that have never been in research mode. On live, research mode was
# limited to only services that we have set up ourselves
billable_services = conn.execute(
"""
billable_services = conn.execute("""
SELECT id FROM services_history WHERE id not in (select id from services_history where research_mode)
"""
)
""")
# set to 'null' if there are no billable services so we don't get a syntax error in the update statement
service_ids = ",".join(f"{service.id}" for service in billable_services) or "null"

View File

@@ -42,14 +42,12 @@ def upgrade():
op.execute("INSERT INTO branding_type VALUES ('govuk'), ('org'), ('both')")
# insert UKVI data as initial test data. hex and crest pulled from alphagov/whitehall
op.execute(
"""INSERT INTO organisation VALUES (
op.execute("""INSERT INTO organisation VALUES (
'9d25d02d-2915-4e98-874b-974e123e8536',
'#9325b2',
'ho_crest_27px_x2.png',
'UK Visas and Immigration'
)"""
)
)""")
op.execute("UPDATE services SET branding='govuk'")
op.execute("UPDATE services_history SET branding='govuk'")

View File

@@ -15,20 +15,16 @@ from alembic import op
def upgrade():
op.execute(
"""
op.execute("""
UPDATE users
SET email_address = 'testsender@dispostable.com'
WHERE email_address = 'notify-service-user@digital.cabinet-office'
"""
)
""")
def downgrade():
op.execute(
"""
op.execute("""
UPDATE users
SET email_address = 'notify-service-user@digital.cabinet-office'
WHERE email_address = 'testsender@dispostable.com'
"""
)
""")

View File

@@ -24,13 +24,11 @@ def upgrade():
)
# insert initial values - HMG and Land Reg
op.execute(
"""
op.execute("""
INSERT INTO dvla_organisation VALUES
('001', 'HM Government'),
('500', 'Land Registry')
"""
)
""")
op.add_column(
"services",

View File

@@ -39,44 +39,36 @@ def upgrade():
conn = op.get_bind()
query = text(
"""
query = text("""
INSERT INTO service_permissions (service_id, permission, created_at)
SELECT id, 'sms', '2017-05-26 17:30:00.000000' FROM services
WHERE id NOT IN (SELECT service_id FROM service_permissions
WHERE service_id=id AND permission='sms')
"""
)
""")
conn.execute(query)
query = text(
"""
query = text("""
INSERT INTO service_permissions (service_id, permission, created_at)
SELECT id, 'email', '2017-05-26 17:30:00.000000' FROM services
WHERE id NOT IN (SELECT service_id FROM service_permissions
WHERE service_id=id AND permission='email')
"""
)
""")
conn.execute(query)
query = text(
"""
query = text("""
INSERT INTO service_permissions (service_id, permission, created_at)
SELECT id, 'letter', '2017-05-26 17:30:00.000000' FROM services
WHERE can_send_letters AND id NOT IN (SELECT service_id FROM service_permissions
WHERE service_id=id AND permission='letter')
"""
)
""")
conn.execute(query)
query = text(
"""
query = text("""
INSERT INTO service_permissions (service_id, permission, created_at)
SELECT id, 'international_sms', '2017-05-26 17:30:00.000000' FROM services
WHERE can_send_international_sms AND id NOT IN (SELECT service_id FROM service_permissions
WHERE service_id=id AND permission='international_sms')
"""
)
""")
conn.execute(query)

View File

@@ -17,28 +17,24 @@ from sqlalchemy.dialects import postgresql
def upgrade():
query = text(
"""
query = text("""
UPDATE job_statistics
SET sent = sms_sent + emails_sent + letters_sent,
delivered = sms_delivered + emails_delivered,
failed = sms_failed + emails_failed + letters_failed
"""
)
""")
conn = op.get_bind()
conn.execute(query)
def downgrade():
query = text(
"""
query = text("""
UPDATE job_statistics
SET sent = 0,
delivered = 0,
failed = 0
"""
)
""")
conn = op.get_bind()
conn.execute(query)

View File

@@ -23,14 +23,12 @@ def upgrade():
conn = op.get_bind()
input_params = {"tfl_dar_id": TFL_DAR_ID}
conn.execute(
text(
"""INSERT INTO organisation VALUES (
text("""INSERT INTO organisation VALUES (
:tfl_dar_id,
'',
'tfl_dar_x2.png',
'tfl'
)"""
),
)"""),
input_params,
)
@@ -39,10 +37,8 @@ def downgrade():
conn = op.get_bind()
input_params = {"tfl_dar_id": TFL_DAR_ID}
conn.execute(
text(
"""
text("""
DELETE FROM organisation WHERE "id" = :tfl_dar_id
"""
),
"""),
input_params,
)

View File

@@ -20,14 +20,12 @@ def upgrade():
input_params = {"network_id": ENTERPRISE_EUROPE_NETWORK_ID}
conn = op.get_bind()
conn.execute(
text(
"""INSERT INTO organisation VALUES (
text("""INSERT INTO organisation VALUES (
:network_id,
'',
'een_x2.png',
'een'
)"""
),
)"""),
input_params,
)
@@ -36,10 +34,8 @@ def downgrade():
input_params = {"network_id": ENTERPRISE_EUROPE_NETWORK_ID}
conn = op.get_bind()
conn.execute(
text(
"""
text("""
DELETE FROM organisation WHERE "id" = :network_id
"""
),
"""),
input_params,
)

View File

@@ -22,8 +22,7 @@ def upgrade():
conn = op.get_bind()
input_params = {"notify_user_id": current_app.config["NOTIFY_USER_ID"]}
conn.execute(
text(
"""
text("""
INSERT INTO template_redacted
(
template_id,
@@ -40,8 +39,7 @@ def upgrade():
templates
LEFT JOIN template_redacted on template_redacted.template_id = templates.id
WHERE template_redacted.template_id IS NULL
"""
),
"""),
input_params,
)

View File

@@ -17,12 +17,10 @@ from sqlalchemy.dialects import postgresql
def upgrade():
op.execute(
"""
op.execute("""
INSERT INTO dvla_organisation VALUES
('002', 'Office of the Public Guardian')
"""
)
""")
def downgrade():

View File

@@ -49,13 +49,11 @@ def upgrade():
)
# populate govuk seeded service
op.execute(
"""
op.execute("""
INSERT INTO service_sms_senders
(id, sms_sender, service_id, is_default, inbound_number_id, created_at, updated_at)
VALUES ('286d6176-adbe-7ea7-ba26-b7606ee5e2a4', 'GOVUK', 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553', true, null, now(), null)
"""
)
""")
def downgrade():

View File

@@ -25,14 +25,12 @@ def upgrade():
"notify_service_id": NOTIFY_SERVICE_ID,
}
conn.execute(
text(
"""
text("""
INSERT INTO service_email_reply_to
(id, service_id, email_address, is_default, created_at)
VALUES
(:email_reply_to, :notify_service_id, 'testsender@dispostable.com', 'f', NOW())
"""
),
"""),
input_params,
)
@@ -43,11 +41,9 @@ def downgrade():
"email_reply_to": EMAIL_REPLY_TO_ID,
}
conn.execute(
text(
"""
text("""
DELETE FROM service_email_reply_to
WHERE id = :email_reply_to
"""
),
"""),
input_params,
)

View File

@@ -27,34 +27,28 @@ def upgrade():
conn = op.get_bind()
input_params = {"default_sms_sender": default_sms_sender}
conn.execute(
text(
"""
text("""
update services set prefix_sms = True
where id in (
select service_id from service_sms_senders
where is_default = True and sms_sender = :default_sms_sender
)
"""
),
"""),
input_params,
)
conn.execute(
text(
"""
text("""
update services set prefix_sms = False
where id in (
select service_id from service_sms_senders
where is_default = True and sms_sender != :default_sms_sender
)
"""
),
"""),
input_params,
)
def downgrade():
op.execute(
"""
op.execute("""
UPDATE services set prefix_sms = null
"""
)
""")

View File

@@ -16,26 +16,22 @@ def upgrade():
op.drop_constraint(
"notifications_template_id_fkey", "notifications", type_="foreignkey"
)
op.execute(
"""
op.execute("""
ALTER TABLE notifications ADD CONSTRAINT "notifications_templates_history_fkey"
FOREIGN KEY ("template_id", "template_version") REFERENCES "templates_history" ("id", "version")
NOT VALID
"""
)
""")
op.drop_constraint(
"notification_history_template_id_fkey",
"notification_history",
type_="foreignkey",
)
op.execute(
"""
op.execute("""
ALTER TABLE notification_history ADD CONSTRAINT "notification_history_templates_history_fkey"
FOREIGN KEY ("template_id", "template_version") REFERENCES "templates_history" ("id", "version")
NOT VALID
"""
)
""")
def downgrade():

View File

@@ -20,13 +20,11 @@ def upgrade():
conn = op.get_bind()
input_params = {"id": current_app.config["NOTIFY_SERVICE_ID"]}
conn.execute(
text(
"""
text("""
update services
set prefix_sms = false
where id = :id
"""
),
"""),
input_params,
)
@@ -49,12 +47,10 @@ def downgrade():
conn = op.get_bind()
input_params = {"id": current_app.config["NOTIFY_SERVICE_ID"]}
conn.execute(
text(
"""
text("""
update services
set prefix_sms = null
where id = :id
"""
),
"""),
input_params,
)

View File

@@ -15,45 +15,33 @@ down_revision = "0148_add_letters_as_pdf_svc_perm"
def upgrade():
op.add_column("services", sa.Column("crown", sa.Boolean(), nullable=True))
op.execute(
"""
op.execute("""
update services set crown = True
where organisation_type = 'central'
"""
)
op.execute(
"""
""")
op.execute("""
update services set crown = True
where organisation_type is null
"""
)
op.execute(
"""
""")
op.execute("""
update services set crown = False
where crown is null
"""
)
""")
op.alter_column("services", "crown", nullable=False)
op.add_column("services_history", sa.Column("crown", sa.Boolean(), nullable=True))
op.execute(
"""
op.execute("""
update services_history set crown = True
where organisation_type = 'central'
"""
)
op.execute(
"""
""")
op.execute("""
update services_history set crown = True
where organisation_type is null
"""
)
op.execute(
"""
""")
op.execute("""
update services_history set crown = False
where crown is null
"""
)
""")
op.alter_column("services_history", "crown", nullable=False)

View File

@@ -22,8 +22,7 @@ def upgrade():
conn = op.get_bind()
input_params = {"notify_user": current_app.config["NOTIFY_USER_ID"]}
conn.execute(
text(
"""
text("""
INSERT INTO template_redacted
(
template_id,
@@ -40,8 +39,7 @@ def upgrade():
templates
LEFT JOIN template_redacted on template_redacted.template_id = templates.id
WHERE template_redacted.template_id IS NULL
"""
),
"""),
input_params,
)

View File

@@ -40,20 +40,16 @@ def upgrade():
),
sa.PrimaryKeyConstraint("service_id"),
)
op.execute(
"""
op.execute("""
INSERT INTO email_branding (id, colour, logo, name)
SELECT id, colour, logo, name
FROM organisation
"""
)
op.execute(
"""
""")
op.execute("""
INSERT INTO service_email_branding (service_id, email_branding_id)
SELECT id, organisation_id
FROM services where organisation_id is not null
"""
)
""")
def downgrade():

View File

@@ -15,8 +15,7 @@ down_revision = "0171_add_org_invite_template"
def upgrade():
op.get_bind()
op.execute(
"""
op.execute("""
update templates
set process_type = 'normal'
where templates.id in (
@@ -24,8 +23,7 @@ def upgrade():
join templates_history on templates.id=templates_history.id
where templates_history.name = 'Example text message template'
)
"""
)
""")
def downgrade():

View File

@@ -71,8 +71,7 @@ def upgrade():
)
# Insert data into table
op.execute(
"""
op.execute("""
INSERT into dm_datetime (
SELECT
datum AS bst_date,
@@ -104,8 +103,7 @@ def upgrade():
) DQ
ORDER BY bst_date
);
"""
)
""")
def downgrade():

View File

@@ -16,14 +16,11 @@ down_revision = "0182_add_upload_document_perm"
def upgrade():
# Drop the old dm_datetime table and create a new one
op.execute(
"""
op.execute("""
delete from dm_datetime where 1=1;
"""
)
""")
op.execute(
"""
op.execute("""
INSERT into dm_datetime (
SELECT
datum AS bst_date,
@@ -55,8 +52,7 @@ def upgrade():
) DQ
ORDER BY bst_date
);
"""
)
""")
op.drop_constraint("ft_billing_pkey", "ft_billing", type_="primary")

View File

@@ -14,8 +14,7 @@ from alembic import op
def upgrade():
op.execute(
"""
op.execute("""
UPDATE
jobs
SET
@@ -24,8 +23,7 @@ def upgrade():
processing_started IS NULL
AND
job_status = 'in progress'
"""
)
""")
def downgrade():

View File

@@ -17,16 +17,14 @@ def upgrade():
conn = op.get_bind()
input_params = {"branding_org": BrandType.ORG.value}
conn.execute(
text(
"""
text("""
update
email_branding
set
brand_type = :branding_org
where
brand_type is null
"""
),
"""),
input_params,
)

View File

@@ -19,25 +19,21 @@ def upgrade():
op.alter_column("services_history", "branding", nullable=True)
op.alter_column("services", "branding", nullable=True)
op.execute(
"""
op.execute("""
update
email_branding
set
brand_type = 'org'
where
brand_type = 'govuk'
"""
)
""")
op.execute(
"""
op.execute("""
delete from
branding_type
where
name = 'govuk'
"""
)
""")
def downgrade():
@@ -56,12 +52,10 @@ def downgrade():
op.alter_column("services", "branding", nullable=False)
op.alter_column("services_history", "branding", nullable=False)
op.execute(
"""
op.execute("""
insert into
branding_type
(name)
values
('govuk')
"""
)
""")

View File

@@ -11,16 +11,14 @@ down_revision = "0222_drop_service_branding"
def upgrade():
op.execute(
"""
op.execute("""
update
email_branding
set
domain = null
where
domain = ''
"""
)
""")
op.create_unique_constraint(
"uq_email_branding_domain", "email_branding", ["domain"]
)

View File

@@ -12,14 +12,12 @@ down_revision = "0226_service_postage"
def upgrade():
op.execute(
"""
op.execute("""
update
services
set
postage = 'second'
"""
)
""")
op.create_check_constraint(
"ck_services_postage", "services", "postage in ('second', 'first')"

View File

@@ -13,8 +13,7 @@ down_revision = "0228_notification_postage"
def upgrade():
op.execute(
"""
op.execute("""
ALTER TABLE notifications ADD CONSTRAINT "chk_notifications_postage_null"
CHECK (
CASE WHEN notification_type = 'letter' THEN
@@ -24,8 +23,7 @@ def upgrade():
END
)
NOT VALID
"""
)
""")
def downgrade():

View File

@@ -13,8 +13,7 @@ down_revision = "0230_noti_postage_constraint_1"
def upgrade():
op.execute(
"""
op.execute("""
ALTER TABLE notification_history ADD CONSTRAINT "chk_notification_history_postage_null"
CHECK (
CASE WHEN notification_type = 'letter' THEN
@@ -24,8 +23,7 @@ def upgrade():
END
)
NOT VALID
"""
)
""")
def downgrade():

View File

@@ -49,11 +49,9 @@ def upgrade():
)
for org_id, org_filename in LOGOS.items():
query = text(
"""
query = text("""
UPDATE dvla_organisation SET filename = :filename WHERE id = :id
"""
)
""")
conn.execute(query, {"filename": org_filename, "id": org_id})

View File

@@ -18,8 +18,7 @@ def upgrade():
op.execute("INSERT INTO service_permission_types VALUES ('choose_postage')")
op.add_column("templates", sa.Column("postage", sa.String(), nullable=True))
op.add_column("templates_history", sa.Column("postage", sa.String(), nullable=True))
op.execute(
"""
op.execute("""
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage_null"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -29,10 +28,8 @@ def upgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage_null"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -42,8 +39,7 @@ def upgrade():
postage is null
END
)
"""
)
""")
# ### end Alembic commands ###

View File

@@ -15,10 +15,8 @@ down_revision = "0252_letter_branding_table"
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.execute(
"""UPDATE templates SET postage = services.postage
FROM services WHERE template_type = 'letter' AND service_id = services.id"""
)
op.execute("""UPDATE templates SET postage = services.postage
FROM services WHERE template_type = 'letter' AND service_id = services.id""")
# ### end Alembic commands ###

View File

@@ -13,8 +13,7 @@ down_revision = "0253_set_template_postage"
def upgrade():
op.execute(
"""
op.execute("""
INSERT INTO
service_permissions (service_id, permission, created_at)
SELECT
@@ -30,8 +29,7 @@ def upgrade():
service_id = services.id and
permission = 'edit_folders'
)
"""
)
""")
def downgrade():

View File

@@ -15,10 +15,8 @@ down_revision = "0254_folders_for_all"
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.execute(
"""UPDATE templates_history SET postage = services.postage
FROM services WHERE template_type = 'letter' AND service_id = services.id"""
)
op.execute("""UPDATE templates_history SET postage = services.postage
FROM services WHERE template_type = 'letter' AND service_id = services.id""")
# ### end Alembic commands ###

View File

@@ -13,21 +13,17 @@ from alembic import op
def upgrade():
op.execute(
"""INSERT INTO letter_branding (id, name, filename, domain)
op.execute("""INSERT INTO letter_branding (id, name, filename, domain)
SELECT uuid_in(md5(random()::text)::cstring), name, filename, null
from dvla_organisation"""
)
from dvla_organisation""")
op.execute(
"""INSERT INTO service_letter_branding (service_id, letter_branding_id)
op.execute("""INSERT INTO service_letter_branding (service_id, letter_branding_id)
SELECT S.id, LB.id
FROM services s
JOIN dvla_organisation d on (s.dvla_organisation_id = d.id)
JOIN letter_branding lb on (lb.filename = d.filename)
WHERE d.id != '001'
"""
)
""")
def downgrade():

View File

@@ -19,13 +19,10 @@ def upgrade():
op.drop_column("services_history", "postage")
op.execute("DELETE FROM service_permissions WHERE permission = 'choose_postage'")
op.execute("DELETE FROM service_permission_types WHERE name = 'choose_postage'")
op.execute(
"""UPDATE templates_history SET postage = templates.postage
op.execute("""UPDATE templates_history SET postage = templates.postage
FROM templates WHERE templates_history.id = templates.id AND templates_history.template_type = 'letter'
AND templates_history.postage is null"""
)
op.execute(
"""
AND templates_history.postage is null""")
op.execute("""
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -34,10 +31,8 @@ def upgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -46,18 +41,13 @@ def upgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates DROP CONSTRAINT "chk_templates_postage_null"
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates_history DROP CONSTRAINT "chk_templates_history_postage_null"
"""
)
""")
# ### end Alembic commands ###
@@ -76,8 +66,7 @@ def downgrade():
),
)
op.execute("INSERT INTO service_permission_types VALUES ('choose_postage')")
op.execute(
"""
op.execute("""
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage_null"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -87,10 +76,8 @@ def downgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage_null"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -100,16 +87,11 @@ def downgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates DROP CONSTRAINT "chk_templates_postage"
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates_history DROP CONSTRAINT "chk_templates_history_postage"
"""
)
""")
# ### end Alembic commands ###

View File

@@ -33,8 +33,7 @@ def downgrade():
sa.PrimaryKeyConstraint("id", name="dvla_organisation_pkey"),
)
# can't repopulate the services, but we can put the static data back in dvla_organisation
op.execute(
"""
op.execute("""
INSERT INTO dvla_organisation VALUES
('001', 'HM Government', 'hm-government'),
('002', 'Office of the Public Guardian', 'opg'),
@@ -77,8 +76,7 @@ def downgrade():
('528', 'North Yorkshire Council', 'north-yorkshire'),
('529', 'Redbridge Council', 'redbridge'),
('530', 'Wigan Council', 'wigan')
"""
)
""")
op.add_column(
"services_history",

View File

@@ -21,8 +21,7 @@ def downgrade():
conn = op.get_bind()
input_params = {"permission": "edit_folders"}
conn.execute(
text(
"""
text("""
INSERT INTO
service_permissions (service_id, permission, created_at)
SELECT
@@ -38,7 +37,6 @@ def downgrade():
service_id = services.id and
permission = :permission
)
"""
),
"""),
input_params,
)

View File

@@ -29,41 +29,33 @@ def upgrade():
nullable=True,
server_default=sa.null(),
)
op.execute(
"""
op.execute("""
UPDATE
services
SET
consent_to_research = null
"""
)
op.execute(
"""
""")
op.execute("""
UPDATE
services_history
SET
consent_to_research = null
"""
)
""")
def downgrade():
op.execute(
"""
op.execute("""
UPDATE
services
SET
consent_to_research = false
"""
)
op.execute(
"""
""")
op.execute("""
UPDATE
services_history
SET
consent_to_research = false
"""
)
""")
op.alter_column(
"services_history",
"consent_to_research",

View File

@@ -15,8 +15,7 @@ from alembic import op
def upgrade():
op.execute(
"""
op.execute("""
UPDATE
services
SET
@@ -28,17 +27,14 @@ def upgrade():
services_history.version = 1 and
services_history.created_by_id = users.id
;
"""
)
""")
def downgrade():
op.execute(
"""
op.execute("""
UPDATE
services
SET
count_as_live = true
;
"""
)
""")

View File

@@ -15,19 +15,15 @@ from alembic import op
def upgrade():
op.execute(
"""UPDATE organisation SET email_branding_id = email_branding.id
op.execute("""UPDATE organisation SET email_branding_id = email_branding.id
FROM email_branding
WHERE email_branding.domain in (SELECT domain FROM domain WHERE domain.organisation_id = organisation.id)
"""
)
""")
op.execute(
"""UPDATE organisation SET letter_branding_id = letter_branding.id
op.execute("""UPDATE organisation SET letter_branding_id = letter_branding.id
FROM letter_branding
WHERE letter_branding.domain in (SELECT domain FROM domain WHERE domain.organisation_id = organisation.id)
"""
)
""")
def downgrade():

View File

@@ -25,8 +25,7 @@ def downgrade():
op.execute("INSERT INTO service_permission_types values('precompiled_letter')")
input_params = {"permission": "precompiled_letter"}
conn.execute(
text(
"""
text("""
INSERT INTO
service_permissions (service_id, permission, created_at)
SELECT
@@ -42,7 +41,6 @@ def downgrade():
service_id = services.id and
permission = :permission
)
"""
),
"""),
input_params,
)

View File

@@ -13,15 +13,13 @@ down_revision = "0296_agreement_signed_by_person"
def upgrade():
op.execute(
"""
op.execute("""
INSERT INTO template_redacted (template_id, redact_personalisation, updated_at, updated_by_id)
SELECT templates.id, FALSE, now(), templates.created_by_id
FROM templates
WHERE templates.id NOT IN (SELECT template_id FROM template_redacted WHERE template_id = templates.id)
;
"""
)
""")
def downgrade():

View File

@@ -136,8 +136,7 @@ def upgrade():
"user_id": current_app.config["NOTIFY_USER_ID"],
}
conn.execute(
text(
"""
text("""
INSERT INTO template_redacted
(
template_id,
@@ -145,8 +144,7 @@ def upgrade():
updated_at,
updated_by_id
) VALUES ( :template_id, false, current_timestamp, :user_id )
"""
),
"""),
input_params,
)

View File

@@ -18,27 +18,23 @@ environment = os.environ["NOTIFY_ENVIRONMENT"]
def upgrade():
if environment not in ["live", "production"]:
op.execute(
"""
op.execute("""
UPDATE
organisation
SET
organisation_type = 'nhs_local'
WHERE
organisation.organisation_type = 'nhs'
"""
)
""")
op.execute(
"""
op.execute("""
UPDATE
services
SET
organisation_type = 'nhs_local'
WHERE
services.organisation_type = 'nhs'
"""
)
""")
op.alter_column(
"organisation_types",
@@ -81,24 +77,20 @@ def downgrade():
)
if environment not in ["live", "production"]:
op.execute(
"""
op.execute("""
UPDATE
organisation
SET
organisation_type = 'nhs'
WHERE
organisation_type = 'nhs_local'
"""
)
""")
op.execute(
"""
op.execute("""
UPDATE
services
SET
organisation_type = 'nhs'
WHERE
organisation_type = 'nhs_local'
"""
)
""")

View File

@@ -27,8 +27,7 @@ def upgrade():
def downgrade():
conn = op.get_bind()
conn.execute(
text(
"""
text("""
INSERT INTO
provider_details
(id, display_name, identifier, priority, notification_type, active, version, supports_international)
@@ -39,7 +38,6 @@ def downgrade():
(id, display_name, identifier, priority, notification_type, active, version, supports_international)
VALUES
(:uuid, 'Loadtesting', 'loadtesting', 100, 'sms', true, 1, false)
"""
),
"""),
{"uuid": str(uuid.uuid4())},
)

View File

@@ -15,18 +15,15 @@ down_revision = "0313_email_access_validated_at"
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
# if user has email_auth, set email_access_validated_at on last login, else set it at user created_at date.
op.execute(
"""
op.execute("""
UPDATE
users
SET
email_access_validated_at = created_at
WHERE
email_access_validated_at IS NULL
"""
)
op.execute(
"""
""")
op.execute("""
UPDATE
users
SET
@@ -35,8 +32,7 @@ def upgrade():
auth_type = 'email_auth'
AND
logged_in_at IS NOT NULL
"""
)
""")
op.alter_column("users", "email_access_validated_at", nullable=False)
# ### end Alembic commands ###

View File

@@ -13,8 +13,7 @@ down_revision = "0316_int_letters_permission"
def upgrade():
op.execute(
"""
op.execute("""
INSERT INTO
service_permissions (service_id, permission, created_at)
SELECT
@@ -30,8 +29,7 @@ def upgrade():
service_id = services.id and
permission = 'upload_letters'
)
"""
)
""")
def downgrade():

View File

@@ -33,8 +33,7 @@ def upgrade():
def downgrade():
# The downgrade command must not be run in production - it will lock the tables for a long time
if environment not in ["live", "production"]:
op.execute(
"""
op.execute("""
ALTER TABLE notifications ADD CONSTRAINT "chk_notifications_postage_null"
CHECK (
CASE WHEN notification_type = 'letter' THEN
@@ -43,10 +42,8 @@ def downgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE notification_history ADD CONSTRAINT "chk_notification_history_postage_null"
CHECK (
CASE WHEN notification_type = 'letter' THEN
@@ -55,10 +52,8 @@ def downgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -67,10 +62,8 @@ def downgrade():
postage is null
END
)
"""
)
op.execute(
"""
""")
op.execute("""
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage"
CHECK (
CASE WHEN template_type = 'letter' THEN
@@ -79,5 +72,4 @@ def downgrade():
postage is null
END
)
"""
)
""")

View File

@@ -43,24 +43,18 @@ def upgrade():
def downgrade():
if environment not in ["live", "production"]:
op.execute(
"""
op.execute("""
CREATE INDEX IF NOT EXISTS ix_notifications_service_id_created_at
ON notifications(service_id, date(created_at))
"""
)
op.execute(
"""
""")
op.execute("""
CREATE INDEX IF NOT EXISTS ix_notification_history_created_at
on notification_history(created_at)
"""
)
op.execute(
"""
""")
op.execute("""
CREATE INDEX IF NOT EXISTS ix_notification_history_service_id_created_at
on notification_history(created_at)
"""
)
""")
op.execute("DROP INDEX IF EXISTS ix_notification_history_service_id_composite")
@@ -70,20 +64,14 @@ def downgrade():
op.execute(
"CREATE INDEX IF NOT EXISTS ix_notification_history_service_id on notification_history (service_id)"
)
op.execute(
"""
op.execute("""
CREATE INDEX IF NOT EXISTS ix_notification_history_template_id on notification_history (template_id)
"""
)
op.execute(
"""
""")
op.execute("""
CREATE INDEX IF NOT EXISTS ix_notification_history_notification_status
on notification_history (notification_status)
"""
)
op.execute(
"""
""")
op.execute("""
CREATE INDEX IF NOT EXISTS ix_notification_history_notification_type
on notification_history (notification_type)
"""
)
""")

View File

@@ -20,9 +20,7 @@ down_revision = "0335_broadcast_msg_content"
def upgrade():
conn = op.get_bind()
results = conn.execute(
sa.text(
"""
results = conn.execute(sa.text("""
UPDATE
broadcast_message
SET
@@ -34,9 +32,7 @@ def upgrade():
broadcast_message.template_id = templates_history.id and
broadcast_message.template_version = templates_history.version
;
"""
)
)
"""))
def downgrade():

View File

@@ -19,13 +19,11 @@ def upgrade():
op.drop_constraint(
"ck_users_mobile_or_email_auth", "users", type_=None, schema=None
)
op.execute(
"""
op.execute("""
ALTER TABLE users ADD CONSTRAINT "ck_user_has_mobile_or_other_auth"
CHECK (auth_type in ('email_auth', 'webauthn_auth') or mobile_number is not null)
NOT VALID
"""
)
""")
# ### end Alembic commands ###
@@ -41,13 +39,11 @@ def downgrade():
op.drop_constraint(
"ck_user_has_mobile_or_other_auth", "users", type_=None, schema=None
)
op.execute(
"""
op.execute("""
ALTER TABLE users ADD CONSTRAINT "ck_users_mobile_or_email_auth"
CHECK (auth_type = 'email_auth' or mobile_number is not null)
NOT VALID
"""
)
""")
op.execute("DELETE FROM auth_type WHERE name = 'webauthn_auth'")
# ### end Alembic commands ###

View File

@@ -15,8 +15,7 @@ down_revision = "0364_drop_old_column"
def upgrade():
op.execute(
"""
op.execute("""
CREATE VIEW notifications_all_time_view AS
(
SELECT
@@ -72,8 +71,7 @@ def upgrade():
document_download_count
FROM notification_history
)
"""
)
""")
def downgrade():

View File

@@ -34,8 +34,7 @@ def upgrade():
# we need to replace the entire notifications_all_time_view in order to update it
op.execute("DROP VIEW notifications_all_time_view;")
op.execute(
"""
op.execute("""
CREATE VIEW notifications_all_time_view AS
(
SELECT
@@ -89,8 +88,7 @@ def upgrade():
document_download_count
FROM notification_history
)
"""
)
""")
op.drop_column("notification_history", "postage")
op.drop_column("notifications", "postage")
@@ -141,8 +139,7 @@ def downgrade():
)
op.execute("DROP VIEW notifications_all_time_view;")
op.execute(
"""
op.execute("""
CREATE VIEW notifications_all_time_view AS
(
SELECT
@@ -198,6 +195,5 @@ def downgrade():
document_download_count
FROM notification_history
)
"""
)
""")
# ### end Alembic commands ###

View File

@@ -22,8 +22,7 @@ def upgrade():
def downgrade():
# this is the inverse of migration 0317
op.execute(
"""
op.execute("""
INSERT INTO
service_permissions (service_id, permission, created_at)
SELECT
@@ -39,8 +38,7 @@ def downgrade():
service_id = services.id and
permission = 'upload_letters'
)
"""
)
""")
# ### end Alembic commands ###

View File

@@ -151,8 +151,7 @@ def view_handler() -> Iterator[None]:
yield
op.execute(
"""
op.execute("""
CREATE VIEW notifications_all_time_view AS
(
SELECT
@@ -206,8 +205,7 @@ def view_handler() -> Iterator[None]:
document_download_count
FROM notification_history
)
"""
)
""")
def upgrade():
@@ -470,8 +468,7 @@ def upgrade():
postgresql_using=enum_using("notification_type", NotificationType),
)
# Clobbering bad data here. These are values we don't use any more, and anything with them is unnecessary.
op.execute(
"""
op.execute("""
delete from
service_permissions
where
@@ -482,8 +479,7 @@ def upgrade():
'international_letters',
'broadcast'
);
"""
)
""")
op.alter_column(
"service_permissions",
"permission",

View File

@@ -63,8 +63,7 @@ def view_handler() -> Iterator[None]:
yield
op.execute(
"""
op.execute("""
CREATE VIEW notifications_all_time_view AS
(
SELECT
@@ -118,8 +117,7 @@ def view_handler() -> Iterator[None]:
document_download_count
FROM notification_history
)
"""
)
""")
def upgrade():

View File

@@ -52,16 +52,14 @@ class RedisClient:
# delete keys matching a pattern supplied as a parameter. Does so in batches of 5000 to prevent unpack from
# exceeding lua's stack limit, and also to prevent errors if no keys match the pattern.
# Inspired by https://gist.github.com/ddre54/0a4751676272e0da8186
self.scripts["delete-keys-by-pattern"] = self.redis_store.register_script(
"""
self.scripts["delete-keys-by-pattern"] = self.redis_store.register_script("""
local keys = redis.call('keys', ARGV[1])
local deleted = 0
for i=1, #keys, 5000 do
deleted = deleted + redis.call('del', unpack(keys, i, math.min(i + 4999, #keys)))
end
return deleted
"""
)
""")
def delete_by_pattern(self, pattern, raise_exception=False):
r"""

754
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,12 +9,12 @@ readme = "README.md"
[tool.poetry.dependencies]
python = "^3.13.2"
alembic = "==1.18.1"
alembic = "==1.18.4"
amqp = "==5.3.1"
beautifulsoup4 = "==4.14.3"
boto3 = "^1.38.27"
botocore = "^1.38.27"
cachetools = "==6.2.4"
cachetools = "==7.0.1"
celery = {version = "==5.6.2", extras = ["redis"]}
certifi = ">=2022.12.7"
cffi = "==2.0.0"
@@ -31,13 +31,13 @@ flask-bcrypt = "==1.0.1"
flask-migrate = "==4.1.0"
flask-redis = "==0.4.0"
flask-sqlalchemy = "^3.1.1"
gunicorn = {version = "==24.1.1", extras = ["gevent"]}
gunicorn = {version = "==25.1.0", extras = ["gevent"]}
iso8601 = "==2.1.0"
jsonschema = {version = "==4.26.0", extras = ["format"]}
lxml = "==6.0.2"
marshmallow = "^4.2.1"
marshmallow = "^4.2.2"
marshmallow-sqlalchemy = "^1.4.2"
newrelic = "^11.3.0"
newrelic = "^11.5.0"
packaging = "==26.0"
poetry-dotenv-plugin = "==0.2.0"
psycopg2-binary = "==2.9.11"
@@ -45,20 +45,20 @@ pyjwt = "==2.10.1"
python-dotenv = "==1.2.1"
sqlalchemy = "==2.0.46"
werkzeug = "^3.1.5"
faker = "^40.1.0"
faker = "^40.5.1"
async-timeout = "^5.0.1"
bleach = "^6.3.0"
geojson = "^3.2.0"
numpy = "^2.4.1"
numpy = "^2.4.2"
ordered-set = "^4.1.0"
phonenumbers = "^9.0.22"
phonenumbers = "^9.0.24"
python-json-logger = "^4.0.0"
regex = "^2026.1.15"
regex = "^2026.2.19"
shapely = "^2.1.2"
smartypants = "^2.0.1"
mistune = "^3.2.0"
blinker = "^1.9.0"
cryptography = "^46.0.3"
cryptography = "^46.0.5"
idna = "^3.11"
jmespath = "^1.1.0"
markupsafe = "^3.0.3"
@@ -73,7 +73,7 @@ itsdangerous = "^2.2.0"
jinja2 = "^3.1.6"
redis = "^6.4.0"
requests = "^2.32.5"
virtualenv = "^20.36.1"
virtualenv = "^21.0.0"
marshmallow-enum = "^1.5.1"
awscli = "^1.40.36"
typing-extensions = "^4.15.0"
@@ -94,21 +94,21 @@ exceptiongroup = "==1.3.1"
flake8 = "^7.3.0"
flake8-bugbear = "^25.11.29"
freezegun = "^1.5.5"
hypothesis = "^6.151.2"
hypothesis = "^6.151.9"
honcho = "*"
isort = "^7.0.0"
isort = "^8.0.0"
jinja2-cli = {version = "==1.0.0", extras = ["yaml"]}
moto = "==5.1.20"
moto = "==5.1.21"
pip-audit = "*"
pre-commit = "^4.5.1"
pytest = "^9.0.2"
pytest-env = "^1.2.0"
pytest-env = "^1.5.0"
pytest-mock = "^3.15.1"
pytest-cov = "^7.0.0"
pytest-xdist = "^3.8.0"
radon = "^6.0.1"
requests-mock = "^1.11.0"
setuptools = "^80.9.0"
setuptools = "^82.0.0"
sqlalchemy-utils = "^0.41.2"
vulture = "^2.10"
detect-secrets = "^1.5.0"

View File

@@ -395,20 +395,16 @@ def test_strip_and_remove_obscure_whitespace_only_removes_normal_whitespace_from
def test_remove_smart_quotes_from_email_addresses():
assert (
remove_smart_quotes_from_email_addresses(
"""
remove_smart_quotes_from_email_addresses("""
line ones quote
first.olast@example.com is someones email address
line three
"""
)
== (
"""
""")
== ("""
line ones quote
first.o'last@example.com is someones email address
line three
"""
)
""")
)

View File

@@ -1014,9 +1014,7 @@ def test_multiple_sms_recipient_columns_with_missing_data(column_name):
"""
names, phone number, {}
"Joanna and Steve", 07900 900111
""".format(
column_name
),
""".format(column_name),
template=_sample_template("sms"),
allow_international_sms=True,
)