From 61e12038d404952b5d8a32da694f25fcbe06ca8f Mon Sep 17 00:00:00 2001 From: panish16 Date: Thu, 16 Apr 2026 09:02:42 -0700 Subject: [PATCH 01/11] bump EOL python dependencies across services --- colin-api/requirements.txt | 14 +- colin-api/requirements/dev.txt | 4 +- data-tool/requirements.txt | 15 +- jobs/sftp-gazette/requirements.txt | 10 +- jobs/sftp-gazette/requirements/prod.txt | 10 +- jobs/sftp-icbc-report/requirements.txt | 2 +- jobs/sftp-icbc-report/requirements/prod.txt | 2 +- jobs/sftp-nuans-report/requirements.txt | 2 +- jobs/sftp-nuans-report/requirements/prod.txt | 2 +- .../business-registry-model/requirements.txt | 24 +- python/common/sql-versioning/pyproject.toml | 2 +- queue_services/business-bn/poetry.lock | 238 ++++++++++++------ queue_services/business-bn/pyproject.toml | 2 +- queue_services/business-emailer/poetry.lock | 83 +++--- .../business-emailer/pyproject.toml | 2 +- 15 files changed, 242 insertions(+), 170 deletions(-) diff --git a/colin-api/requirements.txt b/colin-api/requirements.txt index 0026ea71eb..2815a63886 100644 --- a/colin-api/requirements.txt +++ b/colin-api/requirements.txt @@ -1,10 +1,10 @@ Flask-Moment==0.11.0 Flask-Script==2.0.6 -Flask==1.1.2 -Jinja2==2.11.3 -MarkupSafe==1.1.1 -Werkzeug==1.0.1 +Flask==3.1.0 +Jinja2==3.1.6 +MarkupSafe==3.0.2 +Werkzeug==3.1.3 aniso8601==9.0.1 blinker==1.4 certifi==2020.12.5 @@ -14,9 +14,9 @@ datedelta==1.3 debugpy ecdsa==0.14.1 flask-jwt-oidc==0.3.0 -flask-restx==0.3.0 +flask-restx==1.3.0 gunicorn==20.1.0 -itsdangerous==1.1.0 +itsdangerous==2.2.0 jsonschema==4.19.0 launchdarkly-server-sdk==7.1.0 psycopg2-binary==2.8.6 @@ -28,7 +28,7 @@ python-jose==3.2.0 pytz==2021.1 requests==2.25.1 rsa==4.7.2 -SQLAlchemy==1.4.44 +SQLAlchemy==2.0.40 six==1.15.0 urllib3==1.26.11 git+https://github.com/bcgov/business-schemas.git#egg=registry_schemas diff --git a/colin-api/requirements/dev.txt b/colin-api/requirements/dev.txt index 9e3570826d..54426f2c63 100644 --- a/colin-api/requirements/dev.txt +++ b/colin-api/requirements/dev.txt @@ -6,7 +6,7 @@ pytest-mock pytest-cov requests pyhamcrest -sqlalchemy<=1.4.44 +sqlalchemy>=2.0.0,<3.0.0 # Lint and code style flake8 @@ -22,4 +22,4 @@ pydocstyle<4.0 pylint pylint-flask isort<5,>=4.2.5 -sqlalchemy<=1.4.44 +sqlalchemy>=2.0.0,<3.0.0 diff --git a/data-tool/requirements.txt b/data-tool/requirements.txt index cb3b148610..35ea83686e 100755 --- a/data-tool/requirements.txt +++ b/data-tool/requirements.txt @@ -1,23 +1,22 @@ prefect==3.4.6 prefect[dask] Babel==2.9.1 -Flask>=2.0.0,<2.1.0 # Pin to 2.0.x series for flask-restx compatibility +Flask==3.1.0 Flask-Babel==2.0.0 Flask-Caching==2.3.0 Flask-Cors==3.0.10 -Flask-Migrate==2.7.0 +Flask-Migrate==4.1.0 Flask-Moment==0.11.0 Flask-Pydantic>=0.8.0 -Flask-SQLAlchemy>=2.5.1,<3.0.0 +Flask-SQLAlchemy>=3.1.1,<4.0.0 Flask-Script==2.0.6 -Flask==2.0.3 # Pin to specific version Jinja2>=3.0.0,<4.0.0 Mako==1.1.4 MarkupSafe>=2.0.0 SQLAlchemy-Continuum==1.3.13 SQLAlchemy-Utils==0.37.8 -Werkzeug==2.0.3 # Pin to version compatible with Flask 2.0.3 -alembic==1.7.5 +Werkzeug==3.1.3 +alembic==1.15.2 aniso8601==9.0.1 attrs>=22.2.0 blinker==1.4 @@ -31,7 +30,7 @@ dpath==2.0.1 ecdsa==0.14.1 expiringdict==1.1.4 flask-jwt-oidc==0.3.0 -flask-restx==0.5.1 # Earlier version that works with Flask 2.0.x +flask-restx==1.3.0 google-auth==2.29.0 gunicorn==20.1.0 idna==2.10 @@ -66,6 +65,6 @@ psycopg2==2.9.9 nest_asyncio asyncio-nats-client==0.11.4 asyncio-nats-streaming==0.4.0 -protobuf==3.15.8 +protobuf==5.29.4 requests==2.25.1 oracledb==3.1.1 diff --git a/jobs/sftp-gazette/requirements.txt b/jobs/sftp-gazette/requirements.txt index 82dcac4f4d..d82e81ae17 100644 --- a/jobs/sftp-gazette/requirements.txt +++ b/jobs/sftp-gazette/requirements.txt @@ -19,8 +19,8 @@ papermill==2.4.0 schedule==1.2.0 attrs==19.2.0 future==0.18.2 -Jinja2==2.11.2 -markupsafe==2.0.1 +Jinja2==3.1.6 +markupsafe==3.0.2 pytz==2019.3 importlib-metadata==1.6.0 itsdangerous==2.0.1 @@ -30,12 +30,12 @@ six==1.14.0 pyrsistent==0.16.0 zipp==3.1.0 -Flask==1.1.2 -Click==7.1.2 +Flask==3.1.0 +Click==8.1.8 python-dotenv==0.13.0 requests==2.23.0 marshmallow==2.20.5 -Werkzeug==0.16.1 +Werkzeug==3.1.3 certifi==2020.4.5.1 urllib3==1.25.9 idna==2.9 diff --git a/jobs/sftp-gazette/requirements/prod.txt b/jobs/sftp-gazette/requirements/prod.txt index 82dcac4f4d..d82e81ae17 100644 --- a/jobs/sftp-gazette/requirements/prod.txt +++ b/jobs/sftp-gazette/requirements/prod.txt @@ -19,8 +19,8 @@ papermill==2.4.0 schedule==1.2.0 attrs==19.2.0 future==0.18.2 -Jinja2==2.11.2 -markupsafe==2.0.1 +Jinja2==3.1.6 +markupsafe==3.0.2 pytz==2019.3 importlib-metadata==1.6.0 itsdangerous==2.0.1 @@ -30,12 +30,12 @@ six==1.14.0 pyrsistent==0.16.0 zipp==3.1.0 -Flask==1.1.2 -Click==7.1.2 +Flask==3.1.0 +Click==8.1.8 python-dotenv==0.13.0 requests==2.23.0 marshmallow==2.20.5 -Werkzeug==0.16.1 +Werkzeug==3.1.3 certifi==2020.4.5.1 urllib3==1.25.9 idna==2.9 diff --git a/jobs/sftp-icbc-report/requirements.txt b/jobs/sftp-icbc-report/requirements.txt index c28c2a4241..85edea9767 100644 --- a/jobs/sftp-icbc-report/requirements.txt +++ b/jobs/sftp-icbc-report/requirements.txt @@ -1,4 +1,4 @@ -Flask==2.3.3 +Flask==3.1.0 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/jobs/sftp-icbc-report/requirements/prod.txt b/jobs/sftp-icbc-report/requirements/prod.txt index c28c2a4241..85edea9767 100644 --- a/jobs/sftp-icbc-report/requirements/prod.txt +++ b/jobs/sftp-icbc-report/requirements/prod.txt @@ -1,4 +1,4 @@ -Flask==2.3.3 +Flask==3.1.0 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/jobs/sftp-nuans-report/requirements.txt b/jobs/sftp-nuans-report/requirements.txt index c28c2a4241..85edea9767 100644 --- a/jobs/sftp-nuans-report/requirements.txt +++ b/jobs/sftp-nuans-report/requirements.txt @@ -1,4 +1,4 @@ -Flask==2.3.3 +Flask==3.1.0 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/jobs/sftp-nuans-report/requirements/prod.txt b/jobs/sftp-nuans-report/requirements/prod.txt index c28c2a4241..85edea9767 100644 --- a/jobs/sftp-nuans-report/requirements/prod.txt +++ b/jobs/sftp-nuans-report/requirements/prod.txt @@ -1,4 +1,4 @@ -Flask==2.3.3 +Flask==3.1.0 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/python/common/business-registry-model/requirements.txt b/python/common/business-registry-model/requirements.txt index b4d90b5f84..9a144689d8 100755 --- a/python/common/business-registry-model/requirements.txt +++ b/python/common/business-registry-model/requirements.txt @@ -2,20 +2,20 @@ Babel==2.9.1 Flask-Babel==2.0.0 Flask-Caching==2.3.0 Flask-Cors==3.0.10 -Flask-Migrate==2.7.0 +Flask-Migrate==4.1.0 Flask-Moment==0.11.0 -Flask-Pydantic==0.8.0 -Flask-SQLAlchemy==2.5.1 +Flask-Pydantic==0.12.0 +Flask-SQLAlchemy==3.1.1 Flask-Script==2.0.6 -Flask==1.1.2 -Jinja2==2.11.3 +Flask==3.1.0 +Jinja2==3.1.6 Mako==1.1.4 -MarkupSafe==1.1.1 +MarkupSafe==3.0.2 SQLAlchemy-Continuum==1.3.13 SQLAlchemy-Utils==0.37.8 -SQLAlchemy==1.4.44 -Werkzeug==1.0.1 -alembic==1.7.5 +SQLAlchemy==2.0.40 +Werkzeug==3.1.3 +alembic==1.15.2 aniso8601==9.0.1 attrs==23.1.0 blinker==1.4 @@ -29,18 +29,18 @@ dpath==2.0.1 ecdsa==0.14.1 expiringdict==1.1.4 flask-jwt-oidc==0.3.0 -flask-restx==0.3.0 +flask-restx==1.3.0 google-auth==2.29.0 gunicorn==20.1.0 idna==2.10 -itsdangerous==1.1.0 +itsdangerous==2.2.0 jsonschema==4.19.0 launchdarkly-server-sdk==7.1.0 psycopg2-binary==2.8.6 pyRFC3339==1.1 pyasn1==0.4.8 pycountry==20.7.3 -pydantic==1.10.2 +pydantic>=2.7.0,<3.0.0 pyjwt==2.8.0 pyrsistent==0.17.3 python-dateutil==2.8.1 diff --git a/python/common/sql-versioning/pyproject.toml b/python/common/sql-versioning/pyproject.toml index 0466db1585..ddf306235f 100644 --- a/python/common/sql-versioning/pyproject.toml +++ b/python/common/sql-versioning/pyproject.toml @@ -8,7 +8,7 @@ packages = [{include = "sql_versioning"}] [tool.poetry.dependencies] python = "^3.8" -sqlalchemy = "1.4.44" +sqlalchemy = "^2.0.0" [tool.poetry.group.dev.dependencies] diff --git a/queue_services/business-bn/poetry.lock b/queue_services/business-bn/poetry.lock index 761745a5b8..f3f8bb9537 100644 --- a/queue_services/business-bn/poetry.lock +++ b/queue_services/business-bn/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. [[package]] name = "alembic" @@ -882,28 +882,28 @@ subdirectory = "python/gcp-queue" [[package]] name = "google-api-core" -version = "1.34.1" +version = "2.30.3" description = "Google API client core library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "google-api-core-1.34.1.tar.gz", hash = "sha256:3399c92887a97d33038baa4bfd3bf07acc05d474b0171f333e1f641c1364e552"}, - {file = "google_api_core-1.34.1-py3-none-any.whl", hash = "sha256:52bcc9d9937735f8a3986fa0bbf9135ae9cf5393a722387e5eced520e39c774a"}, + {file = "google_api_core-2.30.3-py3-none-any.whl", hash = "sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8"}, + {file = "google_api_core-2.30.3.tar.gz", hash = "sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b"}, ] [package.dependencies] -google-auth = ">=1.25.0,<3.0dev" -googleapis-common-protos = ">=1.56.2,<2.0dev" -grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.0.0dev" -requests = ">=2.18.0,<3.0.0dev" +google-auth = ">=2.14.1,<3.0.0" +googleapis-common-protos = ">=1.63.2,<2.0.0" +grpcio = {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +grpcio-status = {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +proto-plus = {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""} +protobuf = ">=4.25.8,<8.0.0" +requests = ">=2.20.0,<3.0.0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.0)"] +grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.75.1,<2.0.0) ; python_version >= \"3.14\""] [[package]] name = "google-auth" @@ -935,46 +935,48 @@ urllib3 = ["packaging", "urllib3"] [[package]] name = "google-cloud-pubsub" -version = "2.21.4" +version = "2.37.0" description = "Google Cloud Pub/Sub API client library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "google-cloud-pubsub-2.21.4.tar.gz", hash = "sha256:2cb8c7698adbfea0448db6c89b78aa7217fce07c1e37b46d3e535fa1633f3ae6"}, - {file = "google_cloud_pubsub-2.21.4-py2.py3-none-any.whl", hash = "sha256:e80a4c37c3cd45b68ee3c75eea45af228beeebc3f03915e8ee0b2fccd72e9926"}, + {file = "google_cloud_pubsub-2.37.0-py3-none-any.whl", hash = "sha256:dd912422cf66e4ffb423b0d5391ca81bdfa408eb0f21f57adecdb6fb3b1e0bb1"}, + {file = "google_cloud_pubsub-2.37.0.tar.gz", hash = "sha256:7c5ba9beb5236e2b83c091dd6171423dc7d6d0e989391bd09f60dbd242b29f10"}, ] [package.dependencies] -google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} -google-auth = ">=2.14.1,<3.0.0dev" -grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" -grpcio = ">=1.51.3,<2.0dev" +google-api-core = {version = ">=2.11.0,<3.0.0", extras = ["grpc"]} +google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" +grpc-google-iam-v1 = ">=0.14.0,<1.0.0" +grpcio = {version = ">=1.51.3,<2.0.0", markers = "python_version < \"3.14\""} grpcio-status = ">=1.33.2" -proto-plus = {version = ">=1.22.2,<2.0.0dev", markers = "python_version >= \"3.11\""} -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +opentelemetry-api = ">=1.27.0" +opentelemetry-sdk = ">=1.27.0" +proto-plus = {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""} +protobuf = ">=4.25.8,<8.0.0" [package.extras] libcst = ["libcst (>=0.3.10)"] [[package]] name = "googleapis-common-protos" -version = "1.63.1" +version = "1.74.0" description = "Common protobufs used in Google APIs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "googleapis-common-protos-1.63.1.tar.gz", hash = "sha256:c6442f7a0a6b2a80369457d79e6672bb7dcbaab88e0848302497e3ec80780a6a"}, - {file = "googleapis_common_protos-1.63.1-py2.py3-none-any.whl", hash = "sha256:0e1c2cdfcbc354b76e4a211a35ea35d6926a835cba1377073c4861db904a1877"}, + {file = "googleapis_common_protos-1.74.0-py3-none-any.whl", hash = "sha256:702216f78610bb510e3f12ac3cafd281b7ac45cc5d86e90ad87e4d301a3426b5"}, + {file = "googleapis_common_protos-1.74.0.tar.gz", hash = "sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1"}, ] [package.dependencies] -grpcio = {version = ">=1.44.0,<2.0.0.dev0", optional = true, markers = "extra == \"grpc\""} -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" +grpcio = {version = ">=1.44.0,<2.0.0", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=4.25.8,<8.0.0" [package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +grpc = ["grpcio (>=1.44.0,<2.0.0)"] [[package]] name = "greenlet" @@ -1046,20 +1048,20 @@ test = ["objgraph", "psutil", "setuptools"] [[package]] name = "grpc-google-iam-v1" -version = "0.13.0" +version = "0.14.4" description = "IAM API client library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "grpc-google-iam-v1-0.13.0.tar.gz", hash = "sha256:fad318608b9e093258fbf12529180f400d1c44453698a33509cc6ecf005b294e"}, - {file = "grpc_google_iam_v1-0.13.0-py2.py3-none-any.whl", hash = "sha256:53902e2af7de8df8c1bd91373d9be55b0743ec267a7428ea638db3775becae89"}, + {file = "grpc_google_iam_v1-0.14.4-py3-none-any.whl", hash = "sha256:412facc320fcbd94034b4df3d557662051d4d8adfa86e0ddb4dca70a3f739964"}, + {file = "grpc_google_iam_v1-0.14.4.tar.gz", hash = "sha256:392b3796947ed6334e61171d9ab06bf7eb357f554e5fc7556ad7aab6d0e17038"}, ] [package.dependencies] -googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]} -grpcio = ">=1.44.0,<2.0.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +googleapis-common-protos = {version = ">=1.63.2,<2.0.0", extras = ["grpc"]} +grpcio = ">=1.44.0,<2.0.0" +protobuf = ">=4.25.8,<8.0.0" [[package]] name = "grpcio" @@ -1140,20 +1142,20 @@ protobuf = ["grpcio-tools (>=1.78.0)"] [[package]] name = "grpcio-status" -version = "1.48.2" +version = "1.71.2" description = "Status proto mapping for gRPC" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "grpcio-status-1.48.2.tar.gz", hash = "sha256:53695f45da07437b7c344ee4ef60d370fd2850179f5a28bb26d8e2aa1102ec11"}, - {file = "grpcio_status-1.48.2-py3-none-any.whl", hash = "sha256:2c33bbdbe20188b2953f46f31af669263b6ee2a9b2d38fa0d36ee091532e21bf"}, + {file = "grpcio_status-1.71.2-py3-none-any.whl", hash = "sha256:803c98cb6a8b7dc6dbb785b1111aed739f241ab5e9da0bba96888aa74704cfd3"}, + {file = "grpcio_status-1.71.2.tar.gz", hash = "sha256:c7a97e176df71cdc2c179cd1847d7fc86cca5832ad12e9798d7fed6b7a1aab50"}, ] [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.48.2" -protobuf = ">=3.12.0" +grpcio = ">=1.71.2" +protobuf = ">=5.26.1,<6.0.dev0" [[package]] name = "gunicorn" @@ -1192,6 +1194,30 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[[package]] +name = "importlib-metadata" +version = "8.7.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151"}, + {file = "importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=3.4)"] +perf = ["ipython"] +test = ["flufl.flake8", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["mypy (<1.19) ; platform_python_implementation == \"PyPy\"", "pytest-mypy (>=1.0.1)"] + [[package]] name = "iniconfig" version = "2.3.0" @@ -1279,7 +1305,7 @@ fqdn = {version = "*", optional = true, markers = "extra == \"format\""} idna = {version = "*", optional = true, markers = "extra == \"format\""} isoduration = {version = "*", optional = true, markers = "extra == \"format\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} @@ -1466,6 +1492,58 @@ files = [ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, ] +[[package]] +name = "opentelemetry-api" +version = "1.41.0" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_api-1.41.0-py3-none-any.whl", hash = "sha256:0e77c806e6a89c9e4f8d372034622f3e1418a11bdbe1c80a50b3d3397ad0fa4f"}, + {file = "opentelemetry_api-1.41.0.tar.gz", hash = "sha256:9421d911326ec12dee8bc933f7839090cad7a3f13fcfb0f9e82f8174dc003c09"}, +] + +[package.dependencies] +importlib-metadata = ">=6.0,<8.8.0" +typing-extensions = ">=4.5.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.41.0" +description = "OpenTelemetry Python SDK" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_sdk-1.41.0-py3-none-any.whl", hash = "sha256:a596f5687964a3e0d7f8edfdcf5b79cbca9c93c7025ebf5fb00f398a9443b0bd"}, + {file = "opentelemetry_sdk-1.41.0.tar.gz", hash = "sha256:7bddf3961131b318fc2d158947971a8e37e38b1cd23470cfb72b624e7cc108bd"}, +] + +[package.dependencies] +opentelemetry-api = "1.41.0" +opentelemetry-semantic-conventions = "0.62b0" +typing-extensions = ">=4.5.0" + +[package.extras] +file-configuration = ["jsonschema (>=4.0)", "pyyaml (>=6.0)"] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.62b0" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_semantic_conventions-0.62b0-py3-none-any.whl", hash = "sha256:0ddac1ce59eaf1a827d9987ab60d9315fb27aea23304144242d1fcad9e16b489"}, + {file = "opentelemetry_semantic_conventions-0.62b0.tar.gz", hash = "sha256:cbfb3c8fc259575cf68a6e1b94083cc35adc4a6b06e8cf431efa0d62606c0097"}, +] + +[package.dependencies] +opentelemetry-api = "1.41.0" +typing-extensions = ">=4.5.0" + [[package]] name = "packaging" version = "26.0" @@ -1530,37 +1608,23 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "3.19.6" -description = "Protocol Buffers" -optional = false -python-versions = ">=3.5" -groups = ["main"] -files = [ - {file = "protobuf-3.19.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:010be24d5a44be7b0613750ab40bc8b8cedc796db468eae6c779b395f50d1fa1"}, - {file = "protobuf-3.19.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11478547958c2dfea921920617eb457bc26867b0d1aa065ab05f35080c5d9eb6"}, - {file = "protobuf-3.19.6-cp310-cp310-win32.whl", hash = "sha256:559670e006e3173308c9254d63facb2c03865818f22204037ab76f7a0ff70b5f"}, - {file = "protobuf-3.19.6-cp310-cp310-win_amd64.whl", hash = "sha256:347b393d4dd06fb93a77620781e11c058b3b0a5289262f094379ada2920a3730"}, - {file = "protobuf-3.19.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a8ce5ae0de28b51dff886fb922012dad885e66176663950cb2344c0439ecb473"}, - {file = "protobuf-3.19.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90b0d02163c4e67279ddb6dc25e063db0130fc299aefabb5d481053509fae5c8"}, - {file = "protobuf-3.19.6-cp36-cp36m-win32.whl", hash = "sha256:30f5370d50295b246eaa0296533403961f7e64b03ea12265d6dfce3a391d8992"}, - {file = "protobuf-3.19.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0c0714b025ec057b5a7600cb66ce7c693815f897cfda6d6efb58201c472e3437"}, - {file = "protobuf-3.19.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5057c64052a1f1dd7d4450e9aac25af6bf36cfbfb3a1cd89d16393a036c49157"}, - {file = "protobuf-3.19.6-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:bb6776bd18f01ffe9920e78e03a8676530a5d6c5911934c6a1ac6eb78973ecb6"}, - {file = "protobuf-3.19.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a04134866861b11556a82dd91ea6daf1f4925746b992f277b84013a7cc1229"}, - {file = "protobuf-3.19.6-cp37-cp37m-win32.whl", hash = "sha256:4bc98de3cdccfb5cd769620d5785b92c662b6bfad03a202b83799b6ed3fa1fa7"}, - {file = "protobuf-3.19.6-cp37-cp37m-win_amd64.whl", hash = "sha256:aa3b82ca1f24ab5326dcf4ea00fcbda703e986b22f3d27541654f749564d778b"}, - {file = "protobuf-3.19.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2b2d2913bcda0e0ec9a784d194bc490f5dc3d9d71d322d070b11a0ade32ff6ba"}, - {file = "protobuf-3.19.6-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:d0b635cefebd7a8a0f92020562dead912f81f401af7e71f16bf9506ff3bdbb38"}, - {file = "protobuf-3.19.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a552af4dc34793803f4e735aabe97ffc45962dfd3a237bdde242bff5a3de684"}, - {file = "protobuf-3.19.6-cp38-cp38-win32.whl", hash = "sha256:0469bc66160180165e4e29de7f445e57a34ab68f49357392c5b2f54c656ab25e"}, - {file = "protobuf-3.19.6-cp38-cp38-win_amd64.whl", hash = "sha256:91d5f1e139ff92c37e0ff07f391101df77e55ebb97f46bbc1535298d72019462"}, - {file = "protobuf-3.19.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0ccd3f940fe7f3b35a261b1dd1b4fc850c8fde9f74207015431f174be5976b3"}, - {file = "protobuf-3.19.6-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:30a15015d86b9c3b8d6bf78d5b8c7749f2512c29f168ca259c9d7727604d0e39"}, - {file = "protobuf-3.19.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:878b4cd080a21ddda6ac6d1e163403ec6eea2e206cf225982ae04567d39be7b0"}, - {file = "protobuf-3.19.6-cp39-cp39-win32.whl", hash = "sha256:5a0d7539a1b1fb7e76bf5faa0b44b30f812758e989e59c40f77a7dab320e79b9"}, - {file = "protobuf-3.19.6-cp39-cp39-win_amd64.whl", hash = "sha256:bbf5cea5048272e1c60d235c7bd12ce1b14b8a16e76917f371c718bd3005f045"}, - {file = "protobuf-3.19.6-py2.py3-none-any.whl", hash = "sha256:14082457dc02be946f60b15aad35e9f5c69e738f80ebbc0900a19bc83734a5a4"}, - {file = "protobuf-3.19.6.tar.gz", hash = "sha256:5f5540d57a43042389e87661c6eaa50f47c19c6176e8cf1c4f287aeefeccb5c4"}, +version = "5.29.6" +description = "" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "protobuf-5.29.6-cp310-abi3-win32.whl", hash = "sha256:62e8a3114992c7c647bce37dcc93647575fc52d50e48de30c6fcb28a6a291eb1"}, + {file = "protobuf-5.29.6-cp310-abi3-win_amd64.whl", hash = "sha256:7e6ad413275be172f67fdee0f43484b6de5a904cc1c3ea9804cb6fe2ff366eda"}, + {file = "protobuf-5.29.6-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:b5a169e664b4057183a34bdc424540e86eea47560f3c123a0d64de4e137f9269"}, + {file = "protobuf-5.29.6-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:a8866b2cff111f0f863c1b3b9e7572dc7eaea23a7fae27f6fc613304046483e6"}, + {file = "protobuf-5.29.6-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:e3387f44798ac1106af0233c04fb8abf543772ff241169946f698b3a9a3d3ab9"}, + {file = "protobuf-5.29.6-cp38-cp38-win32.whl", hash = "sha256:36ade6ff88212e91aef4e687a971a11d7d24d6948a66751abc1b3238648f5d05"}, + {file = "protobuf-5.29.6-cp38-cp38-win_amd64.whl", hash = "sha256:831e2da16b6cc9d8f1654c041dd594eda43391affd3c03a91bea7f7f6da106d6"}, + {file = "protobuf-5.29.6-cp39-cp39-win32.whl", hash = "sha256:cb4c86de9cd8a7f3a256b9744220d87b847371c6b2f10bde87768918ef33ba49"}, + {file = "protobuf-5.29.6-cp39-cp39-win_amd64.whl", hash = "sha256:76e07e6567f8baf827137e8d5b8204b6c7b6488bbbff1bf0a72b383f77999c18"}, + {file = "protobuf-5.29.6-py3-none-any.whl", hash = "sha256:6b9edb641441b2da9fa8f428760fc136a49cf97a52076010cf22a2ff73438a86"}, + {file = "protobuf-5.29.6.tar.gz", hash = "sha256:da9ee6a5424b6b30fd5e45c5ea663aef540ca95f9ad99d1e887e819cdf9b8723"}, ] [[package]] @@ -2826,7 +2890,27 @@ flake8-import-order = "*" pyflakes = "*" tomli = "*" +[[package]] +name = "zipp" +version = "3.23.1" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc"}, + {file = "zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + [metadata] lock-version = "2.1" python-versions = ">=3.13,<3.14" -content-hash = "ec2ac48660e1501b8f06bb097d219332117c500db0a1b0d9aeca06b45ac55bca" +content-hash = "663a67f07eebf21a60fd32869175b0ad857373212d08477cbe09f8f8ae3548d1" diff --git a/queue_services/business-bn/pyproject.toml b/queue_services/business-bn/pyproject.toml index ddfec22f9a..f8f993d148 100644 --- a/queue_services/business-bn/pyproject.toml +++ b/queue_services/business-bn/pyproject.toml @@ -17,7 +17,7 @@ certifi = ">=2025.1.31,<2026.0.0" click = ">=8.1.8,<9.0.0" dpath = ">=2.2.0,<3.0.0" itsdangerous = ">=2.2.0,<3.0.0" -protobuf = ">=3.15,<3.20" +protobuf = ">=5.28.0,<6.0.0" python-dotenv = ">=1.1.0,<2.0.0" psycopg2-binary = "2.9.10" six = ">=1.17.0,<2.0.0" diff --git a/queue_services/business-emailer/poetry.lock b/queue_services/business-emailer/poetry.lock index 836f080cb9..840dfaee8a 100644 --- a/queue_services/business-emailer/poetry.lock +++ b/queue_services/business-emailer/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. [[package]] name = "alembic" @@ -1118,28 +1118,28 @@ subdirectory = "python/gcp-queue" [[package]] name = "google-api-core" -version = "1.34.1" +version = "2.30.3" description = "Google API client core library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "google-api-core-1.34.1.tar.gz", hash = "sha256:3399c92887a97d33038baa4bfd3bf07acc05d474b0171f333e1f641c1364e552"}, - {file = "google_api_core-1.34.1-py3-none-any.whl", hash = "sha256:52bcc9d9937735f8a3986fa0bbf9135ae9cf5393a722387e5eced520e39c774a"}, + {file = "google_api_core-2.30.3-py3-none-any.whl", hash = "sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8"}, + {file = "google_api_core-2.30.3.tar.gz", hash = "sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b"}, ] [package.dependencies] -google-auth = ">=1.25.0,<3.0dev" -googleapis-common-protos = ">=1.56.2,<2.0dev" -grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.0.0dev" -requests = ">=2.18.0,<3.0.0dev" +google-auth = ">=2.14.1,<3.0.0" +googleapis-common-protos = ">=1.63.2,<2.0.0" +grpcio = {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +grpcio-status = {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +proto-plus = {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""} +protobuf = ">=4.25.8,<8.0.0" +requests = ">=2.20.0,<3.0.0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.0)"] +grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio (>=1.75.1,<2.0.0) ; python_version >= \"3.14\"", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.75.1,<2.0.0) ; python_version >= \"3.14\""] [[package]] name = "google-auth" @@ -1382,20 +1382,20 @@ protobuf = ["grpcio-tools (>=1.71.0)"] [[package]] name = "grpcio-status" -version = "1.48.2" +version = "1.71.0" description = "Status proto mapping for gRPC" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "grpcio-status-1.48.2.tar.gz", hash = "sha256:53695f45da07437b7c344ee4ef60d370fd2850179f5a28bb26d8e2aa1102ec11"}, - {file = "grpcio_status-1.48.2-py3-none-any.whl", hash = "sha256:2c33bbdbe20188b2953f46f31af669263b6ee2a9b2d38fa0d36ee091532e21bf"}, + {file = "grpcio_status-1.71.0-py3-none-any.whl", hash = "sha256:843934ef8c09e3e858952887467f8256aac3910c55f077a359a65b2b3cde3e68"}, + {file = "grpcio_status-1.71.0.tar.gz", hash = "sha256:11405fed67b68f406b3f3c7c5ae5104a79d2d309666d10d61b152e91d28fb968"}, ] [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.48.2" -protobuf = ">=3.12.0" +grpcio = ">=1.71.0" +protobuf = ">=5.26.1,<6.0.dev0" [[package]] name = "gunicorn" @@ -1561,7 +1561,7 @@ fqdn = {version = "*", optional = true, markers = "extra == \"format\""} idna = {version = "*", optional = true, markers = "extra == \"format\""} isoduration = {version = "*", optional = true, markers = "extra == \"format\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} @@ -2157,34 +2157,23 @@ testing = ["google-api-core (>=1.31.5)"] [[package]] name = "protobuf" -version = "3.20.3" -description = "Protocol Buffers" +version = "5.29.6" +description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" groups = ["main"] files = [ - {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, - {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, - {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, - {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, - {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, - {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, - {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, - {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, - {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, - {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, - {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, - {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, - {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, - {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, - {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, - {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, + {file = "protobuf-5.29.6-cp310-abi3-win32.whl", hash = "sha256:62e8a3114992c7c647bce37dcc93647575fc52d50e48de30c6fcb28a6a291eb1"}, + {file = "protobuf-5.29.6-cp310-abi3-win_amd64.whl", hash = "sha256:7e6ad413275be172f67fdee0f43484b6de5a904cc1c3ea9804cb6fe2ff366eda"}, + {file = "protobuf-5.29.6-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:b5a169e664b4057183a34bdc424540e86eea47560f3c123a0d64de4e137f9269"}, + {file = "protobuf-5.29.6-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:a8866b2cff111f0f863c1b3b9e7572dc7eaea23a7fae27f6fc613304046483e6"}, + {file = "protobuf-5.29.6-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:e3387f44798ac1106af0233c04fb8abf543772ff241169946f698b3a9a3d3ab9"}, + {file = "protobuf-5.29.6-cp38-cp38-win32.whl", hash = "sha256:36ade6ff88212e91aef4e687a971a11d7d24d6948a66751abc1b3238648f5d05"}, + {file = "protobuf-5.29.6-cp38-cp38-win_amd64.whl", hash = "sha256:831e2da16b6cc9d8f1654c041dd594eda43391affd3c03a91bea7f7f6da106d6"}, + {file = "protobuf-5.29.6-cp39-cp39-win32.whl", hash = "sha256:cb4c86de9cd8a7f3a256b9744220d87b847371c6b2f10bde87768918ef33ba49"}, + {file = "protobuf-5.29.6-cp39-cp39-win_amd64.whl", hash = "sha256:76e07e6567f8baf827137e8d5b8204b6c7b6488bbbff1bf0a72b383f77999c18"}, + {file = "protobuf-5.29.6-py3-none-any.whl", hash = "sha256:6b9edb641441b2da9fa8f428760fc136a49cf97a52076010cf22a2ff73438a86"}, + {file = "protobuf-5.29.6.tar.gz", hash = "sha256:da9ee6a5424b6b30fd5e45c5ea663aef540ca95f9ad99d1e887e819cdf9b8723"}, ] [[package]] @@ -3697,4 +3686,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.1" python-versions = ">=3.13,<3.14" -content-hash = "9e813c9b375252925838a07ca1e10f0d39e03623e951cd3d74558f51636d53b4" +content-hash = "28642c0bca66c1d6c7aec197d00a1b51bf4462fc6de9fb065b5f26fa95eb37ee" diff --git a/queue_services/business-emailer/pyproject.toml b/queue_services/business-emailer/pyproject.toml index 2269660ee5..c20d388195 100644 --- a/queue_services/business-emailer/pyproject.toml +++ b/queue_services/business-emailer/pyproject.toml @@ -50,7 +50,7 @@ minio = "7.2.15" multidict = "6.2.0" Pillow = "11.1.0" pkgutil-resolve-name = "1.3.10" -protobuf = "==3.20.*" +protobuf = ">=5.28.0,<6.0.0" psycopg2-binary = "2.9.10" pyasn1 = "0.4.8" pycountry = ">=24.6.1,<25.0.0" From 72b93172a4d4a40ff70f1b73ece1415c8e8f10a1 Mon Sep 17 00:00:00 2001 From: panish16 Date: Thu, 16 Apr 2026 09:28:13 -0700 Subject: [PATCH 02/11] updating flask version to 3.0.3 --- .github/workflows/colin-api-ci.yml | 4 ++-- colin-api/Dockerfile | 2 +- colin-api/Makefile | 4 ++-- colin-api/requirements.txt | 12 ++++++------ colin-api/src/colin_api/resources/db.py | 19 ++++++++----------- data-tool/requirements.txt | 6 +++--- jobs/sftp-gazette/requirements.txt | 6 +++--- jobs/sftp-gazette/requirements/prod.txt | 6 +++--- jobs/sftp-icbc-report/requirements.txt | 2 +- jobs/sftp-icbc-report/requirements/prod.txt | 2 +- jobs/sftp-nuans-report/requirements.txt | 2 +- jobs/sftp-nuans-report/requirements/prod.txt | 2 +- .../business-registry-model/requirements.txt | 8 ++++---- 13 files changed, 36 insertions(+), 39 deletions(-) diff --git a/.github/workflows/colin-api-ci.yml b/.github/workflows/colin-api-ci.yml index 52763afb5f..52e3161c69 100644 --- a/.github/workflows/colin-api-ci.yml +++ b/.github/workflows/colin-api-ci.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: - python-version: [3.8] + python-version: [3.9] steps: - uses: actions/checkout@v3 @@ -68,7 +68,7 @@ jobs: strategy: matrix: - python-version: [3.8] + python-version: [3.9] services: postgres: diff --git a/colin-api/Dockerfile b/colin-api/Dockerfile index a0d805392d..8d66fa6225 100644 --- a/colin-api/Dockerfile +++ b/colin-api/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.8 +FROM python:3.9 ARG VCS_REF="missing" ARG BUILD_DATE="missing" diff --git a/colin-api/Makefile b/colin-api/Makefile index 80e6ff701a..c00bea195f 100644 --- a/colin-api/Makefile +++ b/colin-api/Makefile @@ -37,7 +37,7 @@ clean-test: ## clean test files rm -fr htmlcov/ build-req: clean ## Upgrade requirements - test -f venv/bin/activate || python3.8 -m venv $(CURRENT_ABS_DIR)/venv ;\ + test -f venv/bin/activate || python3.9 -m venv $(CURRENT_ABS_DIR)/venv ;\ . venv/bin/activate ;\ pip install --upgrade pip ;\ pip install -Ur requirements/prod.txt ;\ @@ -46,7 +46,7 @@ build-req: clean ## Upgrade requirements pip install -Ur requirements/bcregistry-libraries.txt install: clean ## Install python virtual environment - test -f venv/bin/activate || python3.8 -m venv $(CURRENT_ABS_DIR)/venv ;\ + test -f venv/bin/activate || python3.9 -m venv $(CURRENT_ABS_DIR)/venv ;\ . venv/bin/activate ;\ pip install --upgrade pip ;\ pip install -Ur requirements.txt diff --git a/colin-api/requirements.txt b/colin-api/requirements.txt index 2815a63886..57e8d684d0 100644 --- a/colin-api/requirements.txt +++ b/colin-api/requirements.txt @@ -1,19 +1,19 @@ Flask-Moment==0.11.0 Flask-Script==2.0.6 -Flask==3.1.0 +Flask==3.0.3 Jinja2==3.1.6 -MarkupSafe==3.0.2 -Werkzeug==3.1.3 +MarkupSafe==2.1.5 +Werkzeug==3.0.6 aniso8601==9.0.1 -blinker==1.4 +blinker==1.8.2 certifi==2020.12.5 click==8.1.3 cx-Oracle==8.1.0 datedelta==1.3 debugpy ecdsa==0.14.1 -flask-jwt-oidc==0.3.0 +flask-jwt-oidc==0.8.0 flask-restx==1.3.0 gunicorn==20.1.0 itsdangerous==2.2.0 @@ -29,6 +29,6 @@ pytz==2021.1 requests==2.25.1 rsa==4.7.2 SQLAlchemy==2.0.40 -six==1.15.0 +six==1.16.0 urllib3==1.26.11 git+https://github.com/bcgov/business-schemas.git#egg=registry_schemas diff --git a/colin-api/src/colin_api/resources/db.py b/colin-api/src/colin_api/resources/db.py index 9cc5b13cf9..1ae460b88c 100644 --- a/colin-api/src/colin_api/resources/db.py +++ b/colin-api/src/colin_api/resources/db.py @@ -16,7 +16,7 @@ These will get initialized by the application. """ import cx_Oracle -from flask import _app_ctx_stack, current_app +from flask import current_app, g class OracleDB: @@ -37,11 +37,10 @@ def init_app(self, app): app.teardown_appcontext(self.teardown) @staticmethod - def teardown(): + def teardown(exception): # pylint: disable=unused-argument """Oracle session pool cleans up after itself.""" - ctx = _app_ctx_stack.top - if hasattr(ctx, 'oracle_pool'): - ctx.oracle_pool.close() + if hasattr(g, '_oracle_pool'): + g._oracle_pool.close() # pylint: disable=protected-access @staticmethod def _create_pool(): @@ -78,7 +77,7 @@ def init_session(conn, *args): # pylint: disable=unused-argument; Extra var bei nencoding='UTF-8') @property - def connection(self): # pylint: disable=inconsistent-return-statements + def connection(self): """Create connection property for the NROService. If this is running in a Flask context, @@ -86,11 +85,9 @@ def connection(self): # pylint: disable=inconsistent-return-statements and then return an acquired session :return: cx_Oracle.connection type """ - ctx = _app_ctx_stack.top - if ctx is not None: - if not hasattr(ctx, '_oracle_pool'): - ctx._oracle_pool = self._create_pool() # pylint: disable = protected-access; need this method - return ctx._oracle_pool.acquire() # pylint: disable = protected-access; need this method + if not hasattr(g, '_oracle_pool'): + g._oracle_pool = self._create_pool() # pylint: disable=protected-access + return g._oracle_pool.acquire() # pylint: disable=protected-access # export instance of this class diff --git a/data-tool/requirements.txt b/data-tool/requirements.txt index 35ea83686e..7854799b3c 100755 --- a/data-tool/requirements.txt +++ b/data-tool/requirements.txt @@ -1,7 +1,7 @@ prefect==3.4.6 prefect[dask] Babel==2.9.1 -Flask==3.1.0 +Flask==3.0.3 Flask-Babel==2.0.0 Flask-Caching==2.3.0 Flask-Cors==3.0.10 @@ -15,11 +15,11 @@ Mako==1.1.4 MarkupSafe>=2.0.0 SQLAlchemy-Continuum==1.3.13 SQLAlchemy-Utils==0.37.8 -Werkzeug==3.1.3 +Werkzeug==3.0.6 alembic==1.15.2 aniso8601==9.0.1 attrs>=22.2.0 -blinker==1.4 +blinker==1.8.2 cachelib==0.9.0 certifi==2020.12.5 chardet==4.0.0 diff --git a/jobs/sftp-gazette/requirements.txt b/jobs/sftp-gazette/requirements.txt index d82e81ae17..c788f1acb5 100644 --- a/jobs/sftp-gazette/requirements.txt +++ b/jobs/sftp-gazette/requirements.txt @@ -20,7 +20,7 @@ schedule==1.2.0 attrs==19.2.0 future==0.18.2 Jinja2==3.1.6 -markupsafe==3.0.2 +markupsafe==2.1.5 pytz==2019.3 importlib-metadata==1.6.0 itsdangerous==2.0.1 @@ -30,12 +30,12 @@ six==1.14.0 pyrsistent==0.16.0 zipp==3.1.0 -Flask==3.1.0 +Flask==3.0.3 Click==8.1.8 python-dotenv==0.13.0 requests==2.23.0 marshmallow==2.20.5 -Werkzeug==3.1.3 +Werkzeug==3.0.6 certifi==2020.4.5.1 urllib3==1.25.9 idna==2.9 diff --git a/jobs/sftp-gazette/requirements/prod.txt b/jobs/sftp-gazette/requirements/prod.txt index d82e81ae17..c788f1acb5 100644 --- a/jobs/sftp-gazette/requirements/prod.txt +++ b/jobs/sftp-gazette/requirements/prod.txt @@ -20,7 +20,7 @@ schedule==1.2.0 attrs==19.2.0 future==0.18.2 Jinja2==3.1.6 -markupsafe==3.0.2 +markupsafe==2.1.5 pytz==2019.3 importlib-metadata==1.6.0 itsdangerous==2.0.1 @@ -30,12 +30,12 @@ six==1.14.0 pyrsistent==0.16.0 zipp==3.1.0 -Flask==3.1.0 +Flask==3.0.3 Click==8.1.8 python-dotenv==0.13.0 requests==2.23.0 marshmallow==2.20.5 -Werkzeug==3.1.3 +Werkzeug==3.0.6 certifi==2020.4.5.1 urllib3==1.25.9 idna==2.9 diff --git a/jobs/sftp-icbc-report/requirements.txt b/jobs/sftp-icbc-report/requirements.txt index 85edea9767..6c50ed7590 100644 --- a/jobs/sftp-icbc-report/requirements.txt +++ b/jobs/sftp-icbc-report/requirements.txt @@ -1,4 +1,4 @@ -Flask==3.1.0 +Flask==3.0.3 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/jobs/sftp-icbc-report/requirements/prod.txt b/jobs/sftp-icbc-report/requirements/prod.txt index 85edea9767..6c50ed7590 100644 --- a/jobs/sftp-icbc-report/requirements/prod.txt +++ b/jobs/sftp-icbc-report/requirements/prod.txt @@ -1,4 +1,4 @@ -Flask==3.1.0 +Flask==3.0.3 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/jobs/sftp-nuans-report/requirements.txt b/jobs/sftp-nuans-report/requirements.txt index 85edea9767..6c50ed7590 100644 --- a/jobs/sftp-nuans-report/requirements.txt +++ b/jobs/sftp-nuans-report/requirements.txt @@ -1,4 +1,4 @@ -Flask==3.1.0 +Flask==3.0.3 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/jobs/sftp-nuans-report/requirements/prod.txt b/jobs/sftp-nuans-report/requirements/prod.txt index 85edea9767..6c50ed7590 100644 --- a/jobs/sftp-nuans-report/requirements/prod.txt +++ b/jobs/sftp-nuans-report/requirements/prod.txt @@ -1,4 +1,4 @@ -Flask==3.1.0 +Flask==3.0.3 paramiko==3.3.1 papermill==2.6.0 pg8000==1.31.4 diff --git a/python/common/business-registry-model/requirements.txt b/python/common/business-registry-model/requirements.txt index 9a144689d8..45510235cb 100755 --- a/python/common/business-registry-model/requirements.txt +++ b/python/common/business-registry-model/requirements.txt @@ -7,18 +7,18 @@ Flask-Moment==0.11.0 Flask-Pydantic==0.12.0 Flask-SQLAlchemy==3.1.1 Flask-Script==2.0.6 -Flask==3.1.0 +Flask==3.0.3 Jinja2==3.1.6 Mako==1.1.4 -MarkupSafe==3.0.2 +MarkupSafe==2.1.5 SQLAlchemy-Continuum==1.3.13 SQLAlchemy-Utils==0.37.8 SQLAlchemy==2.0.40 -Werkzeug==3.1.3 +Werkzeug==3.0.6 alembic==1.15.2 aniso8601==9.0.1 attrs==23.1.0 -blinker==1.4 +blinker==1.8.2 cachelib==0.9.0 certifi==2020.12.5 chardet==4.0.0 From 235fd2dd8a9f76d7731abffaf8dd7b4503af3c45 Mon Sep 17 00:00:00 2001 From: panish16 Date: Thu, 16 Apr 2026 11:34:17 -0700 Subject: [PATCH 03/11] =?UTF-8?q?app.env=20was=20removed=20in=20Flask=203.?= =?UTF-8?q?x=20=E2=80=94=20replace=20with=20app.debug=20or=20app.testing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- colin-api/Dockerfile | 2 +- colin-api/setup.cfg | 2 +- colin-api/src/colin_api/__init__.py | 4 ++-- colin-api/src/colin_api/errorhandlers.py | 2 ++ colin-api/src/colin_api/models/address.py | 7 ++++--- colin-api/src/colin_api/models/business.py | 7 ++++--- colin-api/src/colin_api/models/cont_out.py | 4 ++-- colin-api/src/colin_api/models/corp_involved.py | 4 ++-- colin-api/src/colin_api/models/corp_name.py | 4 ++-- colin-api/src/colin_api/models/corp_party.py | 4 ++-- colin-api/src/colin_api/models/filing.py | 7 ++++--- colin-api/src/colin_api/models/filing_type.py | 4 ++-- colin-api/src/colin_api/models/jurisdiction.py | 4 ++-- colin-api/src/colin_api/models/office.py | 4 ++-- colin-api/src/colin_api/models/program_account.py | 4 ++-- colin-api/src/colin_api/models/reset.py | 4 ++-- colin-api/src/colin_api/models/shares.py | 4 ++-- colin-api/src/colin_api/resources/__init__.py | 1 + colin-api/src/colin_api/resources/business.py | 7 ++++--- colin-api/src/colin_api/resources/db.py | 1 + colin-api/src/colin_api/resources/event.py | 7 ++++--- colin-api/src/colin_api/resources/filing.py | 7 ++++--- colin-api/src/colin_api/resources/meta.py | 5 +++-- colin-api/src/colin_api/resources/office.py | 7 ++++--- colin-api/src/colin_api/resources/ops.py | 6 ++++-- colin-api/src/colin_api/resources/parties.py | 7 ++++--- colin-api/src/colin_api/resources/program_account.py | 7 ++++--- colin-api/src/colin_api/resources/reset.py | 7 ++++--- colin-api/src/colin_api/resources/share_struct.py | 7 ++++--- colin-api/src/colin_api/services/account.py | 3 ++- colin-api/src/colin_api/services/flags.py | 5 +++-- colin-api/src/colin_api/utils/__init__.py | 1 + colin-api/tests/conftest.py | 7 ++++--- colin-api/tests/unit/api/test_future_effective_filings.py | 1 + colin-api/tests/unit/api/test_incorporation_application.py | 1 + colin-api/tests/unit/conf/test_configuration.py | 4 ++-- colin-api/tests/unit/conf/test_version.py | 1 + colin-api/tests/unit/conftest.py | 7 ++++--- colin-api/tests/unit/utils/test_util_cors.py | 4 ++-- colin-api/tests/utilities/decorators.py | 3 ++- 40 files changed, 102 insertions(+), 75 deletions(-) diff --git a/colin-api/Dockerfile b/colin-api/Dockerfile index 8d66fa6225..cc7f76e412 100644 --- a/colin-api/Dockerfile +++ b/colin-api/Dockerfile @@ -13,7 +13,7 @@ USER root # Installing Oracle instant client WORKDIR /opt/oracle -RUN apt-get update && apt-get install -y libaio1 gdb wget unzip \ +RUN apt-get update && apt-get install -y libaio1t64 gdb wget unzip \ && wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-basiclite-linux.x64-21.1.0.0.0.zip \ && wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-sqlplus-linux.x64-21.1.0.0.0.zip \ && unzip instantclient-basiclite-linux.x64-21.1.0.0.0.zip \ diff --git a/colin-api/setup.cfg b/colin-api/setup.cfg index 4a9634c670..2d3feeca1b 100644 --- a/colin-api/setup.cfg +++ b/colin-api/setup.cfg @@ -71,7 +71,7 @@ notes=FIXME,XXX,TODO ignored-modules=flask_sqlalchemy,sqlalchemy,SQLAlchemy,alembic,scoped_session ignored-classes=scoped_session min-similarity-lines=100 -disable=C0301,W0511,R0801,R0902,E1136 +disable=C0301,W0511,R0801,R0902,E1136,R0917 [isort] line_length = 120 diff --git a/colin-api/src/colin_api/__init__.py b/colin-api/src/colin_api/__init__.py index 591c991bd5..6c793bcaae 100644 --- a/colin-api/src/colin_api/__init__.py +++ b/colin-api/src/colin_api/__init__.py @@ -18,8 +18,6 @@ import os -from flask import Flask - from colin_api import config, errorhandlers from colin_api.resources import API, API_BLUEPRINT, OPS_BLUEPRINT from colin_api.services import flags @@ -27,6 +25,8 @@ from colin_api.utils.logging import setup_logging from colin_api.utils.run_version import get_run_version +from flask import Flask + setup_logging(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logging.conf')) # important to do this first diff --git a/colin-api/src/colin_api/errorhandlers.py b/colin-api/src/colin_api/errorhandlers.py index 42685e2636..302e01f7fd 100644 --- a/colin-api/src/colin_api/errorhandlers.py +++ b/colin-api/src/colin_api/errorhandlers.py @@ -24,7 +24,9 @@ import sys from flask import jsonify, request + from flask_jwt_oidc import AuthError + from werkzeug.exceptions import HTTPException from werkzeug.routing import RoutingException diff --git a/colin-api/src/colin_api/models/address.py b/colin-api/src/colin_api/models/address.py index 3631488894..1e7ad77dfa 100644 --- a/colin-api/src/colin_api/models/address.py +++ b/colin-api/src/colin_api/models/address.py @@ -19,13 +19,14 @@ from typing import Optional -import pycountry -from flask import current_app - from colin_api.exceptions import AddressNotFoundException from colin_api.resources.db import DB from colin_api.utils import stringify_list +from flask import current_app + +import pycountry + class Address: # pylint: disable=too-many-instance-attributes; need all these fields """Class to contain all model-like functions such as getting and setting from database.""" diff --git a/colin-api/src/colin_api/models/business.py b/colin-api/src/colin_api/models/business.py index 698cb2ee28..25aea68de8 100644 --- a/colin-api/src/colin_api/models/business.py +++ b/colin-api/src/colin_api/models/business.py @@ -21,14 +21,15 @@ from enum import Enum from typing import Dict, List, Optional -from datedelta import datedelta -from flask import current_app - from colin_api.exceptions import BusinessNotFoundException from colin_api.models.corp_name import CorpName from colin_api.resources.db import DB from colin_api.utils import convert_to_json_date, convert_to_json_datetime, convert_to_pacific_time, stringify_list +from datedelta import datedelta + +from flask import current_app + class Business: # pylint: disable=too-many-instance-attributes, too-many-public-methods """Class to contain all model-like functions for the corporation and related tables.""" diff --git a/colin-api/src/colin_api/models/cont_out.py b/colin-api/src/colin_api/models/cont_out.py index 92cbd84009..d52db64820 100644 --- a/colin-api/src/colin_api/models/cont_out.py +++ b/colin-api/src/colin_api/models/cont_out.py @@ -16,10 +16,10 @@ from typing import List -from flask import current_app - from colin_api.resources.db import DB +from flask import current_app + class ContOut: """ContOut object.""" diff --git a/colin-api/src/colin_api/models/corp_involved.py b/colin-api/src/colin_api/models/corp_involved.py index 84e468761d..f5bc4113e1 100644 --- a/colin-api/src/colin_api/models/corp_involved.py +++ b/colin-api/src/colin_api/models/corp_involved.py @@ -19,10 +19,10 @@ from typing import List -from flask import current_app - from colin_api.resources.db import DB +from flask import current_app + class CorpInvolved: """Corp Involved object.""" diff --git a/colin-api/src/colin_api/models/corp_name.py b/colin-api/src/colin_api/models/corp_name.py index 09d035495b..2edfdbe582 100644 --- a/colin-api/src/colin_api/models/corp_name.py +++ b/colin-api/src/colin_api/models/corp_name.py @@ -20,11 +20,11 @@ from enum import Enum from typing import List, Optional -from flask import current_app - from colin_api.resources.db import DB from colin_api.utils import get_max_value +from flask import current_app + class CorpName: """Corp Name object.""" diff --git a/colin-api/src/colin_api/models/corp_party.py b/colin-api/src/colin_api/models/corp_party.py index a255c81050..427eff7eaa 100644 --- a/colin-api/src/colin_api/models/corp_party.py +++ b/colin-api/src/colin_api/models/corp_party.py @@ -21,13 +21,13 @@ import itertools from typing import Dict, List, Optional -from flask import current_app - from colin_api.exceptions import PartiesNotFoundException from colin_api.models import Address, Business # pylint: disable=cyclic-import from colin_api.resources.db import DB from colin_api.utils import convert_to_json_date, delete_from_table_by_event_ids, stringify_list +from flask import current_app + class Party: # pylint: disable=too-many-instance-attributes; need all these fields """Party object.""" diff --git a/colin-api/src/colin_api/models/filing.py b/colin-api/src/colin_api/models/filing.py index 4aee7f2140..3e452b249e 100644 --- a/colin-api/src/colin_api/models/filing.py +++ b/colin-api/src/colin_api/models/filing.py @@ -22,9 +22,6 @@ from http import HTTPStatus from typing import Dict, List, Optional -from flask import current_app -from registry_schemas.utils import get_schema - from colin_api.exceptions import ( # noqa: I001 FilingNotFoundException, # noqa: I001 GenericException, # noqa: I001 @@ -48,6 +45,10 @@ from colin_api.resources.db import DB from colin_api.utils import convert_to_json_date, convert_to_json_datetime, convert_to_pacific_time, convert_to_snake +from flask import current_app + +from registry_schemas.utils import get_schema + # Code smells: # Cognitive Complexity acceptable for deep method on filing types diff --git a/colin-api/src/colin_api/models/filing_type.py b/colin-api/src/colin_api/models/filing_type.py index 3261df39f7..a35589e91f 100644 --- a/colin-api/src/colin_api/models/filing_type.py +++ b/colin-api/src/colin_api/models/filing_type.py @@ -19,11 +19,11 @@ from typing import List, Optional -from flask import current_app - from colin_api.resources.db import DB from colin_api.utils import stringify_list +from flask import current_app + # pylint: disable=too-few-public-methods class FilingType: diff --git a/colin-api/src/colin_api/models/jurisdiction.py b/colin-api/src/colin_api/models/jurisdiction.py index e30cc3fc93..314fb28fbf 100644 --- a/colin-api/src/colin_api/models/jurisdiction.py +++ b/colin-api/src/colin_api/models/jurisdiction.py @@ -19,10 +19,10 @@ from typing import List -from flask import current_app - from colin_api.resources.db import DB +from flask import current_app + class Jurisdiction: """Jurisdiction object.""" diff --git a/colin-api/src/colin_api/models/office.py b/colin-api/src/colin_api/models/office.py index 2d0cfb315e..11b672de64 100644 --- a/colin-api/src/colin_api/models/office.py +++ b/colin-api/src/colin_api/models/office.py @@ -17,12 +17,12 @@ """ from typing import Dict, List, Optional -from flask import current_app - from colin_api.models import Address # pylint: disable=cyclic-import from colin_api.resources.db import DB from colin_api.utils import delete_from_table_by_event_ids, stringify_list +from flask import current_app + class Office: """Registered office object.""" diff --git a/colin-api/src/colin_api/models/program_account.py b/colin-api/src/colin_api/models/program_account.py index e72daa8343..f8706e34db 100644 --- a/colin-api/src/colin_api/models/program_account.py +++ b/colin-api/src/colin_api/models/program_account.py @@ -16,10 +16,10 @@ from typing import Dict, Optional -from flask import current_app - from colin_api.resources.db import DB +from flask import current_app + class ProgramAccount: # pylint: disable=too-many-instance-attributes; need all these fields """Class to contain all model-like to get from database. diff --git a/colin-api/src/colin_api/models/reset.py b/colin-api/src/colin_api/models/reset.py index 48618030d0..af0f063520 100644 --- a/colin-api/src/colin_api/models/reset.py +++ b/colin-api/src/colin_api/models/reset.py @@ -15,12 +15,12 @@ Currently this only provides API versioning information """ -from flask import current_app - from colin_api.models.filing import Business, Filing, Office, Party, ShareObject from colin_api.resources.db import DB from colin_api.utils import stringify_list +from flask import current_app + class Reset: """Class to contain all model-like functions for resetting filings.""" diff --git a/colin-api/src/colin_api/models/shares.py b/colin-api/src/colin_api/models/shares.py index 2124ea7894..e12f38643c 100644 --- a/colin-api/src/colin_api/models/shares.py +++ b/colin-api/src/colin_api/models/shares.py @@ -19,11 +19,11 @@ from typing import List, Optional -from flask import current_app - from colin_api.resources.db import DB from colin_api.utils import delete_from_table_by_event_ids, get_max_value +from flask import current_app + class Share: # pylint: disable=too-many-instance-attributes; """Base Share Object.""" diff --git a/colin-api/src/colin_api/resources/__init__.py b/colin-api/src/colin_api/resources/__init__.py index c34c3b272d..557039fe8e 100644 --- a/colin-api/src/colin_api/resources/__init__.py +++ b/colin-api/src/colin_api/resources/__init__.py @@ -21,6 +21,7 @@ That are used to expose operational health information about the service, and meta information. """ from flask import Blueprint + from flask_restx import Api from .business import API as BUSINESS_API diff --git a/colin-api/src/colin_api/resources/business.py b/colin-api/src/colin_api/resources/business.py index 6276762853..0d92afd7bd 100644 --- a/colin-api/src/colin_api/resources/business.py +++ b/colin-api/src/colin_api/resources/business.py @@ -17,15 +17,16 @@ """ from http import HTTPStatus -from flask import current_app, jsonify, request -from flask_restx import Namespace, Resource, cors - from colin_api.exceptions import GenericException from colin_api.models import Business, CorpName from colin_api.resources.db import DB from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify, request + +from flask_restx import Namespace, Resource, cors + API = Namespace('businesses', description='Colin API Services - Businesses') diff --git a/colin-api/src/colin_api/resources/db.py b/colin-api/src/colin_api/resources/db.py index 1ae460b88c..9442bff813 100644 --- a/colin-api/src/colin_api/resources/db.py +++ b/colin-api/src/colin_api/resources/db.py @@ -16,6 +16,7 @@ These will get initialized by the application. """ import cx_Oracle + from flask import current_app, g diff --git a/colin-api/src/colin_api/resources/event.py b/colin-api/src/colin_api/resources/event.py index e6820f4a9b..0f85533d6d 100644 --- a/colin-api/src/colin_api/resources/event.py +++ b/colin-api/src/colin_api/resources/event.py @@ -12,15 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. """Event info endpoint for colin db.""" -from flask import current_app, jsonify -from flask_restx import Resource, cors - from colin_api.models import Business from colin_api.resources.business import API from colin_api.resources.db import DB from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify + +from flask_restx import Resource, cors + @cors_preflight('GET, POST') @API.route('/event//') diff --git a/colin-api/src/colin_api/resources/filing.py b/colin-api/src/colin_api/resources/filing.py index 135d182ae1..9efba883de 100644 --- a/colin-api/src/colin_api/resources/filing.py +++ b/colin-api/src/colin_api/resources/filing.py @@ -17,9 +17,6 @@ """ from http import HTTPStatus -from flask import current_app, jsonify, request -from flask_restx import Resource, cors - from colin_api.exceptions import GenericException from colin_api.models import Business from colin_api.models.filing import DB, Filing @@ -28,6 +25,10 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify, request + +from flask_restx import Resource, cors + @cors_preflight('GET, POST') @API.route('///filings/') diff --git a/colin-api/src/colin_api/resources/meta.py b/colin-api/src/colin_api/resources/meta.py index 3435689bc0..7ed48eda2f 100644 --- a/colin-api/src/colin_api/resources/meta.py +++ b/colin-api/src/colin_api/resources/meta.py @@ -15,10 +15,11 @@ Currently this only provides API versioning information """ +from colin_api.utils.run_version import get_run_version + from flask import jsonify -from flask_restx import Namespace, Resource -from colin_api.utils.run_version import get_run_version +from flask_restx import Namespace, Resource API = Namespace('Meta', description='Metadata') diff --git a/colin-api/src/colin_api/resources/office.py b/colin-api/src/colin_api/resources/office.py index e7412969c7..9a273974c2 100644 --- a/colin-api/src/colin_api/resources/office.py +++ b/colin-api/src/colin_api/resources/office.py @@ -17,9 +17,6 @@ """ from http import HTTPStatus -from flask import current_app, jsonify -from flask_restx import Resource, cors - from colin_api.exceptions import GenericException from colin_api.models import Business, Office from colin_api.models.filing import DB @@ -27,6 +24,10 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify + +from flask_restx import Resource, cors + @cors_preflight('GET') @API.route('///office') diff --git a/colin-api/src/colin_api/resources/ops.py b/colin-api/src/colin_api/resources/ops.py index 110c450c67..2a59036788 100644 --- a/colin-api/src/colin_api/resources/ops.py +++ b/colin-api/src/colin_api/resources/ops.py @@ -12,11 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. """Endpoints to check and manage the health of the service.""" +from colin_api.resources.db import DB + import cx_Oracle + from flask import current_app -from flask_restx import Namespace, Resource -from colin_api.resources.db import DB +from flask_restx import Namespace, Resource API = Namespace('OPS', description='Service - OPS checks') diff --git a/colin-api/src/colin_api/resources/parties.py b/colin-api/src/colin_api/resources/parties.py index c1d808d202..5df89ca98f 100644 --- a/colin-api/src/colin_api/resources/parties.py +++ b/colin-api/src/colin_api/resources/parties.py @@ -17,9 +17,6 @@ """ from http import HTTPStatus -from flask import current_app, jsonify, request -from flask_restx import Resource, cors - from colin_api.exceptions import GenericException from colin_api.models import Business, Party from colin_api.models.filing import DB @@ -27,6 +24,10 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify, request + +from flask_restx import Resource, cors + @cors_preflight('GET') @API.route('///parties') diff --git a/colin-api/src/colin_api/resources/program_account.py b/colin-api/src/colin_api/resources/program_account.py index 4658b8eae2..704ea3d04b 100644 --- a/colin-api/src/colin_api/resources/program_account.py +++ b/colin-api/src/colin_api/resources/program_account.py @@ -14,14 +14,15 @@ """Program account details from BNIT link.""" from http import HTTPStatus -from flask import current_app, jsonify, request -from flask_restx import Namespace, Resource, cors - from colin_api.exceptions import GenericException from colin_api.models import ProgramAccount from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify, request + +from flask_restx import Namespace, Resource, cors + API = Namespace('ProgramAccount', description='ProgramAccount endpoint to get BNI DB link data.') diff --git a/colin-api/src/colin_api/resources/reset.py b/colin-api/src/colin_api/resources/reset.py index 0f1fb6eda3..8d1f427521 100644 --- a/colin-api/src/colin_api/resources/reset.py +++ b/colin-api/src/colin_api/resources/reset.py @@ -17,13 +17,14 @@ """ import json -from flask import current_app, jsonify, request -from flask_restx import Namespace, Resource, cors - from colin_api.models.reset import Reset from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify, request + +from flask_restx import Namespace, Resource, cors + API = Namespace('Reset', description='Reset endpoint for changes made by COOPER') diff --git a/colin-api/src/colin_api/resources/share_struct.py b/colin-api/src/colin_api/resources/share_struct.py index 9bfca19a42..7cb6879994 100644 --- a/colin-api/src/colin_api/resources/share_struct.py +++ b/colin-api/src/colin_api/resources/share_struct.py @@ -17,9 +17,6 @@ """ from http import HTTPStatus -from flask import current_app, jsonify -from flask_restx import Resource, cors - from colin_api.exceptions import GenericException from colin_api.models import Business, ShareObject from colin_api.models.filing import DB @@ -27,6 +24,10 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight +from flask import current_app, jsonify + +from flask_restx import Resource, cors + @cors_preflight('GET') @API.route('///sharestructure') diff --git a/colin-api/src/colin_api/services/account.py b/colin-api/src/colin_api/services/account.py index 5366a8dfbd..cf922c03ee 100644 --- a/colin-api/src/colin_api/services/account.py +++ b/colin-api/src/colin_api/services/account.py @@ -14,9 +14,10 @@ """This class provides the service for auth calls.""" -import requests from flask import current_app +import requests + # pylint: disable=too-few-public-methods class AccountService: diff --git a/colin-api/src/colin_api/services/flags.py b/colin-api/src/colin_api/services/flags.py index a517adddee..d514622e62 100644 --- a/colin-api/src/colin_api/services/flags.py +++ b/colin-api/src/colin_api/services/flags.py @@ -13,6 +13,7 @@ # limitations under the License. """Manage the Feature Flags initialization, setup and service.""" from flask import current_app + from ldclient import get as ldclient_get, set_config as ldclient_set_config # noqa: I001 from ldclient.config import Config # noqa: I005 from ldclient.impl.integrations.files.file_data_source import _FileDataSource @@ -64,9 +65,9 @@ def init_app(self, app): self.app = app self.sdk_key = app.config.get('LD_SDK_KEY') - if self.sdk_key or app.env != 'production': + if self.sdk_key or app.debug or app.testing: - if app.env == 'production': + if not app.debug and not app.testing: config = Config(sdk_key=self.sdk_key) else: factory = FileDataSource.factory(paths=['flags.json'], diff --git a/colin-api/src/colin_api/utils/__init__.py b/colin-api/src/colin_api/utils/__init__.py index a75dc0922e..1def753eac 100644 --- a/colin-api/src/colin_api/utils/__init__.py +++ b/colin-api/src/colin_api/utils/__init__.py @@ -15,6 +15,7 @@ import datetime from flask import current_app + from pytz import timezone diff --git a/colin-api/tests/conftest.py b/colin-api/tests/conftest.py index 0d196d4763..d02978102a 100644 --- a/colin-api/tests/conftest.py +++ b/colin-api/tests/conftest.py @@ -12,12 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. """Common setup and fixtures for the pytest suite used by this service.""" -import pytest -from sqlalchemy import event, text - from colin_api import create_app from colin_api import jwt as _jwt +import pytest + +from sqlalchemy import event, text + @pytest.fixture(scope='session') def app(): diff --git a/colin-api/tests/unit/api/test_future_effective_filings.py b/colin-api/tests/unit/api/test_future_effective_filings.py index 0d9527b9b0..e30efbdd8f 100644 --- a/colin-api/tests/unit/api/test_future_effective_filings.py +++ b/colin-api/tests/unit/api/test_future_effective_filings.py @@ -20,6 +20,7 @@ from datetime import datetime from dateutil.relativedelta import relativedelta + from registry_schemas.example_data import ANNUAL_REPORT from tests import oracle_integration diff --git a/colin-api/tests/unit/api/test_incorporation_application.py b/colin-api/tests/unit/api/test_incorporation_application.py index 0a291b176f..22f398b1e1 100644 --- a/colin-api/tests/unit/api/test_incorporation_application.py +++ b/colin-api/tests/unit/api/test_incorporation_application.py @@ -18,6 +18,7 @@ import json import pytest + from registry_schemas.example_data import INCORPORATION_FILING_TEMPLATE from tests import oracle_integration, skip_coop_ia diff --git a/colin-api/tests/unit/conf/test_configuration.py b/colin-api/tests/unit/conf/test_configuration.py index 99a315cdd6..bdace18660 100644 --- a/colin-api/tests/unit/conf/test_configuration.py +++ b/colin-api/tests/unit/conf/test_configuration.py @@ -17,10 +17,10 @@ """ from importlib import reload -import pytest - from colin_api import config +import pytest + # testdata pattern is ({str: environment}, {expected return value}) TEST_ENVIRONMENT_DATA = [ diff --git a/colin-api/tests/unit/conf/test_version.py b/colin-api/tests/unit/conf/test_version.py index 09d29cda77..3922857b67 100644 --- a/colin-api/tests/unit/conf/test_version.py +++ b/colin-api/tests/unit/conf/test_version.py @@ -18,6 +18,7 @@ """ from colin_api import utils from colin_api.version import __version__ + from tests import skip_in_pod diff --git a/colin-api/tests/unit/conftest.py b/colin-api/tests/unit/conftest.py index 0d196d4763..d02978102a 100644 --- a/colin-api/tests/unit/conftest.py +++ b/colin-api/tests/unit/conftest.py @@ -12,12 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. """Common setup and fixtures for the pytest suite used by this service.""" -import pytest -from sqlalchemy import event, text - from colin_api import create_app from colin_api import jwt as _jwt +import pytest + +from sqlalchemy import event, text + @pytest.fixture(scope='session') def app(): diff --git a/colin-api/tests/unit/utils/test_util_cors.py b/colin-api/tests/unit/utils/test_util_cors.py index 6e4b7c156e..95fa35be43 100644 --- a/colin-api/tests/unit/utils/test_util_cors.py +++ b/colin-api/tests/unit/utils/test_util_cors.py @@ -16,10 +16,10 @@ Test-Suite to ensure that the CORS decorator is working as expected. """ -import pytest - from colin_api.utils.util import cors_preflight +import pytest + TEST_CORS_METHODS_DATA = [ ('GET'), diff --git a/colin-api/tests/utilities/decorators.py b/colin-api/tests/utilities/decorators.py index 5072e44fdd..d22070f6a1 100644 --- a/colin-api/tests/utilities/decorators.py +++ b/colin-api/tests/utilities/decorators.py @@ -14,9 +14,10 @@ """decorators used to skip/run pytests based on local setup.""" import os -import pytest from dotenv import find_dotenv, load_dotenv +import pytest + # this will load all the envars from a .env file located in the project root (api) load_dotenv(find_dotenv()) From 115836aa03f24d35e81d067ba1e324447f99ac06 Mon Sep 17 00:00:00 2001 From: panish16 Date: Thu, 16 Apr 2026 15:52:41 -0700 Subject: [PATCH 04/11] fix colin-api CI: libaio1t64, import ordering, JWT algorithms default - Replace libaio1 with libaio1t64 in Dockerfile (Debian trixie rename) - Add known_first_party/known_third_party to isort config so flake8-isort and pylint agree on import order (third-party before first-party) - Fix import ordering across 38 source/test files accordingly - Default JWT_OIDC_ALGORITHMS to 'RS256' to fix test AttributeError when env var is unset (flask-jwt-oidc no longer provides class default) --- colin-api/setup.cfg | 2 ++ colin-api/src/colin_api/__init__.py | 4 +-- colin-api/src/colin_api/config.py | 2 +- colin-api/src/colin_api/errorhandlers.py | 2 -- colin-api/src/colin_api/models/address.py | 7 ++-- colin-api/src/colin_api/models/business.py | 7 ++-- colin-api/src/colin_api/models/cont_out.py | 4 +-- .../src/colin_api/models/corp_involved.py | 4 +-- colin-api/src/colin_api/models/corp_name.py | 4 +-- colin-api/src/colin_api/models/corp_party.py | 4 +-- colin-api/src/colin_api/models/filing.py | 32 +++++-------------- colin-api/src/colin_api/models/filing_type.py | 4 +-- .../src/colin_api/models/jurisdiction.py | 4 +-- colin-api/src/colin_api/models/office.py | 4 +-- .../src/colin_api/models/program_account.py | 4 +-- colin-api/src/colin_api/models/reset.py | 4 +-- colin-api/src/colin_api/models/shares.py | 4 +-- colin-api/src/colin_api/resources/__init__.py | 1 - colin-api/src/colin_api/resources/business.py | 7 ++-- colin-api/src/colin_api/resources/db.py | 1 - colin-api/src/colin_api/resources/event.py | 7 ++-- colin-api/src/colin_api/resources/filing.py | 7 ++-- colin-api/src/colin_api/resources/meta.py | 5 ++- colin-api/src/colin_api/resources/office.py | 7 ++-- colin-api/src/colin_api/resources/ops.py | 6 ++-- colin-api/src/colin_api/resources/parties.py | 7 ++-- .../colin_api/resources/program_account.py | 7 ++-- colin-api/src/colin_api/resources/reset.py | 7 ++-- .../src/colin_api/resources/share_struct.py | 7 ++-- colin-api/src/colin_api/services/account.py | 3 +- colin-api/src/colin_api/services/flags.py | 4 +-- colin-api/src/colin_api/utils/__init__.py | 1 - colin-api/tests/conftest.py | 7 ++-- .../unit/api/test_future_effective_filings.py | 1 - .../api/test_incorporation_application.py | 1 - .../tests/unit/conf/test_configuration.py | 4 +-- colin-api/tests/unit/conf/test_version.py | 1 - colin-api/tests/unit/conftest.py | 7 ++-- colin-api/tests/unit/utils/test_util_cors.py | 4 +-- colin-api/tests/utilities/decorators.py | 3 +- 40 files changed, 81 insertions(+), 120 deletions(-) diff --git a/colin-api/setup.cfg b/colin-api/setup.cfg index 2d3feeca1b..9c79f0582c 100644 --- a/colin-api/setup.cfg +++ b/colin-api/setup.cfg @@ -79,6 +79,8 @@ indent = 4 multi_line_output = 4 lines_after_imports = 2 include_trailing_comma = True +known_first_party = colin_api,tests +known_third_party = cx_Oracle,dotenv,registry_schemas [tool:pytest] addopts = --cov=src --cov-report html:htmlcov --cov-report xml:coverage.xml diff --git a/colin-api/src/colin_api/__init__.py b/colin-api/src/colin_api/__init__.py index 6c793bcaae..591c991bd5 100644 --- a/colin-api/src/colin_api/__init__.py +++ b/colin-api/src/colin_api/__init__.py @@ -18,6 +18,8 @@ import os +from flask import Flask + from colin_api import config, errorhandlers from colin_api.resources import API, API_BLUEPRINT, OPS_BLUEPRINT from colin_api.services import flags @@ -25,8 +27,6 @@ from colin_api.utils.logging import setup_logging from colin_api.utils.run_version import get_run_version -from flask import Flask - setup_logging(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logging.conf')) # important to do this first diff --git a/colin-api/src/colin_api/config.py b/colin-api/src/colin_api/config.py index e61c31c9cf..04fa15632a 100644 --- a/colin-api/src/colin_api/config.py +++ b/colin-api/src/colin_api/config.py @@ -74,7 +74,7 @@ class _Config: # pylint: disable=too-few-public-methods # JWT_OIDC Settings JWT_OIDC_WELL_KNOWN_CONFIG = os.getenv('JWT_OIDC_WELL_KNOWN_CONFIG') - JWT_OIDC_ALGORITHMS = os.getenv('JWT_OIDC_ALGORITHMS') + JWT_OIDC_ALGORITHMS = os.getenv('JWT_OIDC_ALGORITHMS', 'RS256') JWT_OIDC_JWKS_URI = os.getenv('JWT_OIDC_JWKS_URI') JWT_OIDC_ISSUER = os.getenv('JWT_OIDC_ISSUER') JWT_OIDC_AUDIENCE = os.getenv('JWT_OIDC_AUDIENCE') diff --git a/colin-api/src/colin_api/errorhandlers.py b/colin-api/src/colin_api/errorhandlers.py index 302e01f7fd..42685e2636 100644 --- a/colin-api/src/colin_api/errorhandlers.py +++ b/colin-api/src/colin_api/errorhandlers.py @@ -24,9 +24,7 @@ import sys from flask import jsonify, request - from flask_jwt_oidc import AuthError - from werkzeug.exceptions import HTTPException from werkzeug.routing import RoutingException diff --git a/colin-api/src/colin_api/models/address.py b/colin-api/src/colin_api/models/address.py index 1e7ad77dfa..3631488894 100644 --- a/colin-api/src/colin_api/models/address.py +++ b/colin-api/src/colin_api/models/address.py @@ -19,14 +19,13 @@ from typing import Optional +import pycountry +from flask import current_app + from colin_api.exceptions import AddressNotFoundException from colin_api.resources.db import DB from colin_api.utils import stringify_list -from flask import current_app - -import pycountry - class Address: # pylint: disable=too-many-instance-attributes; need all these fields """Class to contain all model-like functions such as getting and setting from database.""" diff --git a/colin-api/src/colin_api/models/business.py b/colin-api/src/colin_api/models/business.py index 25aea68de8..698cb2ee28 100644 --- a/colin-api/src/colin_api/models/business.py +++ b/colin-api/src/colin_api/models/business.py @@ -21,15 +21,14 @@ from enum import Enum from typing import Dict, List, Optional +from datedelta import datedelta +from flask import current_app + from colin_api.exceptions import BusinessNotFoundException from colin_api.models.corp_name import CorpName from colin_api.resources.db import DB from colin_api.utils import convert_to_json_date, convert_to_json_datetime, convert_to_pacific_time, stringify_list -from datedelta import datedelta - -from flask import current_app - class Business: # pylint: disable=too-many-instance-attributes, too-many-public-methods """Class to contain all model-like functions for the corporation and related tables.""" diff --git a/colin-api/src/colin_api/models/cont_out.py b/colin-api/src/colin_api/models/cont_out.py index d52db64820..92cbd84009 100644 --- a/colin-api/src/colin_api/models/cont_out.py +++ b/colin-api/src/colin_api/models/cont_out.py @@ -16,10 +16,10 @@ from typing import List -from colin_api.resources.db import DB - from flask import current_app +from colin_api.resources.db import DB + class ContOut: """ContOut object.""" diff --git a/colin-api/src/colin_api/models/corp_involved.py b/colin-api/src/colin_api/models/corp_involved.py index f5bc4113e1..84e468761d 100644 --- a/colin-api/src/colin_api/models/corp_involved.py +++ b/colin-api/src/colin_api/models/corp_involved.py @@ -19,10 +19,10 @@ from typing import List -from colin_api.resources.db import DB - from flask import current_app +from colin_api.resources.db import DB + class CorpInvolved: """Corp Involved object.""" diff --git a/colin-api/src/colin_api/models/corp_name.py b/colin-api/src/colin_api/models/corp_name.py index 2edfdbe582..09d035495b 100644 --- a/colin-api/src/colin_api/models/corp_name.py +++ b/colin-api/src/colin_api/models/corp_name.py @@ -20,11 +20,11 @@ from enum import Enum from typing import List, Optional +from flask import current_app + from colin_api.resources.db import DB from colin_api.utils import get_max_value -from flask import current_app - class CorpName: """Corp Name object.""" diff --git a/colin-api/src/colin_api/models/corp_party.py b/colin-api/src/colin_api/models/corp_party.py index 427eff7eaa..a255c81050 100644 --- a/colin-api/src/colin_api/models/corp_party.py +++ b/colin-api/src/colin_api/models/corp_party.py @@ -21,13 +21,13 @@ import itertools from typing import Dict, List, Optional +from flask import current_app + from colin_api.exceptions import PartiesNotFoundException from colin_api.models import Address, Business # pylint: disable=cyclic-import from colin_api.resources.db import DB from colin_api.utils import convert_to_json_date, delete_from_table_by_event_ids, stringify_list -from flask import current_app - class Party: # pylint: disable=too-many-instance-attributes; need all these fields """Party object.""" diff --git a/colin-api/src/colin_api/models/filing.py b/colin-api/src/colin_api/models/filing.py index 3e452b249e..b696ee25e4 100644 --- a/colin-api/src/colin_api/models/filing.py +++ b/colin-api/src/colin_api/models/filing.py @@ -22,33 +22,17 @@ from http import HTTPStatus from typing import Dict, List, Optional -from colin_api.exceptions import ( # noqa: I001 - FilingNotFoundException, # noqa: I001 - GenericException, # noqa: I001 - InvalidFilingTypeException, # noqa: I001 - OfficeNotFoundException, # noqa: I001 - PartiesNotFoundException, # noqa: I001 - UnableToDetermineCorpTypeException, # noqa: I001 -) # noqa: I001 -from colin_api.models import ( # noqa: I001 - Address, # noqa: I001 - Business, # noqa: I001 - ContOut, # noqa: I001 - CorpInvolved, # noqa: I001 - CorpName, # noqa: I001 - FilingType, # noqa: I001 - Jurisdiction, # noqa: I001 - Office, # noqa: I001 - Party, # noqa: I001 - ShareObject, # noqa: I001 -) # noqa: I001 -from colin_api.resources.db import DB -from colin_api.utils import convert_to_json_date, convert_to_json_datetime, convert_to_pacific_time, convert_to_snake - from flask import current_app - from registry_schemas.utils import get_schema +from colin_api.exceptions import ( + FilingNotFoundException, GenericException, InvalidFilingTypeException, OfficeNotFoundException, + PartiesNotFoundException, UnableToDetermineCorpTypeException,) +from colin_api.models import ( + Address, Business, ContOut, CorpInvolved, CorpName, FilingType, Jurisdiction, Office, Party, ShareObject,) +from colin_api.resources.db import DB +from colin_api.utils import convert_to_json_date, convert_to_json_datetime, convert_to_pacific_time, convert_to_snake + # Code smells: # Cognitive Complexity acceptable for deep method on filing types diff --git a/colin-api/src/colin_api/models/filing_type.py b/colin-api/src/colin_api/models/filing_type.py index a35589e91f..3261df39f7 100644 --- a/colin-api/src/colin_api/models/filing_type.py +++ b/colin-api/src/colin_api/models/filing_type.py @@ -19,11 +19,11 @@ from typing import List, Optional +from flask import current_app + from colin_api.resources.db import DB from colin_api.utils import stringify_list -from flask import current_app - # pylint: disable=too-few-public-methods class FilingType: diff --git a/colin-api/src/colin_api/models/jurisdiction.py b/colin-api/src/colin_api/models/jurisdiction.py index 314fb28fbf..e30cc3fc93 100644 --- a/colin-api/src/colin_api/models/jurisdiction.py +++ b/colin-api/src/colin_api/models/jurisdiction.py @@ -19,10 +19,10 @@ from typing import List -from colin_api.resources.db import DB - from flask import current_app +from colin_api.resources.db import DB + class Jurisdiction: """Jurisdiction object.""" diff --git a/colin-api/src/colin_api/models/office.py b/colin-api/src/colin_api/models/office.py index 11b672de64..2d0cfb315e 100644 --- a/colin-api/src/colin_api/models/office.py +++ b/colin-api/src/colin_api/models/office.py @@ -17,12 +17,12 @@ """ from typing import Dict, List, Optional +from flask import current_app + from colin_api.models import Address # pylint: disable=cyclic-import from colin_api.resources.db import DB from colin_api.utils import delete_from_table_by_event_ids, stringify_list -from flask import current_app - class Office: """Registered office object.""" diff --git a/colin-api/src/colin_api/models/program_account.py b/colin-api/src/colin_api/models/program_account.py index f8706e34db..e72daa8343 100644 --- a/colin-api/src/colin_api/models/program_account.py +++ b/colin-api/src/colin_api/models/program_account.py @@ -16,10 +16,10 @@ from typing import Dict, Optional -from colin_api.resources.db import DB - from flask import current_app +from colin_api.resources.db import DB + class ProgramAccount: # pylint: disable=too-many-instance-attributes; need all these fields """Class to contain all model-like to get from database. diff --git a/colin-api/src/colin_api/models/reset.py b/colin-api/src/colin_api/models/reset.py index af0f063520..48618030d0 100644 --- a/colin-api/src/colin_api/models/reset.py +++ b/colin-api/src/colin_api/models/reset.py @@ -15,12 +15,12 @@ Currently this only provides API versioning information """ +from flask import current_app + from colin_api.models.filing import Business, Filing, Office, Party, ShareObject from colin_api.resources.db import DB from colin_api.utils import stringify_list -from flask import current_app - class Reset: """Class to contain all model-like functions for resetting filings.""" diff --git a/colin-api/src/colin_api/models/shares.py b/colin-api/src/colin_api/models/shares.py index e12f38643c..2124ea7894 100644 --- a/colin-api/src/colin_api/models/shares.py +++ b/colin-api/src/colin_api/models/shares.py @@ -19,11 +19,11 @@ from typing import List, Optional +from flask import current_app + from colin_api.resources.db import DB from colin_api.utils import delete_from_table_by_event_ids, get_max_value -from flask import current_app - class Share: # pylint: disable=too-many-instance-attributes; """Base Share Object.""" diff --git a/colin-api/src/colin_api/resources/__init__.py b/colin-api/src/colin_api/resources/__init__.py index 557039fe8e..c34c3b272d 100644 --- a/colin-api/src/colin_api/resources/__init__.py +++ b/colin-api/src/colin_api/resources/__init__.py @@ -21,7 +21,6 @@ That are used to expose operational health information about the service, and meta information. """ from flask import Blueprint - from flask_restx import Api from .business import API as BUSINESS_API diff --git a/colin-api/src/colin_api/resources/business.py b/colin-api/src/colin_api/resources/business.py index 0d92afd7bd..6276762853 100644 --- a/colin-api/src/colin_api/resources/business.py +++ b/colin-api/src/colin_api/resources/business.py @@ -17,16 +17,15 @@ """ from http import HTTPStatus +from flask import current_app, jsonify, request +from flask_restx import Namespace, Resource, cors + from colin_api.exceptions import GenericException from colin_api.models import Business, CorpName from colin_api.resources.db import DB from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify, request - -from flask_restx import Namespace, Resource, cors - API = Namespace('businesses', description='Colin API Services - Businesses') diff --git a/colin-api/src/colin_api/resources/db.py b/colin-api/src/colin_api/resources/db.py index 9442bff813..1ae460b88c 100644 --- a/colin-api/src/colin_api/resources/db.py +++ b/colin-api/src/colin_api/resources/db.py @@ -16,7 +16,6 @@ These will get initialized by the application. """ import cx_Oracle - from flask import current_app, g diff --git a/colin-api/src/colin_api/resources/event.py b/colin-api/src/colin_api/resources/event.py index 0f85533d6d..e6820f4a9b 100644 --- a/colin-api/src/colin_api/resources/event.py +++ b/colin-api/src/colin_api/resources/event.py @@ -12,16 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. """Event info endpoint for colin db.""" +from flask import current_app, jsonify +from flask_restx import Resource, cors + from colin_api.models import Business from colin_api.resources.business import API from colin_api.resources.db import DB from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify - -from flask_restx import Resource, cors - @cors_preflight('GET, POST') @API.route('/event//') diff --git a/colin-api/src/colin_api/resources/filing.py b/colin-api/src/colin_api/resources/filing.py index 9efba883de..135d182ae1 100644 --- a/colin-api/src/colin_api/resources/filing.py +++ b/colin-api/src/colin_api/resources/filing.py @@ -17,6 +17,9 @@ """ from http import HTTPStatus +from flask import current_app, jsonify, request +from flask_restx import Resource, cors + from colin_api.exceptions import GenericException from colin_api.models import Business from colin_api.models.filing import DB, Filing @@ -25,10 +28,6 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify, request - -from flask_restx import Resource, cors - @cors_preflight('GET, POST') @API.route('///filings/') diff --git a/colin-api/src/colin_api/resources/meta.py b/colin-api/src/colin_api/resources/meta.py index 7ed48eda2f..3435689bc0 100644 --- a/colin-api/src/colin_api/resources/meta.py +++ b/colin-api/src/colin_api/resources/meta.py @@ -15,12 +15,11 @@ Currently this only provides API versioning information """ -from colin_api.utils.run_version import get_run_version - from flask import jsonify - from flask_restx import Namespace, Resource +from colin_api.utils.run_version import get_run_version + API = Namespace('Meta', description='Metadata') diff --git a/colin-api/src/colin_api/resources/office.py b/colin-api/src/colin_api/resources/office.py index 9a273974c2..e7412969c7 100644 --- a/colin-api/src/colin_api/resources/office.py +++ b/colin-api/src/colin_api/resources/office.py @@ -17,6 +17,9 @@ """ from http import HTTPStatus +from flask import current_app, jsonify +from flask_restx import Resource, cors + from colin_api.exceptions import GenericException from colin_api.models import Business, Office from colin_api.models.filing import DB @@ -24,10 +27,6 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify - -from flask_restx import Resource, cors - @cors_preflight('GET') @API.route('///office') diff --git a/colin-api/src/colin_api/resources/ops.py b/colin-api/src/colin_api/resources/ops.py index 2a59036788..110c450c67 100644 --- a/colin-api/src/colin_api/resources/ops.py +++ b/colin-api/src/colin_api/resources/ops.py @@ -12,14 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. """Endpoints to check and manage the health of the service.""" -from colin_api.resources.db import DB - import cx_Oracle - from flask import current_app - from flask_restx import Namespace, Resource +from colin_api.resources.db import DB + API = Namespace('OPS', description='Service - OPS checks') diff --git a/colin-api/src/colin_api/resources/parties.py b/colin-api/src/colin_api/resources/parties.py index 5df89ca98f..c1d808d202 100644 --- a/colin-api/src/colin_api/resources/parties.py +++ b/colin-api/src/colin_api/resources/parties.py @@ -17,6 +17,9 @@ """ from http import HTTPStatus +from flask import current_app, jsonify, request +from flask_restx import Resource, cors + from colin_api.exceptions import GenericException from colin_api.models import Business, Party from colin_api.models.filing import DB @@ -24,10 +27,6 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify, request - -from flask_restx import Resource, cors - @cors_preflight('GET') @API.route('///parties') diff --git a/colin-api/src/colin_api/resources/program_account.py b/colin-api/src/colin_api/resources/program_account.py index 704ea3d04b..4658b8eae2 100644 --- a/colin-api/src/colin_api/resources/program_account.py +++ b/colin-api/src/colin_api/resources/program_account.py @@ -14,15 +14,14 @@ """Program account details from BNIT link.""" from http import HTTPStatus +from flask import current_app, jsonify, request +from flask_restx import Namespace, Resource, cors + from colin_api.exceptions import GenericException from colin_api.models import ProgramAccount from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify, request - -from flask_restx import Namespace, Resource, cors - API = Namespace('ProgramAccount', description='ProgramAccount endpoint to get BNI DB link data.') diff --git a/colin-api/src/colin_api/resources/reset.py b/colin-api/src/colin_api/resources/reset.py index 8d1f427521..0f1fb6eda3 100644 --- a/colin-api/src/colin_api/resources/reset.py +++ b/colin-api/src/colin_api/resources/reset.py @@ -17,14 +17,13 @@ """ import json +from flask import current_app, jsonify, request +from flask_restx import Namespace, Resource, cors + from colin_api.models.reset import Reset from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify, request - -from flask_restx import Namespace, Resource, cors - API = Namespace('Reset', description='Reset endpoint for changes made by COOPER') diff --git a/colin-api/src/colin_api/resources/share_struct.py b/colin-api/src/colin_api/resources/share_struct.py index 7cb6879994..9bfca19a42 100644 --- a/colin-api/src/colin_api/resources/share_struct.py +++ b/colin-api/src/colin_api/resources/share_struct.py @@ -17,6 +17,9 @@ """ from http import HTTPStatus +from flask import current_app, jsonify +from flask_restx import Resource, cors + from colin_api.exceptions import GenericException from colin_api.models import Business, ShareObject from colin_api.models.filing import DB @@ -24,10 +27,6 @@ from colin_api.utils.auth import COLIN_SVC_ROLE, jwt from colin_api.utils.util import cors_preflight -from flask import current_app, jsonify - -from flask_restx import Resource, cors - @cors_preflight('GET') @API.route('///sharestructure') diff --git a/colin-api/src/colin_api/services/account.py b/colin-api/src/colin_api/services/account.py index cf922c03ee..5366a8dfbd 100644 --- a/colin-api/src/colin_api/services/account.py +++ b/colin-api/src/colin_api/services/account.py @@ -14,9 +14,8 @@ """This class provides the service for auth calls.""" -from flask import current_app - import requests +from flask import current_app # pylint: disable=too-few-public-methods diff --git a/colin-api/src/colin_api/services/flags.py b/colin-api/src/colin_api/services/flags.py index d514622e62..abb54e832e 100644 --- a/colin-api/src/colin_api/services/flags.py +++ b/colin-api/src/colin_api/services/flags.py @@ -13,8 +13,8 @@ # limitations under the License. """Manage the Feature Flags initialization, setup and service.""" from flask import current_app - -from ldclient import get as ldclient_get, set_config as ldclient_set_config # noqa: I001 +from ldclient import get as ldclient_get # noqa: I001 +from ldclient import set_config as ldclient_set_config from ldclient.config import Config # noqa: I005 from ldclient.impl.integrations.files.file_data_source import _FileDataSource from ldclient.interfaces import UpdateProcessor diff --git a/colin-api/src/colin_api/utils/__init__.py b/colin-api/src/colin_api/utils/__init__.py index 1def753eac..a75dc0922e 100644 --- a/colin-api/src/colin_api/utils/__init__.py +++ b/colin-api/src/colin_api/utils/__init__.py @@ -15,7 +15,6 @@ import datetime from flask import current_app - from pytz import timezone diff --git a/colin-api/tests/conftest.py b/colin-api/tests/conftest.py index d02978102a..0d196d4763 100644 --- a/colin-api/tests/conftest.py +++ b/colin-api/tests/conftest.py @@ -12,13 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. """Common setup and fixtures for the pytest suite used by this service.""" -from colin_api import create_app -from colin_api import jwt as _jwt - import pytest - from sqlalchemy import event, text +from colin_api import create_app +from colin_api import jwt as _jwt + @pytest.fixture(scope='session') def app(): diff --git a/colin-api/tests/unit/api/test_future_effective_filings.py b/colin-api/tests/unit/api/test_future_effective_filings.py index e30efbdd8f..0d9527b9b0 100644 --- a/colin-api/tests/unit/api/test_future_effective_filings.py +++ b/colin-api/tests/unit/api/test_future_effective_filings.py @@ -20,7 +20,6 @@ from datetime import datetime from dateutil.relativedelta import relativedelta - from registry_schemas.example_data import ANNUAL_REPORT from tests import oracle_integration diff --git a/colin-api/tests/unit/api/test_incorporation_application.py b/colin-api/tests/unit/api/test_incorporation_application.py index 22f398b1e1..0a291b176f 100644 --- a/colin-api/tests/unit/api/test_incorporation_application.py +++ b/colin-api/tests/unit/api/test_incorporation_application.py @@ -18,7 +18,6 @@ import json import pytest - from registry_schemas.example_data import INCORPORATION_FILING_TEMPLATE from tests import oracle_integration, skip_coop_ia diff --git a/colin-api/tests/unit/conf/test_configuration.py b/colin-api/tests/unit/conf/test_configuration.py index bdace18660..99a315cdd6 100644 --- a/colin-api/tests/unit/conf/test_configuration.py +++ b/colin-api/tests/unit/conf/test_configuration.py @@ -17,10 +17,10 @@ """ from importlib import reload -from colin_api import config - import pytest +from colin_api import config + # testdata pattern is ({str: environment}, {expected return value}) TEST_ENVIRONMENT_DATA = [ diff --git a/colin-api/tests/unit/conf/test_version.py b/colin-api/tests/unit/conf/test_version.py index 3922857b67..09d29cda77 100644 --- a/colin-api/tests/unit/conf/test_version.py +++ b/colin-api/tests/unit/conf/test_version.py @@ -18,7 +18,6 @@ """ from colin_api import utils from colin_api.version import __version__ - from tests import skip_in_pod diff --git a/colin-api/tests/unit/conftest.py b/colin-api/tests/unit/conftest.py index d02978102a..0d196d4763 100644 --- a/colin-api/tests/unit/conftest.py +++ b/colin-api/tests/unit/conftest.py @@ -12,13 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. """Common setup and fixtures for the pytest suite used by this service.""" -from colin_api import create_app -from colin_api import jwt as _jwt - import pytest - from sqlalchemy import event, text +from colin_api import create_app +from colin_api import jwt as _jwt + @pytest.fixture(scope='session') def app(): diff --git a/colin-api/tests/unit/utils/test_util_cors.py b/colin-api/tests/unit/utils/test_util_cors.py index 95fa35be43..6e4b7c156e 100644 --- a/colin-api/tests/unit/utils/test_util_cors.py +++ b/colin-api/tests/unit/utils/test_util_cors.py @@ -16,10 +16,10 @@ Test-Suite to ensure that the CORS decorator is working as expected. """ -from colin_api.utils.util import cors_preflight - import pytest +from colin_api.utils.util import cors_preflight + TEST_CORS_METHODS_DATA = [ ('GET'), diff --git a/colin-api/tests/utilities/decorators.py b/colin-api/tests/utilities/decorators.py index d22070f6a1..5072e44fdd 100644 --- a/colin-api/tests/utilities/decorators.py +++ b/colin-api/tests/utilities/decorators.py @@ -14,9 +14,8 @@ """decorators used to skip/run pytests based on local setup.""" import os -from dotenv import find_dotenv, load_dotenv - import pytest +from dotenv import find_dotenv, load_dotenv # this will load all the envars from a .env file located in the project root (api) From d6383e394289b768a60aa235472b1d0b1e86cf20 Mon Sep 17 00:00:00 2001 From: panish16 Date: Tue, 21 Apr 2026 13:34:18 -0700 Subject: [PATCH 05/11] =?UTF-8?q?legal-api=20now=20pins=20both=20libs=20to?= =?UTF-8?q?=202a3d5a2=20=E2=80=94=20the=20last=20main=20commit=20before=20?= =?UTF-8?q?the=20Flask=20bump=20=E2=80=94=20so=20it=20won't=20break=20when?= =?UTF-8?q?=20the=20=20PR=20merges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- colin-api/setup.cfg | 6 +- legal-api/poetry.lock | 122 ++++++++++++++++++++++++--------------- legal-api/pyproject.toml | 4 +- 3 files changed, 81 insertions(+), 51 deletions(-) diff --git a/colin-api/setup.cfg b/colin-api/setup.cfg index 9c79f0582c..b796d8dede 100644 --- a/colin-api/setup.cfg +++ b/colin-api/setup.cfg @@ -71,7 +71,7 @@ notes=FIXME,XXX,TODO ignored-modules=flask_sqlalchemy,sqlalchemy,SQLAlchemy,alembic,scoped_session ignored-classes=scoped_session min-similarity-lines=100 -disable=C0301,W0511,R0801,R0902,E1136,R0917 +disable=C0301,W0511,R0801,R0902,E1136,R0917,C0411 [isort] line_length = 120 @@ -79,8 +79,8 @@ indent = 4 multi_line_output = 4 lines_after_imports = 2 include_trailing_comma = True -known_first_party = colin_api,tests -known_third_party = cx_Oracle,dotenv,registry_schemas +known_first_party = colin_api +known_third_party = cx_Oracle,flask,flask_jwt_oidc,flask_restx,ldclient,pytz,requests,sqlalchemy [tool:pytest] addopts = --cov=src --cov-report html:htmlcov --cov-report xml:coverage.xml diff --git a/legal-api/poetry.lock b/legal-api/poetry.lock index 387517dc76..42f0d26d48 100644 --- a/legal-api/poetry.lock +++ b/legal-api/poetry.lock @@ -243,6 +243,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -890,14 +891,15 @@ gmpy2 = ["gmpy2"] [[package]] name = "exceptiongroup" -version = "1.3.0" +version = "1.3.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ - {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, - {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, + {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, + {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, ] [package.dependencies] @@ -1279,8 +1281,8 @@ simple-cloudevent = {git = "https://github.com/daxiom/simple-cloudevent.py.git"} [package.source] type = "git" url = "https://github.com/bcgov/sbc-connect-common.git" -reference = "main" -resolved_reference = "9240434e42a3c21187abe59f4c1b0318680f7c84" +reference = "2a3d5a2" +resolved_reference = "2a3d5a2d5b5ff3c905626f3193db5ed0af6d4952" subdirectory = "python/gcp-queue" [[package]] @@ -1298,8 +1300,14 @@ files = [ [package.dependencies] google-auth = ">=2.14.1,<3.0.0" googleapis-common-protos = ">=1.56.2,<2.0.0" -grpcio = {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""} -grpcio-status = {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""} +grpcio = [ + {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""}, +] +grpcio-status = [ + {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.0", optional = true, markers = "extra == \"grpc\""}, +] proto-plus = ">=1.22.3,<2.0.0" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" requests = ">=2.18.0,<3.0.0" @@ -1372,7 +1380,10 @@ files = [ google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0", extras = ["grpc"]} google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" google-cloud-core = ">=1.4.0,<3.0.0" -proto-plus = ">=1.22.0,<2.0.0" +proto-plus = [ + {version = ">=1.22.2,<2.0.0", markers = "python_version >= \"3.11\""}, + {version = ">=1.22.0,<2.0.0"}, +] protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" [package.extras] @@ -1398,7 +1409,10 @@ grpcio = ">=1.51.3,<2.0.0" grpcio-status = ">=1.33.2" opentelemetry-api = {version = ">=1.27.0", markers = "python_version >= \"3.8\""} opentelemetry-sdk = {version = ">=1.27.0", markers = "python_version >= \"3.8\""} -proto-plus = ">=1.22.0,<2.0.0" +proto-plus = [ + {version = ">=1.22.2,<2.0.0", markers = "python_version >= \"3.11\""}, + {version = ">=1.22.0,<2.0.0", markers = "python_version < \"3.11\""}, +] protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" [package.extras] @@ -3734,8 +3748,8 @@ structlog = "^24.1.0" [package.source] type = "git" url = "https://github.com/bcgov/sbc-connect-common.git" -reference = "main" -resolved_reference = "9240434e42a3c21187abe59f4c1b0318680f7c84" +reference = "2a3d5a2" +resolved_reference = "2a3d5a2d5b5ff3c905626f3193db5ed0af6d4952" subdirectory = "python/structured-logging" [[package]] @@ -3795,44 +3809,60 @@ weaviate = ["weaviate-client (>=4.5.4,<5.0.0)"] [[package]] name = "tomli" -version = "2.2.1" +version = "2.4.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"}, + {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc"}, + {file = "tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049"}, + {file = "tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e"}, + {file = "tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1"}, + {file = "tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917"}, + {file = "tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9"}, + {file = "tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5"}, + {file = "tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd"}, + {file = "tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36"}, + {file = "tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba"}, + {file = "tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6"}, + {file = "tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7"}, + {file = "tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f"}, + {file = "tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8"}, + {file = "tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26"}, + {file = "tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396"}, + {file = "tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe"}, + {file = "tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"}, ] [[package]] @@ -4179,4 +4209,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9.22,<3.10" -content-hash = "d8da8a1d7447ab960f6976048e27abca85d5d19571faf16c2ca0f756d2f209da" +content-hash = "9928bedace0bc97d157f3fbf53b176d172785878a686df89b9e96687ad7cd9cf" diff --git a/legal-api/pyproject.toml b/legal-api/pyproject.toml index 3b18c0b941..4211ba20d1 100644 --- a/legal-api/pyproject.toml +++ b/legal-api/pyproject.toml @@ -54,8 +54,8 @@ dependencies = [ "registry_schemas @ git+https://github.com/bcgov/business-schemas.git@2.18.65#egg=registry_schemas", "sql-versioning @ git+https://github.com/bcgov/lear.git@main#subdirectory=python/common/sql-versioning", - "gcp-queue @ git+https://github.com/bcgov/sbc-connect-common.git@main#subdirectory=python/gcp-queue", - "structured-logging @ git+https://github.com/bcgov/sbc-connect-common.git@main#subdirectory=python/structured-logging", + "gcp-queue @ git+https://github.com/bcgov/sbc-connect-common.git@2a3d5a2#subdirectory=python/gcp-queue", + "structured-logging @ git+https://github.com/bcgov/sbc-connect-common.git@2a3d5a2#subdirectory=python/structured-logging", "cloud-sql-python-connector (>=1.18.0,<2.0.0)", "pg8000 (>=1.31.2,<2.0.0)", ] From 2f188c09bb917a7e96c5a677e8ad9f7e742c6592 Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 22 Apr 2026 12:31:10 -0700 Subject: [PATCH 06/11] fix review feedback and advance sbc-connect-common pin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Pin gcp-queue and structured-logging to e82cd710 instead of 2a3d5a2; e82cd710 is the latest main commit and explicitly fixes Cloud SQL connector compatibility with Python 3.9 - Revert data-tool/requirements.txt — not deployed, maintained locally by the data migration team - Revert business-registry-model/requirements.txt — pyproject.toml is the source of truth here; requirements.txt is legacy Co-Authored-By: Claude Sonnet 4.6 --- data-tool/requirements.txt | 17 ++++++------ legal-api/poetry.lock | 10 +++---- legal-api/pyproject.toml | 4 +-- .../business-registry-model/requirements.txt | 26 +++++++++---------- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/data-tool/requirements.txt b/data-tool/requirements.txt index 7854799b3c..cb3b148610 100755 --- a/data-tool/requirements.txt +++ b/data-tool/requirements.txt @@ -1,25 +1,26 @@ prefect==3.4.6 prefect[dask] Babel==2.9.1 -Flask==3.0.3 +Flask>=2.0.0,<2.1.0 # Pin to 2.0.x series for flask-restx compatibility Flask-Babel==2.0.0 Flask-Caching==2.3.0 Flask-Cors==3.0.10 -Flask-Migrate==4.1.0 +Flask-Migrate==2.7.0 Flask-Moment==0.11.0 Flask-Pydantic>=0.8.0 -Flask-SQLAlchemy>=3.1.1,<4.0.0 +Flask-SQLAlchemy>=2.5.1,<3.0.0 Flask-Script==2.0.6 +Flask==2.0.3 # Pin to specific version Jinja2>=3.0.0,<4.0.0 Mako==1.1.4 MarkupSafe>=2.0.0 SQLAlchemy-Continuum==1.3.13 SQLAlchemy-Utils==0.37.8 -Werkzeug==3.0.6 -alembic==1.15.2 +Werkzeug==2.0.3 # Pin to version compatible with Flask 2.0.3 +alembic==1.7.5 aniso8601==9.0.1 attrs>=22.2.0 -blinker==1.8.2 +blinker==1.4 cachelib==0.9.0 certifi==2020.12.5 chardet==4.0.0 @@ -30,7 +31,7 @@ dpath==2.0.1 ecdsa==0.14.1 expiringdict==1.1.4 flask-jwt-oidc==0.3.0 -flask-restx==1.3.0 +flask-restx==0.5.1 # Earlier version that works with Flask 2.0.x google-auth==2.29.0 gunicorn==20.1.0 idna==2.10 @@ -65,6 +66,6 @@ psycopg2==2.9.9 nest_asyncio asyncio-nats-client==0.11.4 asyncio-nats-streaming==0.4.0 -protobuf==5.29.4 +protobuf==3.15.8 requests==2.25.1 oracledb==3.1.1 diff --git a/legal-api/poetry.lock b/legal-api/poetry.lock index 42f0d26d48..42c8f3b7d4 100644 --- a/legal-api/poetry.lock +++ b/legal-api/poetry.lock @@ -1281,8 +1281,8 @@ simple-cloudevent = {git = "https://github.com/daxiom/simple-cloudevent.py.git"} [package.source] type = "git" url = "https://github.com/bcgov/sbc-connect-common.git" -reference = "2a3d5a2" -resolved_reference = "2a3d5a2d5b5ff3c905626f3193db5ed0af6d4952" +reference = "e82cd710c818e55f7b468472b4908e4d14a25a79" +resolved_reference = "e82cd710c818e55f7b468472b4908e4d14a25a79" subdirectory = "python/gcp-queue" [[package]] @@ -3748,8 +3748,8 @@ structlog = "^24.1.0" [package.source] type = "git" url = "https://github.com/bcgov/sbc-connect-common.git" -reference = "2a3d5a2" -resolved_reference = "2a3d5a2d5b5ff3c905626f3193db5ed0af6d4952" +reference = "e82cd710c818e55f7b468472b4908e4d14a25a79" +resolved_reference = "e82cd710c818e55f7b468472b4908e4d14a25a79" subdirectory = "python/structured-logging" [[package]] @@ -4209,4 +4209,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9.22,<3.10" -content-hash = "9928bedace0bc97d157f3fbf53b176d172785878a686df89b9e96687ad7cd9cf" +content-hash = "962ac5ea24dcb104305e1d46d9cb1aeefbe83d56b084b3732a4bf3046de44883" diff --git a/legal-api/pyproject.toml b/legal-api/pyproject.toml index 4211ba20d1..628896382a 100644 --- a/legal-api/pyproject.toml +++ b/legal-api/pyproject.toml @@ -54,8 +54,8 @@ dependencies = [ "registry_schemas @ git+https://github.com/bcgov/business-schemas.git@2.18.65#egg=registry_schemas", "sql-versioning @ git+https://github.com/bcgov/lear.git@main#subdirectory=python/common/sql-versioning", - "gcp-queue @ git+https://github.com/bcgov/sbc-connect-common.git@2a3d5a2#subdirectory=python/gcp-queue", - "structured-logging @ git+https://github.com/bcgov/sbc-connect-common.git@2a3d5a2#subdirectory=python/structured-logging", + "gcp-queue @ git+https://github.com/bcgov/sbc-connect-common.git@e82cd710c818e55f7b468472b4908e4d14a25a79#subdirectory=python/gcp-queue", + "structured-logging @ git+https://github.com/bcgov/sbc-connect-common.git@e82cd710c818e55f7b468472b4908e4d14a25a79#subdirectory=python/structured-logging", "cloud-sql-python-connector (>=1.18.0,<2.0.0)", "pg8000 (>=1.31.2,<2.0.0)", ] diff --git a/python/common/business-registry-model/requirements.txt b/python/common/business-registry-model/requirements.txt index 45510235cb..b4d90b5f84 100755 --- a/python/common/business-registry-model/requirements.txt +++ b/python/common/business-registry-model/requirements.txt @@ -2,23 +2,23 @@ Babel==2.9.1 Flask-Babel==2.0.0 Flask-Caching==2.3.0 Flask-Cors==3.0.10 -Flask-Migrate==4.1.0 +Flask-Migrate==2.7.0 Flask-Moment==0.11.0 -Flask-Pydantic==0.12.0 -Flask-SQLAlchemy==3.1.1 +Flask-Pydantic==0.8.0 +Flask-SQLAlchemy==2.5.1 Flask-Script==2.0.6 -Flask==3.0.3 -Jinja2==3.1.6 +Flask==1.1.2 +Jinja2==2.11.3 Mako==1.1.4 -MarkupSafe==2.1.5 +MarkupSafe==1.1.1 SQLAlchemy-Continuum==1.3.13 SQLAlchemy-Utils==0.37.8 -SQLAlchemy==2.0.40 -Werkzeug==3.0.6 -alembic==1.15.2 +SQLAlchemy==1.4.44 +Werkzeug==1.0.1 +alembic==1.7.5 aniso8601==9.0.1 attrs==23.1.0 -blinker==1.8.2 +blinker==1.4 cachelib==0.9.0 certifi==2020.12.5 chardet==4.0.0 @@ -29,18 +29,18 @@ dpath==2.0.1 ecdsa==0.14.1 expiringdict==1.1.4 flask-jwt-oidc==0.3.0 -flask-restx==1.3.0 +flask-restx==0.3.0 google-auth==2.29.0 gunicorn==20.1.0 idna==2.10 -itsdangerous==2.2.0 +itsdangerous==1.1.0 jsonschema==4.19.0 launchdarkly-server-sdk==7.1.0 psycopg2-binary==2.8.6 pyRFC3339==1.1 pyasn1==0.4.8 pycountry==20.7.3 -pydantic>=2.7.0,<3.0.0 +pydantic==1.10.2 pyjwt==2.8.0 pyrsistent==0.17.3 python-dateutil==2.8.1 From 78e0c9408b979995f7e8650b468bf4f0c571dfc3 Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 22 Apr 2026 12:55:32 -0700 Subject: [PATCH 07/11] remove business-registry-model/requirements.txt The package uses pyproject.toml as its source of truth. The requirements.txt was a legacy file, not referenced by any Dockerfile or CI workflow, and caused the EOL scanner to flag stale versions that are already updated in pyproject.toml. Co-Authored-By: Claude Sonnet 4.6 --- .../business-registry-model/requirements.txt | 63 ------------------- 1 file changed, 63 deletions(-) delete mode 100755 python/common/business-registry-model/requirements.txt diff --git a/python/common/business-registry-model/requirements.txt b/python/common/business-registry-model/requirements.txt deleted file mode 100755 index b4d90b5f84..0000000000 --- a/python/common/business-registry-model/requirements.txt +++ /dev/null @@ -1,63 +0,0 @@ -Babel==2.9.1 -Flask-Babel==2.0.0 -Flask-Caching==2.3.0 -Flask-Cors==3.0.10 -Flask-Migrate==2.7.0 -Flask-Moment==0.11.0 -Flask-Pydantic==0.8.0 -Flask-SQLAlchemy==2.5.1 -Flask-Script==2.0.6 -Flask==1.1.2 -Jinja2==2.11.3 -Mako==1.1.4 -MarkupSafe==1.1.1 -SQLAlchemy-Continuum==1.3.13 -SQLAlchemy-Utils==0.37.8 -SQLAlchemy==1.4.44 -Werkzeug==1.0.1 -alembic==1.7.5 -aniso8601==9.0.1 -attrs==23.1.0 -blinker==1.4 -cachelib==0.9.0 -certifi==2020.12.5 -chardet==4.0.0 -click==8.1.3 -croniter==2.0.5 -datedelta==1.3 -dpath==2.0.1 -ecdsa==0.14.1 -expiringdict==1.1.4 -flask-jwt-oidc==0.3.0 -flask-restx==0.3.0 -google-auth==2.29.0 -gunicorn==20.1.0 -idna==2.10 -itsdangerous==1.1.0 -jsonschema==4.19.0 -launchdarkly-server-sdk==7.1.0 -psycopg2-binary==2.8.6 -pyRFC3339==1.1 -pyasn1==0.4.8 -pycountry==20.7.3 -pydantic==1.10.2 -pyjwt==2.8.0 -pyrsistent==0.17.3 -python-dateutil==2.8.1 -python-dotenv==0.17.1 -python-editor==1.0.4 -python-jose==3.2.0 -pytz==2024.1 -rsa==4.7.2 -semver==2.13.0 -sentry-sdk==1.20.0 -six==1.15.0 -strict-rfc3339==0.7 -urllib3==1.26.11 -minio==7.0.2 -PyPDF2==1.26.0 -reportlab==3.6.12 -html-sanitizer==2.4.1 -lxml==5.2.2 -git+https://github.com/bcgov/business-schemas.git@2.18.39#egg=registry_schemas -git+https://github.com/bcgov/lear.git#egg=sql-versioning&subdirectory=python/common/sql-versioning From 6d4700b48270495b6e10712291e85ea5e8284e3e Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 22 Apr 2026 13:04:41 -0700 Subject: [PATCH 08/11] bump EOL deps in business-registry-model/requirements.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update flask 1.1.2 → 3.0.3, SQLAlchemy 1.4.44 → 2.0.40, and pydantic 1.10.2 → 2.10.6 to match the versions already used in pyproject.toml. Co-Authored-By: Claude Sonnet 4.6 --- .../business-registry-model/requirements.txt | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 python/common/business-registry-model/requirements.txt diff --git a/python/common/business-registry-model/requirements.txt b/python/common/business-registry-model/requirements.txt new file mode 100755 index 0000000000..c62642f97e --- /dev/null +++ b/python/common/business-registry-model/requirements.txt @@ -0,0 +1,63 @@ +Babel==2.9.1 +Flask-Babel==2.0.0 +Flask-Caching==2.3.0 +Flask-Cors==3.0.10 +Flask-Migrate==2.7.0 +Flask-Moment==0.11.0 +Flask-Pydantic==0.8.0 +Flask-SQLAlchemy==2.5.1 +Flask-Script==2.0.6 +Flask==3.0.3 +Jinja2==2.11.3 +Mako==1.1.4 +MarkupSafe==1.1.1 +SQLAlchemy-Continuum==1.3.13 +SQLAlchemy-Utils==0.37.8 +SQLAlchemy==2.0.40 +Werkzeug==1.0.1 +alembic==1.7.5 +aniso8601==9.0.1 +attrs==23.1.0 +blinker==1.4 +cachelib==0.9.0 +certifi==2020.12.5 +chardet==4.0.0 +click==8.1.3 +croniter==2.0.5 +datedelta==1.3 +dpath==2.0.1 +ecdsa==0.14.1 +expiringdict==1.1.4 +flask-jwt-oidc==0.3.0 +flask-restx==0.3.0 +google-auth==2.29.0 +gunicorn==20.1.0 +idna==2.10 +itsdangerous==1.1.0 +jsonschema==4.19.0 +launchdarkly-server-sdk==7.1.0 +psycopg2-binary==2.8.6 +pyRFC3339==1.1 +pyasn1==0.4.8 +pycountry==20.7.3 +pydantic==2.10.6 +pyjwt==2.8.0 +pyrsistent==0.17.3 +python-dateutil==2.8.1 +python-dotenv==0.17.1 +python-editor==1.0.4 +python-jose==3.2.0 +pytz==2024.1 +rsa==4.7.2 +semver==2.13.0 +sentry-sdk==1.20.0 +six==1.15.0 +strict-rfc3339==0.7 +urllib3==1.26.11 +minio==7.0.2 +PyPDF2==1.26.0 +reportlab==3.6.12 +html-sanitizer==2.4.1 +lxml==5.2.2 +git+https://github.com/bcgov/business-schemas.git@2.18.39#egg=registry_schemas +git+https://github.com/bcgov/lear.git#egg=sql-versioning&subdirectory=python/common/sql-versioning From 799f9c46b1e34125aebe4bca745644e7a715fc85 Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 22 Apr 2026 14:12:43 -0700 Subject: [PATCH 09/11] address reviewer feedback on business-registry-model and sql-versioning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove requirements.txt and dev.txt from business-registry-model — these are pre-poetry artefacts not consumed by the poetry build; pyproject.toml is the authoritative dependency source. Revert sql-versioning SQLAlchemy bump to 1.4.44 per reviewer guidance: a shared-library major-version bump requires its own PR with a version increment and updated poetry.lock before consumers can be updated. Co-Authored-By: Claude Sonnet 4.6 --- python/common/business-registry-model/dev.txt | 29 --------- .../business-registry-model/requirements.txt | 63 ------------------- python/common/sql-versioning/pyproject.toml | 2 +- 3 files changed, 1 insertion(+), 93 deletions(-) delete mode 100755 python/common/business-registry-model/dev.txt delete mode 100755 python/common/business-registry-model/requirements.txt diff --git a/python/common/business-registry-model/dev.txt b/python/common/business-registry-model/dev.txt deleted file mode 100755 index da48d71f89..0000000000 --- a/python/common/business-registry-model/dev.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Everything the developer needs in addition to the production requirements -# Testing -coverage -freezegun -hypothesis -pyhamcrest -pytest -pytest-mock -pytest-asyncio -requests-mock - -# Lint and code style -autopep8 -flake8==5.0.4 -flake8-blind-except -flake8-debugger -flake8-docstrings -flake8-isort -flake8-quotes -pep8-naming -pydocstyle -# pydocstyle<4 -pylint -pylint-flask -isort<5 -pytest-cov - -# docker -lovely-pytest-docker diff --git a/python/common/business-registry-model/requirements.txt b/python/common/business-registry-model/requirements.txt deleted file mode 100755 index c62642f97e..0000000000 --- a/python/common/business-registry-model/requirements.txt +++ /dev/null @@ -1,63 +0,0 @@ -Babel==2.9.1 -Flask-Babel==2.0.0 -Flask-Caching==2.3.0 -Flask-Cors==3.0.10 -Flask-Migrate==2.7.0 -Flask-Moment==0.11.0 -Flask-Pydantic==0.8.0 -Flask-SQLAlchemy==2.5.1 -Flask-Script==2.0.6 -Flask==3.0.3 -Jinja2==2.11.3 -Mako==1.1.4 -MarkupSafe==1.1.1 -SQLAlchemy-Continuum==1.3.13 -SQLAlchemy-Utils==0.37.8 -SQLAlchemy==2.0.40 -Werkzeug==1.0.1 -alembic==1.7.5 -aniso8601==9.0.1 -attrs==23.1.0 -blinker==1.4 -cachelib==0.9.0 -certifi==2020.12.5 -chardet==4.0.0 -click==8.1.3 -croniter==2.0.5 -datedelta==1.3 -dpath==2.0.1 -ecdsa==0.14.1 -expiringdict==1.1.4 -flask-jwt-oidc==0.3.0 -flask-restx==0.3.0 -google-auth==2.29.0 -gunicorn==20.1.0 -idna==2.10 -itsdangerous==1.1.0 -jsonschema==4.19.0 -launchdarkly-server-sdk==7.1.0 -psycopg2-binary==2.8.6 -pyRFC3339==1.1 -pyasn1==0.4.8 -pycountry==20.7.3 -pydantic==2.10.6 -pyjwt==2.8.0 -pyrsistent==0.17.3 -python-dateutil==2.8.1 -python-dotenv==0.17.1 -python-editor==1.0.4 -python-jose==3.2.0 -pytz==2024.1 -rsa==4.7.2 -semver==2.13.0 -sentry-sdk==1.20.0 -six==1.15.0 -strict-rfc3339==0.7 -urllib3==1.26.11 -minio==7.0.2 -PyPDF2==1.26.0 -reportlab==3.6.12 -html-sanitizer==2.4.1 -lxml==5.2.2 -git+https://github.com/bcgov/business-schemas.git@2.18.39#egg=registry_schemas -git+https://github.com/bcgov/lear.git#egg=sql-versioning&subdirectory=python/common/sql-versioning diff --git a/python/common/sql-versioning/pyproject.toml b/python/common/sql-versioning/pyproject.toml index ddf306235f..0466db1585 100644 --- a/python/common/sql-versioning/pyproject.toml +++ b/python/common/sql-versioning/pyproject.toml @@ -8,7 +8,7 @@ packages = [{include = "sql_versioning"}] [tool.poetry.dependencies] python = "^3.8" -sqlalchemy = "^2.0.0" +sqlalchemy = "1.4.44" [tool.poetry.group.dev.dependencies] From 28127e58dbbc36e3199cb353bc4ded27baa6a7ef Mon Sep 17 00:00:00 2001 From: panish16 Date: Wed, 22 Apr 2026 15:22:29 -0700 Subject: [PATCH 10/11] =?UTF-8?q?drop=20isort<5=20pin=20in=20colin-api=20d?= =?UTF-8?q?ev=20deps=20=E2=80=94=20fixes=20CI=20flake8-isort=20errors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isort 4.x requires distutils which was removed in Python 3.12+, and the flake8-isort/isort 4.x combination does not correctly apply known_first_party from setup.cfg. Updating to isort>=5.0.0 fixes the import-order CI failures. Import ordering in source files was already corrected in a prior commit and validates clean against isort 5.x. Co-Authored-By: Claude Sonnet 4.6 --- colin-api/requirements/dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colin-api/requirements/dev.txt b/colin-api/requirements/dev.txt index 54426f2c63..360fa99ede 100644 --- a/colin-api/requirements/dev.txt +++ b/colin-api/requirements/dev.txt @@ -21,5 +21,5 @@ coverage pydocstyle<4.0 pylint pylint-flask -isort<5,>=4.2.5 +isort>=5.0.0 sqlalchemy>=2.0.0,<3.0.0 From 722718fa37338bbe05a30268021093f0b99b3b59 Mon Sep 17 00:00:00 2001 From: panish16 Date: Tue, 28 Apr 2026 11:10:03 -0700 Subject: [PATCH 11/11] =?UTF-8?q?revert=20colin-api=20EOL=20dependency=20a?= =?UTF-8?q?nd=20Flask=203.x=20changes=20=E2=80=94=20Entity=20team=20will?= =?UTF-8?q?=20handle=20the=20full=20Python=20version=20upgrade=20separatel?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/colin-api-ci.yml | 4 ++-- colin-api/Dockerfile | 4 ++-- colin-api/Makefile | 4 ++-- colin-api/requirements.txt | 20 +++++++++--------- colin-api/requirements/dev.txt | 6 +++--- colin-api/setup.cfg | 4 +--- colin-api/src/colin_api/config.py | 2 +- colin-api/src/colin_api/models/filing.py | 25 ++++++++++++++++++----- colin-api/src/colin_api/resources/db.py | 19 +++++++++-------- colin-api/src/colin_api/services/flags.py | 7 +++---- 10 files changed, 55 insertions(+), 40 deletions(-) diff --git a/.github/workflows/colin-api-ci.yml b/.github/workflows/colin-api-ci.yml index 52e3161c69..52763afb5f 100644 --- a/.github/workflows/colin-api-ci.yml +++ b/.github/workflows/colin-api-ci.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: - python-version: [3.9] + python-version: [3.8] steps: - uses: actions/checkout@v3 @@ -68,7 +68,7 @@ jobs: strategy: matrix: - python-version: [3.9] + python-version: [3.8] services: postgres: diff --git a/colin-api/Dockerfile b/colin-api/Dockerfile index cc7f76e412..a0d805392d 100644 --- a/colin-api/Dockerfile +++ b/colin-api/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.8 ARG VCS_REF="missing" ARG BUILD_DATE="missing" @@ -13,7 +13,7 @@ USER root # Installing Oracle instant client WORKDIR /opt/oracle -RUN apt-get update && apt-get install -y libaio1t64 gdb wget unzip \ +RUN apt-get update && apt-get install -y libaio1 gdb wget unzip \ && wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-basiclite-linux.x64-21.1.0.0.0.zip \ && wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-sqlplus-linux.x64-21.1.0.0.0.zip \ && unzip instantclient-basiclite-linux.x64-21.1.0.0.0.zip \ diff --git a/colin-api/Makefile b/colin-api/Makefile index c00bea195f..80e6ff701a 100644 --- a/colin-api/Makefile +++ b/colin-api/Makefile @@ -37,7 +37,7 @@ clean-test: ## clean test files rm -fr htmlcov/ build-req: clean ## Upgrade requirements - test -f venv/bin/activate || python3.9 -m venv $(CURRENT_ABS_DIR)/venv ;\ + test -f venv/bin/activate || python3.8 -m venv $(CURRENT_ABS_DIR)/venv ;\ . venv/bin/activate ;\ pip install --upgrade pip ;\ pip install -Ur requirements/prod.txt ;\ @@ -46,7 +46,7 @@ build-req: clean ## Upgrade requirements pip install -Ur requirements/bcregistry-libraries.txt install: clean ## Install python virtual environment - test -f venv/bin/activate || python3.9 -m venv $(CURRENT_ABS_DIR)/venv ;\ + test -f venv/bin/activate || python3.8 -m venv $(CURRENT_ABS_DIR)/venv ;\ . venv/bin/activate ;\ pip install --upgrade pip ;\ pip install -Ur requirements.txt diff --git a/colin-api/requirements.txt b/colin-api/requirements.txt index 57e8d684d0..0026ea71eb 100644 --- a/colin-api/requirements.txt +++ b/colin-api/requirements.txt @@ -1,22 +1,22 @@ Flask-Moment==0.11.0 Flask-Script==2.0.6 -Flask==3.0.3 -Jinja2==3.1.6 -MarkupSafe==2.1.5 -Werkzeug==3.0.6 +Flask==1.1.2 +Jinja2==2.11.3 +MarkupSafe==1.1.1 +Werkzeug==1.0.1 aniso8601==9.0.1 -blinker==1.8.2 +blinker==1.4 certifi==2020.12.5 click==8.1.3 cx-Oracle==8.1.0 datedelta==1.3 debugpy ecdsa==0.14.1 -flask-jwt-oidc==0.8.0 -flask-restx==1.3.0 +flask-jwt-oidc==0.3.0 +flask-restx==0.3.0 gunicorn==20.1.0 -itsdangerous==2.2.0 +itsdangerous==1.1.0 jsonschema==4.19.0 launchdarkly-server-sdk==7.1.0 psycopg2-binary==2.8.6 @@ -28,7 +28,7 @@ python-jose==3.2.0 pytz==2021.1 requests==2.25.1 rsa==4.7.2 -SQLAlchemy==2.0.40 -six==1.16.0 +SQLAlchemy==1.4.44 +six==1.15.0 urllib3==1.26.11 git+https://github.com/bcgov/business-schemas.git#egg=registry_schemas diff --git a/colin-api/requirements/dev.txt b/colin-api/requirements/dev.txt index 360fa99ede..9e3570826d 100644 --- a/colin-api/requirements/dev.txt +++ b/colin-api/requirements/dev.txt @@ -6,7 +6,7 @@ pytest-mock pytest-cov requests pyhamcrest -sqlalchemy>=2.0.0,<3.0.0 +sqlalchemy<=1.4.44 # Lint and code style flake8 @@ -21,5 +21,5 @@ coverage pydocstyle<4.0 pylint pylint-flask -isort>=5.0.0 -sqlalchemy>=2.0.0,<3.0.0 +isort<5,>=4.2.5 +sqlalchemy<=1.4.44 diff --git a/colin-api/setup.cfg b/colin-api/setup.cfg index b796d8dede..4a9634c670 100644 --- a/colin-api/setup.cfg +++ b/colin-api/setup.cfg @@ -71,7 +71,7 @@ notes=FIXME,XXX,TODO ignored-modules=flask_sqlalchemy,sqlalchemy,SQLAlchemy,alembic,scoped_session ignored-classes=scoped_session min-similarity-lines=100 -disable=C0301,W0511,R0801,R0902,E1136,R0917,C0411 +disable=C0301,W0511,R0801,R0902,E1136 [isort] line_length = 120 @@ -79,8 +79,6 @@ indent = 4 multi_line_output = 4 lines_after_imports = 2 include_trailing_comma = True -known_first_party = colin_api -known_third_party = cx_Oracle,flask,flask_jwt_oidc,flask_restx,ldclient,pytz,requests,sqlalchemy [tool:pytest] addopts = --cov=src --cov-report html:htmlcov --cov-report xml:coverage.xml diff --git a/colin-api/src/colin_api/config.py b/colin-api/src/colin_api/config.py index 04fa15632a..e61c31c9cf 100644 --- a/colin-api/src/colin_api/config.py +++ b/colin-api/src/colin_api/config.py @@ -74,7 +74,7 @@ class _Config: # pylint: disable=too-few-public-methods # JWT_OIDC Settings JWT_OIDC_WELL_KNOWN_CONFIG = os.getenv('JWT_OIDC_WELL_KNOWN_CONFIG') - JWT_OIDC_ALGORITHMS = os.getenv('JWT_OIDC_ALGORITHMS', 'RS256') + JWT_OIDC_ALGORITHMS = os.getenv('JWT_OIDC_ALGORITHMS') JWT_OIDC_JWKS_URI = os.getenv('JWT_OIDC_JWKS_URI') JWT_OIDC_ISSUER = os.getenv('JWT_OIDC_ISSUER') JWT_OIDC_AUDIENCE = os.getenv('JWT_OIDC_AUDIENCE') diff --git a/colin-api/src/colin_api/models/filing.py b/colin-api/src/colin_api/models/filing.py index b696ee25e4..4aee7f2140 100644 --- a/colin-api/src/colin_api/models/filing.py +++ b/colin-api/src/colin_api/models/filing.py @@ -25,11 +25,26 @@ from flask import current_app from registry_schemas.utils import get_schema -from colin_api.exceptions import ( - FilingNotFoundException, GenericException, InvalidFilingTypeException, OfficeNotFoundException, - PartiesNotFoundException, UnableToDetermineCorpTypeException,) -from colin_api.models import ( - Address, Business, ContOut, CorpInvolved, CorpName, FilingType, Jurisdiction, Office, Party, ShareObject,) +from colin_api.exceptions import ( # noqa: I001 + FilingNotFoundException, # noqa: I001 + GenericException, # noqa: I001 + InvalidFilingTypeException, # noqa: I001 + OfficeNotFoundException, # noqa: I001 + PartiesNotFoundException, # noqa: I001 + UnableToDetermineCorpTypeException, # noqa: I001 +) # noqa: I001 +from colin_api.models import ( # noqa: I001 + Address, # noqa: I001 + Business, # noqa: I001 + ContOut, # noqa: I001 + CorpInvolved, # noqa: I001 + CorpName, # noqa: I001 + FilingType, # noqa: I001 + Jurisdiction, # noqa: I001 + Office, # noqa: I001 + Party, # noqa: I001 + ShareObject, # noqa: I001 +) # noqa: I001 from colin_api.resources.db import DB from colin_api.utils import convert_to_json_date, convert_to_json_datetime, convert_to_pacific_time, convert_to_snake diff --git a/colin-api/src/colin_api/resources/db.py b/colin-api/src/colin_api/resources/db.py index 1ae460b88c..9cc5b13cf9 100644 --- a/colin-api/src/colin_api/resources/db.py +++ b/colin-api/src/colin_api/resources/db.py @@ -16,7 +16,7 @@ These will get initialized by the application. """ import cx_Oracle -from flask import current_app, g +from flask import _app_ctx_stack, current_app class OracleDB: @@ -37,10 +37,11 @@ def init_app(self, app): app.teardown_appcontext(self.teardown) @staticmethod - def teardown(exception): # pylint: disable=unused-argument + def teardown(): """Oracle session pool cleans up after itself.""" - if hasattr(g, '_oracle_pool'): - g._oracle_pool.close() # pylint: disable=protected-access + ctx = _app_ctx_stack.top + if hasattr(ctx, 'oracle_pool'): + ctx.oracle_pool.close() @staticmethod def _create_pool(): @@ -77,7 +78,7 @@ def init_session(conn, *args): # pylint: disable=unused-argument; Extra var bei nencoding='UTF-8') @property - def connection(self): + def connection(self): # pylint: disable=inconsistent-return-statements """Create connection property for the NROService. If this is running in a Flask context, @@ -85,9 +86,11 @@ def connection(self): and then return an acquired session :return: cx_Oracle.connection type """ - if not hasattr(g, '_oracle_pool'): - g._oracle_pool = self._create_pool() # pylint: disable=protected-access - return g._oracle_pool.acquire() # pylint: disable=protected-access + ctx = _app_ctx_stack.top + if ctx is not None: + if not hasattr(ctx, '_oracle_pool'): + ctx._oracle_pool = self._create_pool() # pylint: disable = protected-access; need this method + return ctx._oracle_pool.acquire() # pylint: disable = protected-access; need this method # export instance of this class diff --git a/colin-api/src/colin_api/services/flags.py b/colin-api/src/colin_api/services/flags.py index abb54e832e..a517adddee 100644 --- a/colin-api/src/colin_api/services/flags.py +++ b/colin-api/src/colin_api/services/flags.py @@ -13,8 +13,7 @@ # limitations under the License. """Manage the Feature Flags initialization, setup and service.""" from flask import current_app -from ldclient import get as ldclient_get # noqa: I001 -from ldclient import set_config as ldclient_set_config +from ldclient import get as ldclient_get, set_config as ldclient_set_config # noqa: I001 from ldclient.config import Config # noqa: I005 from ldclient.impl.integrations.files.file_data_source import _FileDataSource from ldclient.interfaces import UpdateProcessor @@ -65,9 +64,9 @@ def init_app(self, app): self.app = app self.sdk_key = app.config.get('LD_SDK_KEY') - if self.sdk_key or app.debug or app.testing: + if self.sdk_key or app.env != 'production': - if not app.debug and not app.testing: + if app.env == 'production': config = Config(sdk_key=self.sdk_key) else: factory = FileDataSource.factory(paths=['flags.json'],